aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Tkachev2016-05-11 20:24:53 +0600
committerAlexander Tkachev2016-08-24 16:05:07 +0600
commitca2eeb221455e54505aaef7039cfc0b01b807179 (patch)
tree9e73268cc9a8a5a1ad805b4107d06e2e0b08cc29
parent7446ffd73bd184610d550a354a8e252b0b7f334d (diff)
downloadscummvm-rg350-ca2eeb221455e54505aaef7039cfc0b01b807179.tar.gz
scummvm-rg350-ca2eeb221455e54505aaef7039cfc0b01b807179.tar.bz2
scummvm-rg350-ca2eeb221455e54505aaef7039cfc0b01b807179.zip
CLOUD: Add Cloud::Manager and Cloud::Storage
This commit introduces Common::CloudManager, which can be accessed from OSystem. The backend for this manager is Cloud::Manager (defined in backends/cloud/manager.h). It should load all users storages from configs and provide access to current Storage instance. For now it just creates a new one. Cloud::Storage (backends/cloud/storage.h) provides an API to interact with cloud storage, for example, create new directory or sync files. Right now it's not ready and has only two dummy methods: listDirectory() and syncSaves(). There is Cloud::Dropbox::DropboxStorage backend (backends/cloud/dropbox/dropboxstorage.h) for Cloud::Storage. Right now it implements both listDirectory() and syncSaves() with starting timer task and handling it by printing out some JSON examples.
-rw-r--r--backends/cloud/dropbox/dropboxstorage.cpp (renamed from backends/cloud/cloudthread.cpp)26
-rw-r--r--backends/cloud/dropbox/dropboxstorage.h45
-rw-r--r--backends/cloud/manager.cpp41
-rw-r--r--backends/cloud/manager.h (renamed from backends/cloud/cloudthread.h)23
-rw-r--r--backends/cloud/storage.cpp49
-rw-r--r--backends/cloud/storage.h61
-rw-r--r--backends/module.mk6
-rw-r--r--backends/platform/sdl/sdl.cpp4
-rw-r--r--base/main.cpp4
-rw-r--r--common/cloudmanager.h53
-rw-r--r--common/module.mk4
-rw-r--r--common/system.h14
12 files changed, 288 insertions, 42 deletions
diff --git a/backends/cloud/cloudthread.cpp b/backends/cloud/dropbox/dropboxstorage.cpp
index 813354f43f..b841575bf6 100644
--- a/backends/cloud/cloudthread.cpp
+++ b/backends/cloud/dropbox/dropboxstorage.cpp
@@ -20,22 +20,17 @@
*
*/
-#include "cloudthread.h"
+#include "backends/cloud/dropbox/dropboxstorage.h"
#include "common/debug.h"
#include "common/json.h"
-#include "common/system.h"
-#include "common/timer.h"
void example1();
void example2();
void example3();
-void cloudThread(void *thread) {
- CloudThread *cloudThread = (CloudThread *)thread;
- cloudThread->handler();
-};
+namespace Cloud { namespace Dropbox {
-void CloudThread::handler() {
+void DropboxStorage::handler() {
if (_firstTime) {
_firstTime = false;
@@ -45,21 +40,16 @@ void CloudThread::handler() {
} else { }
}
-void CloudThread::setTimeout(int interval) {
- Common::TimerManager *manager = g_system->getTimerManager();
- if (!manager->installTimerProc(cloudThread, interval, this, "Cloud Thread"))
- warning("Failed to create cloud thread");
-}
-
-void CloudThread::unsetTimeout() {
- Common::TimerManager *manager = g_system->getTimerManager();
- manager->removeTimerProc(cloudThread);
+void DropboxStorage::listDirectory(Common::String path) {
+ setTimeout(1000000); //in one second
}
-void CloudThread::start() {
+void DropboxStorage::syncSaves() {
setTimeout(1000000); //in one second
}
+} } //end of namespace Cloud::Dropbox
+
/// SimpleJSON examples:
using Common::JSON;
diff --git a/backends/cloud/dropbox/dropboxstorage.h b/backends/cloud/dropbox/dropboxstorage.h
new file mode 100644
index 0000000000..43ed9dcbee
--- /dev/null
+++ b/backends/cloud/dropbox/dropboxstorage.h
@@ -0,0 +1,45 @@
+/* ScummVM - Graphic Adventure Engine
+*
+* ScummVM is the legal property of its developers, whose names
+* are too numerous to list here. Please refer to the COPYRIGHT
+* file distributed with this source distribution.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*
+*/
+
+#ifndef BACKENDS_CLOUD_DROPBOX_STORAGE_H
+#define BACKENDS_CLOUD_DROPBOX_STORAGE_H
+
+#include "backends/cloud/storage.h"
+
+namespace Cloud { namespace Dropbox {
+
+class DropboxStorage: public Cloud::Storage {
+ bool _firstTime;
+
+protected:
+ virtual void handler();
+
+public:
+ DropboxStorage() : _firstTime(true) {};
+
+ virtual void listDirectory(Common::String path);
+ virtual void syncSaves();
+};
+
+} } //end of namespace Cloud::Dropbox
+
+#endif
diff --git a/backends/cloud/manager.cpp b/backends/cloud/manager.cpp
new file mode 100644
index 0000000000..05b23771b0
--- /dev/null
+++ b/backends/cloud/manager.cpp
@@ -0,0 +1,41 @@
+/* ScummVM - Graphic Adventure Engine
+*
+* ScummVM is the legal property of its developers, whose names
+* are too numerous to list here. Please refer to the COPYRIGHT
+* file distributed with this source distribution.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*
+*/
+
+#include "backends/cloud/manager.h"
+#include "backends/cloud/dropbox/dropboxstorage.h"
+
+namespace Cloud {
+
+Manager::Manager(): _currentStorage(new Dropbox::DropboxStorage()) {};
+
+Manager::~Manager() { delete _currentStorage; }
+
+Storage* Manager::getCurrentStorage() {
+ return _currentStorage;
+}
+
+void Manager::syncSaves() {
+ Storage* storage = getCurrentStorage();
+ if (storage) storage->syncSaves();
+}
+
+} //end of namespace Cloud \ No newline at end of file
diff --git a/backends/cloud/cloudthread.h b/backends/cloud/manager.h
index 334a163dde..11cc595da4 100644
--- a/backends/cloud/cloudthread.h
+++ b/backends/cloud/manager.h
@@ -20,22 +20,25 @@
*
*/
-#ifndef BACKENDS_CLOUD_CLOUDTHREAD_H
-#define BACKENDS_CLOUD_CLOUDTHREAD_H
+#ifndef BACKENDS_CLOUD_MANAGER_H
+#define BACKENDS_CLOUD_MANAGER_H
-class CloudThread {
- friend void cloudThread(void*); //calls private handler()
+#include "common/cloudmanager.h"
+#include "common/str.h"
- bool _firstTime;
+namespace Cloud {
- void handler();
- void setTimeout(int interval);
- void unsetTimeout();
+class Manager: public Common::CloudManager {
+ Storage* _currentStorage;
public:
- CloudThread(): _firstTime(true) {};
+ Manager();
+ virtual ~Manager();
- void start();
+ virtual Storage* getCurrentStorage();
+ virtual void syncSaves();
};
+} //end of namespace Cloud
+
#endif
diff --git a/backends/cloud/storage.cpp b/backends/cloud/storage.cpp
new file mode 100644
index 0000000000..3272ecf760
--- /dev/null
+++ b/backends/cloud/storage.cpp
@@ -0,0 +1,49 @@
+/* ScummVM - Graphic Adventure Engine
+*
+* ScummVM is the legal property of its developers, whose names
+* are too numerous to list here. Please refer to the COPYRIGHT
+* file distributed with this source distribution.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*
+*/
+
+#include "backends/cloud/storage.h"
+#include "common/system.h"
+#include "common/timer.h"
+
+namespace Cloud {
+
+void cloudThread(void *thread) {
+ Storage *cloudThread = (Storage *)thread;
+ cloudThread->handler();
+}
+
+void Storage::handler() {
+ unsetTimeout();
+}
+
+void Storage::setTimeout(int interval) {
+ Common::TimerManager *manager = g_system->getTimerManager();
+ if (!manager->installTimerProc(cloudThread, interval, this, "Cloud Thread"))
+ ; // warning("Failed to create cloud thread");
+}
+
+void Storage::unsetTimeout() {
+ Common::TimerManager *manager = g_system->getTimerManager();
+ manager->removeTimerProc(cloudThread);
+}
+
+} //end of namespace Cloud
diff --git a/backends/cloud/storage.h b/backends/cloud/storage.h
new file mode 100644
index 0000000000..4afa36f8d8
--- /dev/null
+++ b/backends/cloud/storage.h
@@ -0,0 +1,61 @@
+/* ScummVM - Graphic Adventure Engine
+*
+* ScummVM is the legal property of its developers, whose names
+* are too numerous to list here. Please refer to the COPYRIGHT
+* file distributed with this source distribution.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*
+*/
+
+#ifndef BACKENDS_CLOUD_STORAGE_H
+#define BACKENDS_CLOUD_STORAGE_H
+
+#include "common/str.h"
+
+namespace Cloud {
+
+class Storage {
+ friend void cloudThread(void*); //calls handler()
+
+protected:
+ virtual void handler();
+ virtual void setTimeout(int interval);
+ virtual void unsetTimeout();
+
+public:
+ Storage() {};
+ virtual ~Storage() {};
+
+ /**
+ * Lists given directory.
+ *
+ * @param path directory to list
+ */
+
+ //TODO: actually make it list directories and some callback to pass gathered files list
+
+ virtual void listDirectory(Common::String path) = 0;
+
+ /**
+ * Starts saves syncing process.
+ */
+
+ virtual void syncSaves() = 0;
+};
+
+} //end of namespace Cloud
+
+#endif
diff --git a/backends/module.mk b/backends/module.mk
index fc2fb99a9d..a1e9c11a1d 100644
--- a/backends/module.mk
+++ b/backends/module.mk
@@ -251,8 +251,10 @@ endif
# I don't have any define, so I'd just add my files without any
# ifndef USE_CLOUD ?
-MODULE_OBJS += \
- cloud/cloudthread.o
+MODULE_OBJS += \
+ cloud/manager.o \
+ cloud/storage.o \
+ cloud/dropbox/storage.o
# endif
# Include common rules
diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp
index 84aa5c8421..e743bdf829 100644
--- a/backends/platform/sdl/sdl.cpp
+++ b/backends/platform/sdl/sdl.cpp
@@ -33,7 +33,7 @@
#include "gui/EventRecorder.h"
#include "common/taskbar.h"
#include "common/textconsole.h"
-#include "backends/cloud/cloudthread.h"
+#include "backends/cloud/manager.h"
#include "backends/saves/default/default-saves.h"
@@ -162,7 +162,7 @@ void OSystem_SDL::init() {
//TODO: define USE_CLOUD
//#if defined(USE_CLOUD)
if (_cloudThread == 0)
- _cloudThread = new CloudThread();
+ _cloudThread = new Cloud::Manager();
//#endif
}
diff --git a/base/main.cpp b/base/main.cpp
index ce69117bc6..001d864355 100644
--- a/base/main.cpp
+++ b/base/main.cpp
@@ -66,7 +66,7 @@
#endif
#include "backends/keymapper/keymapper.h"
-#include "backends/cloud/cloudthread.h"
+#include "common/cloudmanager.h"
#if defined(_WIN32_WCE)
#include "backends/platform/wince/CELauncherDialog.h"
@@ -479,7 +479,7 @@ extern "C" int scummvm_main(int argc, const char * const argv[]) {
//TODO: define USE_CLOUD
//#ifdef USE_CLOUD
- system.getCloudThread()->start();
+ system.getCloudManager()->syncSaves();
//#endif
// Unless a game was specified, show the launcher dialog
diff --git a/common/cloudmanager.h b/common/cloudmanager.h
new file mode 100644
index 0000000000..6b5768280a
--- /dev/null
+++ b/common/cloudmanager.h
@@ -0,0 +1,53 @@
+/* ScummVM - Graphic Adventure Engine
+*
+* ScummVM is the legal property of its developers, whose names
+* are too numerous to list here. Please refer to the COPYRIGHT
+* file distributed with this source distribution.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*
+*/
+
+#ifndef COMMON_CLOUDMANAGER_H
+#define COMMON_CLOUDMANAGER_H
+
+#include "backends/cloud/storage.h"
+
+namespace Common {
+
+class CloudManager {
+public:
+ CloudManager() {};
+ virtual ~CloudManager() {};
+
+ /**
+ * Returns active Storage, which could be used to interact
+ * with cloud storage.
+ *
+ * @return active Cloud::Storage or null, if there is no active Storage.
+ */
+
+ virtual Cloud::Storage* getCurrentStorage() = 0;
+
+ /**
+ * Starts saves syncing process in currently active storage if there is any.
+ */
+
+ virtual void syncSaves() = 0;
+};
+
+} //end of namespace Common
+
+#endif
diff --git a/common/module.mk b/common/module.mk
index 54aa16f557..29def4b8aa 100644
--- a/common/module.mk
+++ b/common/module.mk
@@ -62,5 +62,9 @@ MODULE_OBJS += \
updates.o
endif
+#TODO define USE_CLOUD
+#ifdef USE_CLOUD
+#endif
+
# Include common rules
include $(srcdir)/rules.mk
diff --git a/common/system.h b/common/system.h
index 1af45fb1fc..b1c74cbc5b 100644
--- a/common/system.h
+++ b/common/system.h
@@ -56,13 +56,11 @@ class HardwareInputSet;
class Keymap;
class KeymapperDefaultBindings;
#endif
-}
-
//TODO: define USE_CLOUD
-//TODO: probably move to common and name CloudManager
//#if defined(USE_CLOUD)
-class CloudThread;
+class CloudManager;
//#endif
+}
class AudioCDManager;
class FilesystemFactory;
@@ -191,7 +189,7 @@ protected:
*
* @note _cloudThread is deleted by the OSystem destructor.
*/
- CloudThread *_cloudThread;
+ Common::CloudManager *_cloudThread;
//#endif
/**
@@ -1135,12 +1133,12 @@ public:
//TODO: define USE_CLOUD
//#if defined(USE_CLOUD)
/**
- * Returns the CloudThread, used to sync save games and
+ * Returns the CloudManager, used to sync save games and
* upload/download files from user's cloud storage.
*
- * @return the CloudThread for the current architecture
+ * @return the CloudManager for the current architecture
*/
- virtual CloudThread *getCloudThread() {
+ virtual Common::CloudManager *getCloudManager() {
return _cloudThread;
}
//#endif