#pragma once #include "AutoThread.h" #include "SQLiteCpp/Database.h" #include NS_BEGIN(Sia) NS_BEGIN(Api) class AFX_EXT_CLASS CUploadManager : public CAutoThread { public: enum class _UploadStatus : unsigned { NotFound, Copying, Queued, Modified, Uploading, Complete, Error }; enum class _UploadError { Success }; private: typedef struct { std::uint64_t Id; String SiaPath; String FilePath; String TempPath; _UploadStatus Status; } UploadData; public: CUploadManager(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig); public: virtual ~CUploadManager(); private: SQLite::Database _uploadDatabase; std::mutex _uploadMutex; CSiaDriveConfig* _siaDriveConfig; CAutoThread _fileThread; std::mutex _fileQueueMutex; std::deque> _fileQueue; protected: virtual void AutoThreadCallback(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig) override; void FileThreadCallback(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig); public: _UploadStatus GetUploadStatus(const String& siaPath); _UploadError AddOrUpdate(const String& siaPath, String filePath); _UploadError Remove(const String& siaPath); void PurgeCompleteStatus(); void PurgeErrorStatus(); }; typedef Sia::Api::CUploadManager::_UploadStatus UploadStatus; typedef Sia::Api::CUploadManager::_UploadError UploadError; NS_END(2)