From 0ef807146e5934f206f23650f5a2c51ef143be2e Mon Sep 17 00:00:00 2001 From: md5 Date: Thu, 5 May 2011 20:14:21 +0300 Subject: SWORD25: Remove thumbnails from the cache when saving a new game --- engines/sword25/kernel/persistenceservice.cpp | 3 +++ engines/sword25/kernel/resmanager.cpp | 15 +++++++++++++++ engines/sword25/kernel/resmanager.h | 5 +++++ 3 files changed, 23 insertions(+) (limited to 'engines/sword25/kernel') diff --git a/engines/sword25/kernel/persistenceservice.cpp b/engines/sword25/kernel/persistenceservice.cpp index 500703befb..6bb2b1b102 100644 --- a/engines/sword25/kernel/persistenceservice.cpp +++ b/engines/sword25/kernel/persistenceservice.cpp @@ -336,6 +336,9 @@ bool PersistenceService::saveGame(uint slotID, const Common::String &screenshotF // Savegameinformationen für diesen Slot aktualisieren. _impl->readSlotSavegameInformation(slotID); + // Empty the cache, to remove old thumbnails + Kernel::getInstance()->getResourceManager()->emptyThumbnailCache(); + // Erfolg signalisieren. return true; } diff --git a/engines/sword25/kernel/resmanager.cpp b/engines/sword25/kernel/resmanager.cpp index 8b446e69d1..b77d79e8ea 100644 --- a/engines/sword25/kernel/resmanager.cpp +++ b/engines/sword25/kernel/resmanager.cpp @@ -147,6 +147,21 @@ void ResourceManager::emptyCache() { } } +void ResourceManager::emptyThumbnailCache() { + // Scan through the resource list + Common::List::iterator iter = _resources.begin(); + while (iter != _resources.end()) { + if ((*iter)->getFileName().hasPrefix("/saves")) { + // Unlock the thumbnail + while ((*iter)->getLockCount() > 0) + (*iter)->release(); + // Delete the thumbnail + iter = deleteResource(*iter); + } else + ++iter; + } +} + /** * Returns a requested resource. If any error occurs, returns NULL * @param FileName Filename of resource diff --git a/engines/sword25/kernel/resmanager.h b/engines/sword25/kernel/resmanager.h index 5b2bfd395f..f8006bd62d 100644 --- a/engines/sword25/kernel/resmanager.h +++ b/engines/sword25/kernel/resmanager.h @@ -81,6 +81,11 @@ public: **/ void emptyCache(); + /** + * Removes all the savegame thumbnails from the cache + **/ + void emptyThumbnailCache(); + /** * Writes the names of all currently locked resources to the log file */ -- cgit v1.2.3