From f6e69b62765482d290b7673e97fb7cf6a03fc943 Mon Sep 17 00:00:00 2001 From: Alexander Tkachev Date: Tue, 7 Jun 2016 20:40:19 +0600 Subject: CLOUD: Fix DefaultSaveFileManager again Now openForLoading() and openForSaving() check whether file is locked, so AGOS and SCUMM engines Ctrl+number and Alt+number hot keys shouldn't be able to save/load in these slots during saves sync. --- backends/saves/default/default-saves.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/backends/saves/default/default-saves.cpp b/backends/saves/default/default-saves.cpp index a669c2ce81..3fcb3cb3b3 100644 --- a/backends/saves/default/default-saves.cpp +++ b/backends/saves/default/default-saves.cpp @@ -27,6 +27,10 @@ #include "common/scummsys.h" +#ifdef USE_CLOUD +#include "backends/cloud/cloudmanager.h" +#endif + #if !defined(DISABLE_DEFAULT_SAVEFILEMANAGER) #include "backends/saves/default/default-saves.h" @@ -109,6 +113,12 @@ Common::InSaveFile *DefaultSaveFileManager::openForLoading(const Common::String if (getError().getCode() != Common::kNoError) return nullptr; + for (Common::StringArray::const_iterator i = _lockedFiles.begin(), end = _lockedFiles.end(); i != end; ++i) { + if (filename == *i) { + return nullptr; //file is locked, no loading available + } + } + SaveFileCache::const_iterator file = _saveFileCache.find(filename); if (file == _saveFileCache.end()) { return nullptr; @@ -126,6 +136,12 @@ Common::OutSaveFile *DefaultSaveFileManager::openForSaving(const Common::String if (getError().getCode() != Common::kNoError) return nullptr; + for (Common::StringArray::const_iterator i = _lockedFiles.begin(), end = _lockedFiles.end(); i != end; ++i) { + if (filename == *i) { + return nullptr; //file is locked, no saving available + } + } + // Obtain node. SaveFileCache::const_iterator file = _saveFileCache.find(filename); Common::FSNode fileNode; @@ -209,6 +225,12 @@ void DefaultSaveFileManager::assureCached(const Common::String &savePathName) { // Check that path exists and is usable. checkPath(Common::FSNode(savePathName)); +#ifdef USE_CLOUD + Common::Array files = CloudMan.getSyncingFiles(); //returns empty array if not syncing + if (!files.empty()) updateSavefilesList(files); //makes this cache invalid + else _lockedFiles = files; +#endif + if (_cachedDirectory == savePathName) { return; } -- cgit v1.2.3