diff options
author | Petr Mrázek <peterix@gmail.com> | 2015-04-01 00:23:17 +0200 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2015-04-01 00:23:17 +0200 |
commit | 3b6574181e5e0a5d99ed9dcdb5cb9a47af2499d0 (patch) | |
tree | 1fd0d4b4dbda6883553b058453c3d6fb2629242c | |
parent | eae544f0ebc26a2b103091b93d4f7c4188d00cff (diff) | |
download | MultiMC-3b6574181e5e0a5d99ed9dcdb5cb9a47af2499d0.tar MultiMC-3b6574181e5e0a5d99ed9dcdb5cb9a47af2499d0.tar.gz MultiMC-3b6574181e5e0a5d99ed9dcdb5cb9a47af2499d0.tar.lz MultiMC-3b6574181e5e0a5d99ed9dcdb5cb9a47af2499d0.tar.xz MultiMC-3b6574181e5e0a5d99ed9dcdb5cb9a47af2499d0.zip |
GH-853 evict asset index files from cache when they don't parse
-rw-r--r-- | logic/OneSixUpdate.cpp | 3 | ||||
-rw-r--r-- | logic/net/HttpMetaCache.cpp | 16 | ||||
-rw-r--r-- | logic/net/HttpMetaCache.h | 3 |
3 files changed, 22 insertions, 0 deletions
diff --git a/logic/OneSixUpdate.cpp b/logic/OneSixUpdate.cpp index 9d478650..5663484a 100644 --- a/logic/OneSixUpdate.cpp +++ b/logic/OneSixUpdate.cpp @@ -118,6 +118,9 @@ void OneSixUpdate::assetIndexFinished() QString asset_fname = "assets/indexes/" + assetName + ".json"; if (!AssetsUtils::loadAssetsIndexJson(asset_fname, &index)) { + auto metacache = MMC->metacache(); + auto entry = metacache->resolveEntry("asset_indexes", assetName + ".json"); + metacache->evictEntry(entry); emitFailed(tr("Failed to read the assets index!")); } diff --git a/logic/net/HttpMetaCache.cpp b/logic/net/HttpMetaCache.cpp index eb13ee6b..4533a736 100644 --- a/logic/net/HttpMetaCache.cpp +++ b/logic/net/HttpMetaCache.cpp @@ -135,6 +135,17 @@ bool HttpMetaCache::updateEntry(MetaEntryPtr stale_entry) return true; } +bool HttpMetaCache::evictEntry(MetaEntryPtr entry) +{ + if(entry) + { + entry->stale = true; + SaveEventually(); + return true; + } + return false; +} + MetaEntryPtr HttpMetaCache::staleEntry(QString base, QString resource_path) { auto foo = new MetaEntry; @@ -228,6 +239,11 @@ void HttpMetaCache::SaveNow() { for (auto entry : group.entry_list) { + // do not save stale entries. they are dead. + if(entry->stale) + { + continue; + } QJsonObject entryObj; entryObj.insert("base", QJsonValue(entry->base)); entryObj.insert("path", QJsonValue(entry->path)); diff --git a/logic/net/HttpMetaCache.h b/logic/net/HttpMetaCache.h index 55a34165..dd44623c 100644 --- a/logic/net/HttpMetaCache.h +++ b/logic/net/HttpMetaCache.h @@ -51,6 +51,9 @@ public: // add a previously resolved stale entry bool updateEntry(MetaEntryPtr stale_entry); + // evict selected entry from cache + bool evictEntry(MetaEntryPtr entry); + void addBase(QString base, QString base_root); // (re)start a timer that calls SaveNow later. |