From 06163cb8b907e30f8463b2b9700d136c73b19a33 Mon Sep 17 00:00:00 2001 From: Alexander Tkachev Date: Tue, 31 May 2016 21:47:57 +0600 Subject: CLOUD: Fix SavesSyncRequest to create saves folder --- backends/cloud/savessyncrequest.cpp | 33 ++++++++++++++++++++++++++++++--- backends/cloud/savessyncrequest.h | 2 ++ 2 files changed, 32 insertions(+), 3 deletions(-) (limited to 'backends') diff --git a/backends/cloud/savessyncrequest.cpp b/backends/cloud/savessyncrequest.cpp index cf0c427294..d5cb6f6f76 100644 --- a/backends/cloud/savessyncrequest.cpp +++ b/backends/cloud/savessyncrequest.cpp @@ -164,10 +164,37 @@ void SavesSyncRequest::directoryListedErrorCallback(Networking::ErrorResponse er return; } - //we're lucky - user just lacks his "/cloud/" folder + //we're lucky - user just lacks his "/cloud/" folder - let's create one + Common::String dir = _storage->savesDirectoryPath(); + if (dir.lastChar() == '/') dir.deleteLastChar(); + debug("creating %s", dir.c_str()); + _workingRequest = _storage->createDirectory(dir, + new Common::Callback(this, &SavesSyncRequest::directoryCreatedCallback), + new Common::Callback(this, &SavesSyncRequest::directoryCreatedErrorCallback) + ); +} + +void SavesSyncRequest::directoryCreatedCallback(Storage::BoolResponse response) { + _workingRequest = nullptr; + if (_ignoreCallback) return; + + //stop syncing if failed to create saves directory + if (!response.value) { + finishError(Networking::ErrorResponse(this, false, true, "", -1)); + return; + } + + //continue with empty files list Common::Array files; - directoryListedCallback(Storage::ListDirectoryResponse(error.request, files)); - //TODO: create it before uploading stuff + directoryListedCallback(Storage::ListDirectoryResponse(response.request, files)); +} + +void SavesSyncRequest::directoryCreatedErrorCallback(Networking::ErrorResponse error) { + _workingRequest = nullptr; + if (_ignoreCallback) return; + + //stop syncing if failed to create saves directory + finishError(error); } void SavesSyncRequest::downloadNextFile() { diff --git a/backends/cloud/savessyncrequest.h b/backends/cloud/savessyncrequest.h index bf44b70390..0e20159845 100644 --- a/backends/cloud/savessyncrequest.h +++ b/backends/cloud/savessyncrequest.h @@ -47,6 +47,8 @@ class SavesSyncRequest: public Networking::Request { void start(); void directoryListedCallback(Storage::ListDirectoryResponse response); void directoryListedErrorCallback(Networking::ErrorResponse error); + void directoryCreatedCallback(Storage::BoolResponse response); + void directoryCreatedErrorCallback(Networking::ErrorResponse error); void fileDownloadedCallback(Storage::BoolResponse response); void fileDownloadedErrorCallback(Networking::ErrorResponse error); void fileUploadedCallback(Storage::UploadResponse response); -- cgit v1.2.3