aboutsummaryrefslogtreecommitdiff
path: root/backends
diff options
context:
space:
mode:
Diffstat (limited to 'backends')
-rw-r--r--backends/cloud/box/boxstorage.cpp7
-rw-r--r--backends/cloud/box/boxstorage.h3
-rw-r--r--backends/cloud/savessyncrequest.cpp15
-rw-r--r--backends/cloud/storage.cpp4
-rw-r--r--backends/cloud/storage.h3
5 files changed, 28 insertions, 4 deletions
diff --git a/backends/cloud/box/boxstorage.cpp b/backends/cloud/box/boxstorage.cpp
index 628d18b89a..35e86409c3 100644
--- a/backends/cloud/box/boxstorage.cpp
+++ b/backends/cloud/box/boxstorage.cpp
@@ -252,9 +252,16 @@ Networking::Request *BoxStorage::upload(Common::String remotePath, Common::Strin
Networking::Request *BoxStorage::upload(Common::String path, Common::SeekableReadStream *contents, UploadCallback callback, Networking::ErrorCallback errorCallback) {
warning("BoxStorage::upload(ReadStream) not implemented");
+ if (errorCallback) (*errorCallback)(Networking::ErrorResponse(nullptr, false, true, "BoxStorage::upload(ReadStream) not implemented", -1));
+ delete callback;
+ delete errorCallback;
return nullptr;
}
+bool BoxStorage::uploadStreamSupported() {
+ return false;
+}
+
Networking::Request *BoxStorage::streamFileById(Common::String id, Networking::NetworkReadStreamCallback callback, Networking::ErrorCallback errorCallback) {
if (callback) {
Common::String url = "https://api.box.com/2.0/files/" + id + "/content";
diff --git a/backends/cloud/box/boxstorage.h b/backends/cloud/box/boxstorage.h
index 93afe4fabb..a737e9d4a1 100644
--- a/backends/cloud/box/boxstorage.h
+++ b/backends/cloud/box/boxstorage.h
@@ -83,6 +83,9 @@ public:
virtual Networking::Request *upload(Common::String remotePath, Common::String localPath, UploadCallback callback, Networking::ErrorCallback errorCallback);
virtual Networking::Request *upload(Common::String path, Common::SeekableReadStream *contents, UploadCallback callback, Networking::ErrorCallback errorCallback);
+ /** Returns whether Storage supports upload(ReadStream). */
+ virtual bool uploadStreamSupported();
+
/** Returns pointer to Networking::NetworkReadStream. */
virtual Networking::Request *streamFileById(Common::String path, Networking::NetworkReadStreamCallback callback, Networking::ErrorCallback errorCallback);
diff --git a/backends/cloud/savessyncrequest.cpp b/backends/cloud/savessyncrequest.cpp
index e12f5af7cc..32b22edcaa 100644
--- a/backends/cloud/savessyncrequest.cpp
+++ b/backends/cloud/savessyncrequest.cpp
@@ -279,10 +279,17 @@ void SavesSyncRequest::uploadNextFile() {
///////
debug("uploading %s (%d %%)", _currentUploadingFile.c_str(), (int)(getProgress()*100));
///////
- _workingRequest = _storage->upload(_storage->savesDirectoryPath() + _currentUploadingFile, g_system->getSavefileManager()->openRawFile(_currentUploadingFile),
- new Common::Callback<SavesSyncRequest, Storage::UploadResponse>(this, &SavesSyncRequest::fileUploadedCallback),
- new Common::Callback<SavesSyncRequest, Networking::ErrorResponse>(this, &SavesSyncRequest::fileUploadedErrorCallback)
- );
+ if (_storage->uploadStreamSupported()) {
+ _workingRequest = _storage->upload(_storage->savesDirectoryPath() + _currentUploadingFile, g_system->getSavefileManager()->openRawFile(_currentUploadingFile),
+ new Common::Callback<SavesSyncRequest, Storage::UploadResponse>(this, &SavesSyncRequest::fileUploadedCallback),
+ new Common::Callback<SavesSyncRequest, Networking::ErrorResponse>(this, &SavesSyncRequest::fileUploadedErrorCallback)
+ );
+ } else {
+ _workingRequest = _storage->upload(_storage->savesDirectoryPath() + _currentUploadingFile, DefaultSaveFileManager::concatWithSavesPath(_currentUploadingFile),
+ new Common::Callback<SavesSyncRequest, Storage::UploadResponse>(this, &SavesSyncRequest::fileUploadedCallback),
+ new Common::Callback<SavesSyncRequest, Networking::ErrorResponse>(this, &SavesSyncRequest::fileUploadedErrorCallback)
+ );
+ }
if (!_workingRequest) finishError(Networking::ErrorResponse(this));
}
diff --git a/backends/cloud/storage.cpp b/backends/cloud/storage.cpp
index 2cf851f3ba..110c97ad9c 100644
--- a/backends/cloud/storage.cpp
+++ b/backends/cloud/storage.cpp
@@ -85,6 +85,10 @@ Networking::Request *Storage::upload(Common::String remotePath, Common::String l
return upload(remotePath, f, callback, errorCallback);
}
+bool Storage::uploadStreamSupported() {
+ return true;
+}
+
Networking::Request *Storage::streamFile(Common::String path, Networking::NetworkReadStreamCallback callback, Networking::ErrorCallback errorCallback) {
//most Storages use paths instead of ids, so this should work
return streamFileById(path, callback, errorCallback);
diff --git a/backends/cloud/storage.h b/backends/cloud/storage.h
index 62b42697e6..273b93c764 100644
--- a/backends/cloud/storage.h
+++ b/backends/cloud/storage.h
@@ -126,6 +126,9 @@ public:
virtual Networking::Request *upload(Common::String path, Common::SeekableReadStream *contents, UploadCallback callback, Networking::ErrorCallback errorCallback) = 0;
virtual Networking::Request *upload(Common::String remotePath, Common::String localPath, UploadCallback callback, Networking::ErrorCallback errorCallback);
+ /** Returns whether Storage supports upload(ReadStream). */
+ virtual bool uploadStreamSupported();
+
/** Returns pointer to Networking::NetworkReadStream. */
virtual Networking::Request *streamFile(Common::String path, Networking::NetworkReadStreamCallback callback, Networking::ErrorCallback errorCallback);
virtual Networking::Request *streamFileById(Common::String id, Networking::NetworkReadStreamCallback callback, Networking::ErrorCallback errorCallback) = 0;