CLOUD: Add Storage saving mechanism

In this commit CloudManager starts supporting multiple Storage. Now, in
its init() it loads all the Storages and determines the current one.

It now also has save() method. In that method all Storages are saved
with their new saveConfig() method.

CloudManager::save() not called from anywhere, though. The only one
Storage that could be added is DropboxStorage in case you have no
cloud-related config keys or you have no storages connected.
This commit is contained in:
Alexander Tkachev 2016-05-23 11:23:33 +06:00
parent c4b1fdc727
commit 41e65db7d0
6 changed files with 112 additions and 24 deletions

View file

@ -45,9 +45,12 @@ static void saveAccessTokenCallback(void *ptr) {
if (!result.contains("access_token") || !result.contains("uid")) {
warning("Bad response, no token/uid passed");
} else {
ConfMan.set("current_storage_type", "Dropbox", "cloud");
ConfMan.set("current_storage_access_token", result.getVal("access_token")->asString(), "cloud");
ConfMan.set("current_storage_user_id", result.getVal("uid")->asString(), "cloud");
//we suppose that's the first storage
ConfMan.set("storages_number", "1", "cloud");
ConfMan.set("current_storage", "1", "cloud");
ConfMan.set("storage1_type", "Dropbox", "cloud");
ConfMan.set("storage1_access_token", result.getVal("access_token")->asString(), "cloud");
ConfMan.set("storage1_user_id", result.getVal("uid")->asString(), "cloud");
ConfMan.removeKey("dropbox_code", "cloud");
debug("Now please restart ScummVM to apply the changes.");
}
@ -66,6 +69,12 @@ DropboxStorage::~DropboxStorage() {
curl_global_cleanup();
}
void DropboxStorage::saveConfig(Common::String keyPrefix) {
ConfMan.set(keyPrefix + "type", "Dropbox", "cloud");
ConfMan.set(keyPrefix + "access_token", _token, "cloud");
ConfMan.set(keyPrefix + "user_id", _uid, "cloud");
}
void DropboxStorage::syncSaves(BoolCallback callback) {
//this is not the real syncSaves() implementation
info(new Common::Callback<DropboxStorage, StorageInfo>(this, &DropboxStorage::infoMethodCallback));
@ -106,22 +115,22 @@ void DropboxStorage::infoMethodCallback(StorageInfo storageInfo) {
debug("info: %s", storageInfo.info().c_str());
}
DropboxStorage *DropboxStorage::loadFromConfig() {
DropboxStorage *DropboxStorage::loadFromConfig(Common::String keyPrefix) {
KEY = ConfMan.get("DROPBOX_KEY", "cloud");
SECRET = ConfMan.get("DROPBOX_SECRET", "cloud");
if (!ConfMan.hasKey("current_storage_access_token", "cloud")) {
if (!ConfMan.hasKey(keyPrefix + "access_token", "cloud")) {
warning("No access_token found");
return 0;
}
if (!ConfMan.hasKey("current_storage_user_id", "cloud")) {
if (!ConfMan.hasKey(keyPrefix + "user_id", "cloud")) {
warning("No user_id found");
return 0;
}
Common::String accessToken = ConfMan.get("current_storage_access_token", "cloud");
Common::String userId = ConfMan.get("current_storage_user_id", "cloud");
Common::String accessToken = ConfMan.get(keyPrefix + "access_token", "cloud");
Common::String userId = ConfMan.get(keyPrefix + "user_id", "cloud");
return new DropboxStorage(accessToken, userId);
}