This file is indexed.

/usr/include/libtomahawk/utils/TomahawkCache.h is in libtomahawk-dev 0.8.4+dfsg1-0ubuntu1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/* === This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
 *
 *   Copyright 2012, Casey Link <unnamedrambler@gmail.com>
 *
 *   Tomahawk is free software: you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation, either version 3 of the License, or
 *   (at your option) any later version.
 *
 *   Tomahawk is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with Tomahawk. If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef TOMAHAWKCACHE_H
#define TOMAHAWKCACHE_H

#include "DllMacro.h"
#include "utils/TomahawkUtils.h"

#include <QMutex>
#include <QSettings>
#include <QObject>
#include <QTimer>
#include <QDir>

namespace TomahawkUtils
{

/**
 * Internal data structure. Don't use.
 */
struct CacheData
{
    CacheData(){}
    CacheData( qint64 maxAg, QVariant dat )
    : maxAge( maxAg )
    , data( dat )
    {}

    qint64 maxAge; //!< milliseconds
    QVariant data;
};

/**
 * A simple generic cache for anyone to use.
 *
 * Data is segmented according to clients, which specify
 * a client identifier.
 *
 * Structure is a basic key-value store with associated max lifetime in
 * milliseconds.
 */
class DLLEXPORT Cache : public QObject
{
Q_OBJECT

public:
    static Cache* instance();
    virtual ~Cache();

    /**
     * Store data in the cache.
     * @param identifier your unique identifier, used to segment your data.
     * @param maxAge lifetime of data in milliseconds (e.g, 3600000 = 1 hour)
     * @param key the key to store the data
     * @param value the data to store
     */
    void putData( const QString& identifier, qint64 maxAge, const QString& key, const QVariant& value );

    /**
     * Retrieve data from the cache.
     * @param identifier your unique identifier, used to segment your data.
     * @param key the key to store the data
     * @return the data, if found, if not found an invalid QVariant is returned.
     */
    QVariant getData( const QString& identifier, const QString& key );

private slots:
    void pruneTimerFired();

private:
    Cache();
    static Cache* s_instance;

    /**
     * Version number of the cache.
     * If you change existing cached data,
     * increase this number.
     */
    static const int s_cacheVersion;

    /**
     * Adds a client to the manifest.
     * Does not lock the mutex.
     */
    void addClient( const QString& identifier );

    /**
     * Removes a client to the manifest.
     * Does not lock the mutex.
     */
    void removeClient( const QString& identifier );

    QString m_cacheBaseDir;
    QSettings m_cacheManifest;
    QTimer m_pruneTimer;
    QMutex m_mutex;
};

}

inline QDataStream& operator<< ( QDataStream& in, const TomahawkUtils::CacheData& data )
{
   in << data.data << data.maxAge;
   return in;
}

inline QDataStream& operator>> ( QDataStream& out, TomahawkUtils::CacheData& data )
{
    out >> data.data;
    out >> data.maxAge;
    return out;
}

Q_DECLARE_METATYPE( TomahawkUtils::CacheData );

#endif // TOMAHAWKCACHE_H