/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
|