12 #include <QMutexLocker>
21 QString GetCacheDir (
const QString& subpath)
28 : QNetworkDiskCache (parent)
29 , GcGuard_ (NetworkDiskCacheGC::Instance ().RegisterDirectory (GetCacheDir (subpath),
30 [this] {
return maximumCacheSize (); }))
32 setCacheDirectory (GetCacheDir (subpath));
35 qint64 NetworkDiskCache::cacheSize ()
const
40 QIODevice* NetworkDiskCache::data (
const QUrl& url)
42 QMutexLocker lock (&InsertRemoveMutex_);
43 return QNetworkDiskCache::data (url);
46 void NetworkDiskCache::insert (QIODevice *device)
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);
62 QNetworkCacheMetaData NetworkDiskCache::metaData (
const QUrl& url)
64 QMutexLocker lock (&InsertRemoveMutex_);
65 return QNetworkDiskCache::metaData (url);
68 QIODevice* NetworkDiskCache::prepare (
const QNetworkCacheMetaData& metadata)
70 QMutexLocker lock (&InsertRemoveMutex_);
71 const auto dev = QNetworkDiskCache::prepare (metadata);
72 PendingDev2Url_ [dev] = metadata.url ();
73 PendingUrl2Devs_ [metadata.url ()] << dev;
77 bool NetworkDiskCache::remove (
const QUrl& url)
79 QMutexLocker lock (&InsertRemoveMutex_);
80 for (
const auto dev : PendingUrl2Devs_.take (url))
81 PendingDev2Url_.remove (dev);
82 return QNetworkDiskCache::remove (url);
85 void NetworkDiskCache::updateMetaData (
const QNetworkCacheMetaData& metaData)
87 QMutexLocker lock (&InsertRemoveMutex_);
88 QNetworkDiskCache::updateMetaData (metaData);
91 qint64 NetworkDiskCache::expire ()
95 const auto& dir = cacheDirectory ();
96 Util::Sequence (
this, NetworkDiskCacheGC::Instance ().GetCurrentSize (dir)) >>
97 [
this] (qint64 res) { CurrentSize_ = res; };
99 return maximumCacheSize () * 8 / 10;