aboutsummaryrefslogtreecommitdiff
path: root/backends/cloud/dropbox
diff options
context:
space:
mode:
authorAlexander Tkachev2016-05-26 19:02:55 +0600
committerAlexander Tkachev2016-08-24 16:07:55 +0600
commitf4547f44df32ce1f49a6a36df083e7703751adcd (patch)
treea69e2f703a42348d9766ad128bb88b2c169719ad /backends/cloud/dropbox
parent62ccf1f902100febfb1be02b67e84a6e4938ebbf (diff)
downloadscummvm-rg350-f4547f44df32ce1f49a6a36df083e7703751adcd.tar.gz
scummvm-rg350-f4547f44df32ce1f49a6a36df083e7703751adcd.tar.bz2
scummvm-rg350-f4547f44df32ce1f49a6a36df083e7703751adcd.zip
CLOUD: Add RequestIdPair struct
Can be used with Callback<T> (means it's still type safe). It's used to pass not only Request id to user's callback, but also a value user wanted. void *data field is removed from RequestInfo.
Diffstat (limited to 'backends/cloud/dropbox')
-rw-r--r--backends/cloud/dropbox/dropboxlistdirectoryrequest.cpp11
-rw-r--r--backends/cloud/dropbox/dropboxlistdirectoryrequest.h2
-rw-r--r--backends/cloud/dropbox/dropboxstorage.cpp26
-rw-r--r--backends/cloud/dropbox/dropboxstorage.h4
4 files changed, 22 insertions, 21 deletions
diff --git a/backends/cloud/dropbox/dropboxlistdirectoryrequest.cpp b/backends/cloud/dropbox/dropboxlistdirectoryrequest.cpp
index 3dada884a0..be9304081e 100644
--- a/backends/cloud/dropbox/dropboxlistdirectoryrequest.cpp
+++ b/backends/cloud/dropbox/dropboxlistdirectoryrequest.cpp
@@ -25,6 +25,7 @@
#include "backends/networking/curl/connectionmanager.h"
#include "backends/networking/curl/curljsonrequest.h"
#include "common/json.h"
+#include "backends/cloud/storage.h"
namespace Cloud {
namespace Dropbox {
@@ -39,7 +40,7 @@ void DropboxListDirectoryRequest::startupWork() {
_files.clear();
_complete = false;
- Common::BaseCallback<> *innerCallback = new Common::Callback<DropboxListDirectoryRequest>(this, &DropboxListDirectoryRequest::responseCallback);
+ Networking::DataCallback innerCallback = new Common::Callback<DropboxListDirectoryRequest, Networking::RequestDataPair>(this, &DropboxListDirectoryRequest::responseCallback);
Networking::CurlJsonRequest *request = new Networking::CurlJsonRequest(innerCallback, "https://api.dropboxapi.com/2/files/list_folder");
request->addHeader("Authorization: Bearer " + _token);
request->addHeader("Content-Type: application/json");
@@ -57,8 +58,8 @@ void DropboxListDirectoryRequest::startupWork() {
}
-void DropboxListDirectoryRequest::responseCallback(void *jsonPtr) {
- Common::JSONValue *json = (Common::JSONValue *)jsonPtr;
+void DropboxListDirectoryRequest::responseCallback(Networking::RequestDataPair pair) {
+ Common::JSONValue *json = (Common::JSONValue *)pair.value;
if (json) {
Common::JSONObject response = json->asObject();
@@ -88,7 +89,7 @@ void DropboxListDirectoryRequest::responseCallback(void *jsonPtr) {
bool hasMore = response.getVal("has_more")->asBool();
if (hasMore) {
- Common::BaseCallback<> *innerCallback = new Common::Callback<DropboxListDirectoryRequest>(this, &DropboxListDirectoryRequest::responseCallback);
+ Networking::DataCallback innerCallback = new Common::Callback<DropboxListDirectoryRequest, Networking::RequestDataPair>(this, &DropboxListDirectoryRequest::responseCallback);
Networking::CurlJsonRequest *request = new Networking::CurlJsonRequest(innerCallback, "https://api.dropboxapi.com/2/files/list_folder/continue");
request->addHeader("Authorization: Bearer " + _token);
request->addHeader("Content-Type: application/json");
@@ -114,7 +115,7 @@ void DropboxListDirectoryRequest::responseCallback(void *jsonPtr) {
bool DropboxListDirectoryRequest::handle() {
if (_complete && _filesCallback) {
ConnMan.getRequestInfo(_id).state = Networking::FINISHED;
- if (_filesCallback) (*_filesCallback)(_files);
+ if (_filesCallback) (*_filesCallback)(Storage::RequestFileArrayPair(_id, _files));
}
return _complete;
diff --git a/backends/cloud/dropbox/dropboxlistdirectoryrequest.h b/backends/cloud/dropbox/dropboxlistdirectoryrequest.h
index 36070a2a32..58f3dc6113 100644
--- a/backends/cloud/dropbox/dropboxlistdirectoryrequest.h
+++ b/backends/cloud/dropbox/dropboxlistdirectoryrequest.h
@@ -40,7 +40,7 @@ class DropboxListDirectoryRequest: public Networking::Request {
Common::Array<StorageFile> _files;
int32 _requestId;
- void responseCallback(void *jsonPtr);
+ void responseCallback(Networking::RequestDataPair pair);
void startupWork();
public:
diff --git a/backends/cloud/dropbox/dropboxstorage.cpp b/backends/cloud/dropbox/dropboxstorage.cpp
index 9acbfc0428..02b033fced 100644
--- a/backends/cloud/dropbox/dropboxstorage.cpp
+++ b/backends/cloud/dropbox/dropboxstorage.cpp
@@ -38,8 +38,8 @@ namespace Dropbox {
Common::String DropboxStorage::KEY; //can't use ConfMan there yet, loading it on instance creation/auth
Common::String DropboxStorage::SECRET; //TODO: hide these secrets somehow
-static void saveAccessTokenCallback(void *ptr) {
- Common::JSONValue *json = (Common::JSONValue *)ptr;
+static void saveAccessTokenCallback(Networking::RequestDataPair pair) {
+ Common::JSONValue *json = (Common::JSONValue *)pair.value;
if (json) {
debug("saveAccessTokenCallback:");
debug("%s", json->stringify(true).c_str());
@@ -105,7 +105,7 @@ int32 DropboxStorage::download(Common::String remotePath, Common::String localPa
Common::DumpFile *f = new Common::DumpFile();
if (!f->open(localPath, true)) {
warning("DropboxStorage: unable to open file to download into");
- if (callback) (*callback)(false);
+ if (callback) (*callback)(RequestBoolPair(-1, false));
delete f;
return -1;
}
@@ -121,7 +121,7 @@ int32 DropboxStorage::syncSaves(BoolCallback callback) {
}
int32 DropboxStorage::info(StorageInfoCallback outerCallback) {
- Common::BaseCallback<> *innerCallback = new Common::CallbackBridge<DropboxStorage, StorageInfo>(this, &DropboxStorage::infoInnerCallback, outerCallback);
+ Networking::DataCallback innerCallback = new Common::CallbackBridge<DropboxStorage, RequestStorageInfoPair, Networking::RequestDataPair>(this, &DropboxStorage::infoInnerCallback, outerCallback);
Networking::CurlJsonRequest *request = new Networking::CurlJsonRequest(innerCallback, "https://api.dropboxapi.com/1/account/info");
request->addHeader("Authorization: Bearer " + _token);
return ConnMan.addRequest(request);
@@ -131,8 +131,8 @@ int32 DropboxStorage::info(StorageInfoCallback outerCallback) {
//and then calls the outerCallback (which wants to receive StorageInfo, not void *)
}
-void DropboxStorage::infoInnerCallback(StorageInfoCallback outerCallback, void *jsonPointer) {
- Common::JSONValue *json = (Common::JSONValue *)jsonPointer;
+void DropboxStorage::infoInnerCallback(StorageInfoCallback outerCallback, Networking::RequestDataPair pair) {
+ Common::JSONValue *json = (Common::JSONValue *)pair.value;
if (!json) {
warning("NULL passed instead of JSON");
delete outerCallback;
@@ -148,19 +148,19 @@ void DropboxStorage::infoInnerCallback(StorageInfoCallback outerCallback, void *
Common::JSONObject quota = info.getVal("quota_info")->asObject();
uint32 quotaNormal = quota.getVal("normal")->asNumber();
uint32 quotaShared = quota.getVal("shared")->asNumber();
- uint32 quotaAllocated = quota.getVal("quota")->asNumber();
- (*outerCallback)(StorageInfo(uid, name, email, quotaNormal+quotaShared, quotaAllocated));
+ uint32 quotaAllocated = quota.getVal("quota")->asNumber();
+ (*outerCallback)(RequestStorageInfoPair(-1, StorageInfo(uid, name, email, quotaNormal+quotaShared, quotaAllocated)));
delete outerCallback;
}
delete json;
}
-void DropboxStorage::infoMethodCallback(StorageInfo storageInfo) {
+void DropboxStorage::infoMethodCallback(RequestStorageInfoPair pair) {
debug("\nStorage info:");
- debug("User name: %s", storageInfo.name().c_str());
- debug("Email: %s", storageInfo.email().c_str());
- debug("Disk usage: %u/%u", storageInfo.used(), storageInfo.available());
+ debug("User name: %s", pair.value.name().c_str());
+ debug("Email: %s", pair.value.email().c_str());
+ debug("Disk usage: %u/%u", pair.value.used(), pair.value.available());
}
DropboxStorage *DropboxStorage::loadFromConfig(Common::String keyPrefix) {
@@ -214,7 +214,7 @@ void DropboxStorage::authThroughConsole() {
}
void DropboxStorage::getAccessToken(Common::String code) {
- Common::BaseCallback<> *callback = new Common::GlobalFunctionCallback(saveAccessTokenCallback);
+ Networking::DataCallback callback = new Common::GlobalFunctionCallback<Networking::RequestDataPair>(saveAccessTokenCallback);
Networking::CurlJsonRequest *request = new Networking::CurlJsonRequest(callback, "https://api.dropboxapi.com/1/oauth2/token");
request->addPostField("code=" + code);
request->addPostField("grant_type=authorization_code");
diff --git a/backends/cloud/dropbox/dropboxstorage.h b/backends/cloud/dropbox/dropboxstorage.h
index 6abd3d1d94..4fe6109c17 100644
--- a/backends/cloud/dropbox/dropboxstorage.h
+++ b/backends/cloud/dropbox/dropboxstorage.h
@@ -40,7 +40,7 @@ class DropboxStorage: public Cloud::Storage {
static void getAccessToken(Common::String code);
/** Constructs StorageInfo based on JSON response from cloud. */
- void infoInnerCallback(StorageInfoCallback outerCallback, void *json);
+ void infoInnerCallback(StorageInfoCallback outerCallback, Networking::RequestDataPair json);
void printFiles(Common::Array<StorageFile> files);
@@ -91,7 +91,7 @@ public:
virtual int32 info(StorageInfoCallback callback);
/** This method is passed into info(). (Temporary) */
- void infoMethodCallback(StorageInfo storageInfo);
+ void infoMethodCallback(RequestStorageInfoPair pair);
/** Returns whether saves sync process is running. */
virtual bool isSyncing() { return false; } //TODO