34 #include <QMutexLocker> 45 QString GetCacheDir (
const QString& subpath)
52 : QNetworkDiskCache (parent)
54 , InsertRemoveMutex_ (QMutex::Recursive)
56 [this] {
return maximumCacheSize (); }))
58 setCacheDirectory (GetCacheDir (subpath));
68 QMutexLocker lock (&InsertRemoveMutex_);
69 return QNetworkDiskCache::data (url);
74 QMutexLocker lock (&InsertRemoveMutex_);
75 if (!PendingDev2Url_.contains (device))
77 qWarning () << Q_FUNC_INFO
78 <<
"stall device detected";
82 PendingUrl2Devs_ [PendingDev2Url_.take (device)].removeAll (device);
84 CurrentSize_ += device->size ();
85 QNetworkDiskCache::insert (device);
90 QMutexLocker lock (&InsertRemoveMutex_);
91 return QNetworkDiskCache::metaData (url);
96 QMutexLocker lock (&InsertRemoveMutex_);
97 const auto dev = QNetworkDiskCache::prepare (metadata);
98 PendingDev2Url_ [dev] = metadata.url ();
99 PendingUrl2Devs_ [metadata.url ()] << dev;
105 QMutexLocker lock (&InsertRemoveMutex_);
106 for (
const auto dev : PendingUrl2Devs_.take (url))
107 PendingDev2Url_.remove (dev);
108 return QNetworkDiskCache::remove (url);
113 QMutexLocker lock (&InsertRemoveMutex_);
114 QNetworkDiskCache::updateMetaData (
metaData);
119 if (CurrentSize_ < 0)
121 const auto& dir = cacheDirectory ();
123 [
this] (qint64 res) { CurrentSize_ = res; };
125 return maximumCacheSize () * 8 / 10;
qint64 expire() override
Reimplemented from QNetworkDiskCache.
QIODevice * data(const QUrl &url) override
Reimplemented from QNetworkDiskCache.
QDir GetUserDir(UserDir dir, const QString &subpath)
qint64 cacheSize() const override
Reimplemented from QNetworkDiskCache.
static NetworkDiskCacheGC & Instance()
Returns a single global instance of the GC manager.
Garbage collection for a set of network disk caches.
void insert(QIODevice *device) override
Reimplemented from QNetworkDiskCache.
QIODevice * prepare(const QNetworkCacheMetaData &) override
Reimplemented from QNetworkDiskCache.
QNetworkCacheMetaData metaData(const QUrl &url) override
Reimplemented from QNetworkDiskCache.
NetworkDiskCache(const QString &subpath, QObject *parent=0)
Constructs the new disk cache.
void updateMetaData(const QNetworkCacheMetaData &metaData) override
Reimplemented from QNetworkDiskCache.
bool remove(const QUrl &url) override
Reimplemented from QNetworkDiskCache.