1 /* ScummVM - Graphic Adventure Engine 2 * 3 * ScummVM is the legal property of its developers, whose names 4 * are too numerous to list here. Please refer to the COPYRIGHT 5 * file distributed with this source distribution. 6 * 7 * This program is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU General Public License 9 * as published by the Free Software Foundation; either version 2 10 * of the License, or (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 20 * 21 */ 22 23 #ifndef BACKENDS_CLOUD_GOOGLEDRIVE_GOOGLEDRIVEUPLOADREQUEST_H 24 #define BACKENDS_CLOUD_GOOGLEDRIVE_GOOGLEDRIVEUPLOADREQUEST_H 25 26 #include "backends/cloud/storage.h" 27 #include "backends/networking/curl/curljsonrequest.h" 28 #include "backends/networking/curl/request.h" 29 #include "common/callback.h" 30 31 namespace Cloud { 32 namespace GoogleDrive { 33 class GoogleDriveStorage; 34 35 class GoogleDriveUploadRequest: public Networking::Request { 36 GoogleDriveStorage *_storage; 37 Common::String _savePath; 38 Common::SeekableReadStream *_contentsStream; 39 Storage::UploadCallback _uploadCallback; 40 Request *_workingRequest; 41 bool _ignoreCallback; 42 Common::String _resolvedId, _parentId; 43 Common::String _uploadUrl; 44 uint64 _serverReceivedBytes; 45 46 void start(); 47 void resolveId(); 48 void idResolvedCallback(Storage::UploadResponse response); 49 void idResolveFailedCallback(Networking::ErrorResponse error); 50 void startUpload(); 51 void startUploadCallback(Networking::JsonResponse response); 52 void startUploadErrorCallback(Networking::ErrorResponse error); 53 void uploadNextPart(); 54 void partUploadedCallback(Networking::JsonResponse response); 55 void partUploadedErrorCallback(Networking::ErrorResponse error); 56 bool handleHttp308(const Networking::NetworkReadStream *stream); 57 void finishUpload(StorageFile status); 58 59 public: 60 GoogleDriveUploadRequest(GoogleDriveStorage *storage, Common::String path, Common::SeekableReadStream *contents, Storage::UploadCallback callback, Networking::ErrorCallback ecb); 61 virtual ~GoogleDriveUploadRequest(); 62 63 virtual void handle(); 64 virtual void restart(); 65 }; 66 67 } // End of namespace GoogleDrive 68 } // End of namespace Cloud 69 70 #endif 71