aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backends/cloud/cloudmanager.cpp9
-rw-r--r--gui/storagewizarddialog.cpp23
2 files changed, 31 insertions, 1 deletions
diff --git a/backends/cloud/cloudmanager.cpp b/backends/cloud/cloudmanager.cpp
index 8b7230fb5c..ed48ec5079 100644
--- a/backends/cloud/cloudmanager.cpp
+++ b/backends/cloud/cloudmanager.cpp
@@ -128,7 +128,14 @@ void CloudManager::replaceStorage(Storage *storage, uint32 index) {
freeStorages();
if (!storage) error("CloudManager::replaceStorage: NULL storage passed");
if (index >= kStorageTotal) error("CloudManager::replaceStorage: invalid index passed");
- delete _activeStorage;
+ if (_activeStorage != nullptr && _activeStorage->isWorking()) {
+ warning("CloudManager::replaceStorage: replacing Storage while the other is working");
+ if (_activeStorage->isDownloading()) _activeStorage->cancelDownload();
+ if (_activeStorage->isSyncing()) _activeStorage->cancelSync();
+ removeStorage(_activeStorage);
+ } else {
+ delete _activeStorage;
+ }
_activeStorage = storage;
_currentStorageIndex = index;
save();
diff --git a/gui/storagewizarddialog.cpp b/gui/storagewizarddialog.cpp
index 393b8263ef..a8574ab7d2 100644
--- a/gui/storagewizarddialog.cpp
+++ b/gui/storagewizarddialog.cpp
@@ -74,6 +74,29 @@ StorageWizardDialog::StorageWizardDialog(uint32 storageId):
void StorageWizardDialog::open() {
Dialog::open();
+
+ if (CloudMan.isWorking()) {
+ bool doClose = true;
+
+ MessageDialog alert(_("The other Storage is working. Do you want to interrupt it?"), _("Yes"), _("No"));
+ if (alert.runModal() == GUI::kMessageOK) {
+ if (CloudMan.isDownloading()) CloudMan.cancelDownload();
+ if (CloudMan.isSyncing()) CloudMan.cancelSync();
+
+ // I believe it still would return `true` here, but just in case
+ if (CloudMan.isWorking()) {
+ MessageDialog alert2(_("Wait until current Storage finishes up and try again."));
+ alert2.runModal();
+ } else
+ doClose = false;
+ }
+
+ if (doClose) {
+ close();
+ return;
+ }
+ }
+
#ifdef USE_SDL_NET
_stopServerOnClose = !LocalServer.isRunning();
LocalServer.start();