12#include <QMutexLocker>
21 QString GetCacheDir (
const QString& subpath)
28 : QNetworkDiskCache (parent)
30 [this] {
return maximumCacheSize (); }))
32 setCacheDirectory (GetCacheDir (subpath));
42 QMutexLocker lock (&InsertRemoveMutex_);
43 return QNetworkDiskCache::data (url);
48 QMutexLocker lock (&InsertRemoveMutex_);
49 if (!PendingDev2Url_.contains (device))
51 qWarning () << Q_FUNC_INFO
52 <<
"stall device detected";
56 PendingUrl2Devs_ [PendingDev2Url_.take (device)].removeAll (device);
58 CurrentSize_ += device->size ();
59 QNetworkDiskCache::insert (device);
64 QMutexLocker lock (&InsertRemoveMutex_);
65 return QNetworkDiskCache::metaData (url);
70 QMutexLocker lock (&InsertRemoveMutex_);
71 const auto dev = QNetworkDiskCache::prepare (metadata);
72 PendingDev2Url_ [dev] = metadata.url ();
73 PendingUrl2Devs_ [metadata.url ()] << dev;
79 QMutexLocker lock (&InsertRemoveMutex_);
80 for (
const auto dev : PendingUrl2Devs_.take (url))
81 PendingDev2Url_.remove (dev);
82 return QNetworkDiskCache::remove (url);
87 QMutexLocker lock (&InsertRemoveMutex_);
88 QNetworkDiskCache::updateMetaData (
metaData);
95 const auto& dir = cacheDirectory ();
97 [
this] (qint64 res) { CurrentSize_ = res; };
99 return maximumCacheSize () * 8 / 10;
Garbage collection for a set of network disk caches.
static NetworkDiskCacheGC & Instance()
Returns a single global instance of the GC manager.
qint64 cacheSize() const override
Reimplemented from QNetworkDiskCache.
QIODevice * data(const QUrl &url) override
Reimplemented from QNetworkDiskCache.
bool remove(const QUrl &url) override
Reimplemented from QNetworkDiskCache.
void updateMetaData(const QNetworkCacheMetaData &metaData) override
Reimplemented from QNetworkDiskCache.
qint64 expire() override
Reimplemented from QNetworkDiskCache.
NetworkDiskCache(const QString &subpath, QObject *parent=nullptr)
Constructs the new disk cache.
QNetworkCacheMetaData metaData(const QUrl &url) override
Reimplemented from QNetworkDiskCache.
void insert(QIODevice *device) override
Reimplemented from QNetworkDiskCache.
QIODevice * prepare(const QNetworkCacheMetaData &) override
Reimplemented from QNetworkDiskCache.
@ Cache
Cache for volatile data.
QDir GetUserDir(UserDir dir, const QString &subpath)