diff options
author | Alexander Tkachev | 2016-05-26 21:40:01 +0600 |
---|---|---|
committer | Alexander Tkachev | 2016-08-24 16:07:55 +0600 |
commit | 8f6bcdf55da97db98384c2a8cb9dcdf34232ac35 (patch) | |
tree | a1ec4f773c2891cf432f05af2461ca161959a017 /backends/cloud/onedrive/onedrivestorage.cpp | |
parent | b246c17850687e7b15b644b761fbfe835ffc1c32 (diff) | |
download | scummvm-rg350-8f6bcdf55da97db98384c2a8cb9dcdf34232ac35.tar.gz scummvm-rg350-8f6bcdf55da97db98384c2a8cb9dcdf34232ac35.tar.bz2 scummvm-rg350-8f6bcdf55da97db98384c2a8cb9dcdf34232ac35.zip |
CLOUD: Add OneDriveTokenRefresher
OneDriveTokenRefresher is a CurlJsonRequest replacement for
OneDriveStorage methods. It behaves very similarly, but checks received
JSON before passing it to user. If it contains "error" key, it attempts
to refresh the token through OneDriveStorage, and then restarts the
original request, so user won't notice that there ever was an error.
Diffstat (limited to 'backends/cloud/onedrive/onedrivestorage.cpp')
-rw-r--r-- | backends/cloud/onedrive/onedrivestorage.cpp | 16 |
1 files changed, 2 insertions, 14 deletions
diff --git a/backends/cloud/onedrive/onedrivestorage.cpp b/backends/cloud/onedrive/onedrivestorage.cpp index 833ba8e558..6f91cadd37 100644 --- a/backends/cloud/onedrive/onedrivestorage.cpp +++ b/backends/cloud/onedrive/onedrivestorage.cpp @@ -31,6 +31,7 @@ #include <common/file.h> #include "common/system.h" #include "common/cloudmanager.h" +#include "onedrivetokenrefresher.h" namespace Cloud { namespace OneDrive { @@ -113,10 +114,6 @@ void OneDriveStorage::saveConfig(Common::String keyPrefix) { ConfMan.set(keyPrefix + "refresh_token", _refreshToken, "cloud"); } -void OneDriveStorage::printJsonTokenReceived(RequestBoolPair pair) { - if (pair.value) syncSaves(0); //try again -} - void OneDriveStorage::printJson(Networking::RequestJsonPair pair) { Common::JSONValue *json = pair.value; if (!json) { @@ -124,15 +121,6 @@ void OneDriveStorage::printJson(Networking::RequestJsonPair pair) { return; } - Common::JSONObject result = json->asObject(); - if (result.contains("error")) { - //Common::JSONObject error = result.getVal("error")->asObject(); - debug("bad token, trying again..."); - getAccessToken(new Common::Callback<OneDriveStorage, RequestBoolPair>(this, &OneDriveStorage::printJsonTokenReceived)); - delete json; - return; - } - debug("%s", json->stringify().c_str()); delete json; } @@ -140,7 +128,7 @@ void OneDriveStorage::printJson(Networking::RequestJsonPair pair) { int32 OneDriveStorage::syncSaves(BoolCallback callback) { //this is not the real syncSaves() implementation Networking::JsonCallback innerCallback = new Common::Callback<OneDriveStorage, Networking::RequestJsonPair>(this, &OneDriveStorage::printJson); - Networking::CurlJsonRequest *request = new Networking::CurlJsonRequest(innerCallback, "https://api.onedrive.com/v1.0/drives/"); + Networking::CurlJsonRequest *request = new OneDriveTokenRefresher(this, innerCallback, "https://api.onedrive.com/v1.0/drives/"); request->addHeader("Authorization: bearer " + _token); return ConnMan.addRequest(request); } |