aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backends/cloud/savessyncrequest.cpp4
-rw-r--r--backends/saves/default/default-saves.cpp20
-rw-r--r--backends/saves/default/default-saves.h7
-rw-r--r--common/savefile.h7
-rw-r--r--gui/saveload-dialog.cpp23
-rw-r--r--gui/saveload-dialog.h7
6 files changed, 56 insertions, 12 deletions
diff --git a/backends/cloud/savessyncrequest.cpp b/backends/cloud/savessyncrequest.cpp
index 072685773e..d983a0fcae 100644
--- a/backends/cloud/savessyncrequest.cpp
+++ b/backends/cloud/savessyncrequest.cpp
@@ -214,11 +214,11 @@ void SavesSyncRequest::downloadNextFile() {
return;
}
- sendCommand(kSavesSyncProgressCmd, (int)(getDownloadingProgress() * 100));
-
_currentDownloadingFile = _filesToDownload.back();
_filesToDownload.pop_back();
+ sendCommand(kSavesSyncProgressCmd, (int)(getDownloadingProgress() * 100));
+
///////
debug("downloading %s (%d %%)", _currentDownloadingFile.name().c_str(), (int)(getProgress() * 100));
///////
diff --git a/backends/saves/default/default-saves.cpp b/backends/saves/default/default-saves.cpp
index 75ba50a081..a11d687c16 100644
--- a/backends/saves/default/default-saves.cpp
+++ b/backends/saves/default/default-saves.cpp
@@ -59,19 +59,33 @@ void DefaultSaveFileManager::checkPath(const Common::FSNode &dir) {
}
}
+void DefaultSaveFileManager::updateSavefilesList(Common::StringArray &lockedFiles) {
+ //make it refresh the cache next time it lists the saves
+ _cachedDirectory = "";
+
+ //remember the locked files list because some of these files don't exist yet
+ _lockedFiles = lockedFiles;
+}
+
Common::StringArray DefaultSaveFileManager::listSavefiles(const Common::String &pattern) {
// Assure the savefile name cache is up-to-date.
assureCached(getSavePath());
if (getError().getCode() != Common::kNoError)
return Common::StringArray();
+ Common::HashMap<Common::String, bool> locked;
+ for (Common::StringArray::const_iterator i = _lockedFiles.begin(), end = _lockedFiles.end(); i != end; ++i) {
+ if (i->matchString(pattern, true)) {
+ locked[*i] = true;
+ }
+ }
+
Common::StringArray results;
- for (SaveFileCache::const_iterator file = _saveFileCache.begin(), end = _saveFileCache.end(); file != end; ++file) {
- if (file->_key.matchString(pattern, true)) {
+ for (SaveFileCache::const_iterator file = _saveFileCache.begin(), end = _saveFileCache.end(); file != end; ++file) {
+ if (!locked.contains(file->_key) && file->_key.matchString(pattern, true)) {
results.push_back(file->_key);
}
}
-
return results;
}
diff --git a/backends/saves/default/default-saves.h b/backends/saves/default/default-saves.h
index 166e7004ed..af30cf45e9 100644
--- a/backends/saves/default/default-saves.h
+++ b/backends/saves/default/default-saves.h
@@ -37,6 +37,7 @@ public:
DefaultSaveFileManager();
DefaultSaveFileManager(const Common::String &defaultSavepath);
+ virtual void updateSavefilesList(Common::StringArray &lockedFiles);
virtual Common::StringArray listSavefiles(const Common::String &pattern);
virtual Common::InSaveFile *openRawFile(const Common::String &filename);
virtual Common::InSaveFile *openForLoading(const Common::String &filename);
@@ -75,6 +76,12 @@ protected:
*/
SaveFileCache _saveFileCache;
+ /**
+ * List of "locked" files. These cannot be used for saving/loading
+ * because CloudManager is downloading those.
+ */
+ Common::StringArray _lockedFiles;
+
private:
/**
* The currently cached directory.
diff --git a/common/savefile.h b/common/savefile.h
index d9c5512b7e..38b21c9ddd 100644
--- a/common/savefile.h
+++ b/common/savefile.h
@@ -183,6 +183,13 @@ public:
* @see Common::matchString()
*/
virtual StringArray listSavefiles(const String &pattern) = 0;
+
+ /**
+ * Refreshes the save files list (because some new files could've been added)
+ * and remembers the "locked" files list. These files could not be used
+ * for saving or loading because they are being synced by CloudManager.
+ */
+ virtual void updateSavefilesList(StringArray &lockedFiles) = 0;
};
} // End of namespace Common
diff --git a/gui/saveload-dialog.cpp b/gui/saveload-dialog.cpp
index 6d343c88ed..2f10182006 100644
--- a/gui/saveload-dialog.cpp
+++ b/gui/saveload-dialog.cpp
@@ -35,6 +35,7 @@
#include "gui/widgets/edittext.h"
#include "graphics/scaler.h"
+#include <common/savefile.h>
namespace GUI {
@@ -201,12 +202,9 @@ void SaveLoadChooserDialog::handleCommand(CommandSender *sender, uint32 cmd, uin
//this dialog only gets these commands if the progress dialog was shown and user clicked "run in background"
switch (cmd) {
- case kSavesSyncProgressCmd:
- //TODO: unlock that save which was downloaded
- break;
-
+ case kSavesSyncProgressCmd:
case kSavesSyncEndedCmd:
- //TODO: ?
+ updateSaveList();
break;
}
}
@@ -237,6 +235,7 @@ void SaveLoadChooserDialog::handleTickle() {
}
CloudMan.setSyncTarget(this);
_dialogWasShown = true;
+ updateSaveList();
}
}
Dialog::handleTickle();
@@ -259,6 +258,11 @@ void SaveLoadChooserDialog::reflowLayout() {
Dialog::reflowLayout();
}
+void SaveLoadChooserDialog::updateSaveList() {
+ Common::Array<Common::String> files = CloudMan.getSyncingFiles(); //returns empty array if not syncing
+ g_system->getSavefileManager()->updateSavefilesList(files);
+}
+
#ifndef DISABLE_SAVELOADCHOOSER_GRID
void SaveLoadChooserDialog::addChooserButtons() {
if (_listButton) {
@@ -570,6 +574,7 @@ void SaveLoadChooserSimple::close() {
}
void SaveLoadChooserSimple::updateSaveList() {
+ SaveLoadChooserDialog::updateSaveList();
_saveList = _metaEngine->listSaves(_target.c_str());
int curSlot = 0;
@@ -631,6 +636,7 @@ void SaveLoadChooserSimple::updateSaveList() {
}
_list->setList(saveNames, &colors);
+ draw();
}
// SaveLoadChooserGrid implementation
@@ -726,6 +732,13 @@ void SaveLoadChooserGrid::handleMouseWheel(int x, int y, int direction) {
}
}
+void SaveLoadChooserGrid::updateSaveList() {
+ SaveLoadChooserDialog::updateSaveList();
+ _saveList = _metaEngine->listSaves(_target.c_str());
+ updateSaves();
+ draw();
+}
+
void SaveLoadChooserGrid::open() {
SaveLoadChooserDialog::open();
diff --git a/gui/saveload-dialog.h b/gui/saveload-dialog.h
index e8f0c37228..a767fb8a23 100644
--- a/gui/saveload-dialog.h
+++ b/gui/saveload-dialog.h
@@ -84,6 +84,7 @@ public:
protected:
virtual int runIntern() = 0;
+ virtual void updateSaveList();
const bool _saveMode;
const MetaEngine *_metaEngine;
@@ -122,6 +123,8 @@ public:
virtual void open();
virtual void close();
+protected:
+ virtual void updateSaveList();
private:
virtual int runIntern();
@@ -136,8 +139,7 @@ private:
SaveStateList _saveList;
String _resultString;
-
- void updateSaveList();
+
void updateSelection(bool redraw);
};
@@ -180,6 +182,7 @@ public:
protected:
virtual void handleCommand(CommandSender *sender, uint32 cmd, uint32 data);
virtual void handleMouseWheel(int x, int y, int direction);
+ virtual void updateSaveList();
private:
virtual int runIntern();