12#include <QMutexLocker>
21 QString GetCacheDir (
const QString& subpath)
28 : QNetworkDiskCache (parent)
30 , InsertRemoveMutex_ (QMutex::Recursive)
32 [this] {
return maximumCacheSize (); }))
34 setCacheDirectory (GetCacheDir (subpath));
44 QMutexLocker lock (&InsertRemoveMutex_);
45 return QNetworkDiskCache::data (url);
50 QMutexLocker lock (&InsertRemoveMutex_);
51 if (!PendingDev2Url_.contains (device))
53 qWarning () << Q_FUNC_INFO
54 <<
"stall device detected";
58 PendingUrl2Devs_ [PendingDev2Url_.take (device)].removeAll (device);
60 CurrentSize_ += device->size ();
61 QNetworkDiskCache::insert (device);
66 QMutexLocker lock (&InsertRemoveMutex_);
67 return QNetworkDiskCache::metaData (url);
72 QMutexLocker lock (&InsertRemoveMutex_);
73 const auto dev = QNetworkDiskCache::prepare (metadata);
74 PendingDev2Url_ [dev] = metadata.url ();
75 PendingUrl2Devs_ [metadata.url ()] << dev;
81 QMutexLocker lock (&InsertRemoveMutex_);
82 for (
const auto dev : PendingUrl2Devs_.take (url))
83 PendingDev2Url_.remove (dev);
84 return QNetworkDiskCache::remove (url);
89 QMutexLocker lock (&InsertRemoveMutex_);
90 QNetworkDiskCache::updateMetaData (
metaData);
97 const auto& dir = cacheDirectory ();
99 [
this] (qint64 res) { CurrentSize_ = res; };
101 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)