diff options
author | Benjamin C Meyer <benjamin.meyer@torchmobile.com> | 2009-04-29 15:15:25 (GMT) |
---|---|---|
committer | Thiago Macieira <thiago.macieira@nokia.com> | 2009-05-18 14:23:45 (GMT) |
commit | e5755e131952ab5c3c8dd0fd6a88dbaa7148898a (patch) | |
tree | 6808d3cf1087d813a37e12e894ff47d399427506 | |
parent | ef310a8cf2067a2fe21d6812cf34fb8aaad74f48 (diff) | |
download | Qt-e5755e131952ab5c3c8dd0fd6a88dbaa7148898a.zip Qt-e5755e131952ab5c3c8dd0fd6a88dbaa7148898a.tar.gz Qt-e5755e131952ab5c3c8dd0fd6a88dbaa7148898a.tar.bz2 |
Fix QNetworkDiskCache to expire the oldest files first.
When expiring cache files use a QMultiMap, when using a QMap not all
files are put into the map because often many files (downloaded or
updated at the same time) will have the same creation QDateTime and
so only one will go into the QMap who's key is QDateTime.
Reviewed-By: Thiago Macieira
Reviewed-By: Peter Hartmann
-rw-r--r-- | src/network/access/qnetworkdiskcache.cpp | 6 | ||||
-rw-r--r-- | tests/auto/qnetworkdiskcache/tst_qnetworkdiskcache.cpp | 3 |
2 files changed, 5 insertions, 4 deletions
diff --git a/src/network/access/qnetworkdiskcache.cpp b/src/network/access/qnetworkdiskcache.cpp index 892929e..44a8298 100644 --- a/src/network/access/qnetworkdiskcache.cpp +++ b/src/network/access/qnetworkdiskcache.cpp @@ -494,21 +494,21 @@ qint64 QNetworkDiskCache::expire() QDir::Filters filters = QDir::AllDirs | QDir:: Files | QDir::NoDotAndDotDot; QDirIterator it(cacheDirectory(), filters, QDirIterator::Subdirectories); - QMap<QDateTime, QString> cacheItems; + QMultiMap<QDateTime, QString> cacheItems; qint64 totalSize = 0; while (it.hasNext()) { QString path = it.next(); QFileInfo info = it.fileInfo(); QString fileName = info.fileName(); if (fileName.endsWith(CACHE_POSTFIX) && fileName.startsWith(CACHE_PREFIX)) { - cacheItems[info.created()] = path; + cacheItems.insert(info.created(), path); totalSize += info.size(); } } int removedFiles = 0; qint64 goal = (maximumCacheSize() * 9) / 10; - QMap<QDateTime, QString>::const_iterator i = cacheItems.constBegin(); + QMultiMap<QDateTime, QString>::const_iterator i = cacheItems.constBegin(); while (i != cacheItems.constEnd()) { if (totalSize < goal) break; diff --git a/tests/auto/qnetworkdiskcache/tst_qnetworkdiskcache.cpp b/tests/auto/qnetworkdiskcache/tst_qnetworkdiskcache.cpp index fc15437..2383767 100644 --- a/tests/auto/qnetworkdiskcache/tst_qnetworkdiskcache.cpp +++ b/tests/auto/qnetworkdiskcache/tst_qnetworkdiskcache.cpp @@ -389,7 +389,8 @@ void tst_QNetworkDiskCache::expire() qint64 max = cache.maximumCacheSize(); QCOMPARE(max, limit); for (int i = 0; i < 10; ++i) { - QTest::qWait(2000); + if (i % 3 == 0) + QTest::qWait(2000); QNetworkCacheMetaData m; m.setUrl(QUrl("http://www.foo.com/" + QString::number(i))); QIODevice *d = cache.prepare(m); |