00001 /* ScummVM - Graphic Adventure Engine 00002 * 00003 * ScummVM is the legal property of its developers, whose names 00004 * are too numerous to list here. Please refer to the COPYRIGHT 00005 * file distributed with this source distribution. 00006 * 00007 * This program is free software; you can redistribute it and/or 00008 * modify it under the terms of the GNU General Public License 00009 * as published by the Free Software Foundation; either version 2 00010 * of the License, or (at your option) any later version. 00011 * 00012 * This program is distributed in the hope that it will be useful, 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00015 * GNU General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU General Public License 00018 * along with this program; if not, write to the Free Software 00019 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00020 * 00021 */ 00022 00023 #ifndef BACKENDS_CLOUD_SAVESSYNCREQUEST_H 00024 #define BACKENDS_CLOUD_SAVESSYNCREQUEST_H 00025 00026 #include "backends/networking/curl/request.h" 00027 #include "backends/cloud/storage.h" 00028 #include "common/hashmap.h" 00029 #include "common/hash-str.h" 00030 #include "gui/object.h" 00031 00032 namespace Cloud { 00033 00034 class SavesSyncRequest: public Networking::Request, public GUI::CommandSender { 00035 Storage *_storage; 00036 Storage::BoolCallback _boolCallback; 00037 Common::HashMap<Common::String, uint32> _localFilesTimestamps; 00038 Common::Array<StorageFile> _filesToDownload; 00039 Common::Array<Common::String> _filesToUpload; 00040 StorageFile _currentDownloadingFile; 00041 Common::String _currentUploadingFile; 00042 Request *_workingRequest; 00043 bool _ignoreCallback; 00044 uint32 _totalFilesToHandle; 00045 Common::String _date; 00046 00047 void start(); 00048 void directoryListedCallback(Storage::ListDirectoryResponse response); 00049 void directoryListedErrorCallback(Networking::ErrorResponse error); 00050 void directoryCreatedCallback(Storage::BoolResponse response); 00051 void directoryCreatedErrorCallback(Networking::ErrorResponse error); 00052 void fileDownloadedCallback(Storage::BoolResponse response); 00053 void fileDownloadedErrorCallback(Networking::ErrorResponse error); 00054 void fileUploadedCallback(Storage::UploadResponse response); 00055 void fileUploadedErrorCallback(Networking::ErrorResponse error); 00056 void downloadNextFile(); 00057 void uploadNextFile(); 00058 virtual void finishError(Networking::ErrorResponse error); 00059 void finishSync(bool success); 00060 00061 public: 00062 SavesSyncRequest(Storage *storage, Storage::BoolCallback callback, Networking::ErrorCallback ecb); 00063 virtual ~SavesSyncRequest(); 00064 00065 virtual void handle(); 00066 virtual void restart(); 00067 00069 double getDownloadingProgress() const; 00070 00072 double getProgress() const; 00073 00075 Common::Array<Common::String> getFilesToDownload(); 00076 }; 00077 00078 } // End of namespace Cloud 00079 00080 #endif