1
0
This repository has been archived on 2025-07-27. You can view files and clone it, but cannot push or open issues or pull requests.
Files
siadrive/include/siadrive_api/uploadmanager.h
2017-04-15 22:00:33 -05:00

84 lines
2.1 KiB
C++

#ifndef _UPLOADMANAGER_H
#define _UPLOADMANAGER_H
#include <siaapi.h>
#include <SQLiteCpp/Database.h>
#include <SQLiteCpp/Exception.h>
#include <autothread.h>
#include <deque>
#include <siacurl.h>
#include <eventsystem.h>
#include <filepath.h>
NS_BEGIN(Sia)
NS_BEGIN(Api)
class SIADRIVE_EXPORTABLE CUploadManager :
public CAutoThread
{
public:
enum class _UploadStatus : unsigned
{
NotFound,
Queued,
Uploading,
Complete
};
enum class _UploadErrorCode
{
Success,
SourceFileNotFound,
DatabaseError
};
private:
typedef struct
{
std::uint64_t Id;
SString SiaPath;
SString FilePath;
SString TempPath;
_UploadStatus Status;
} UploadData;
public:
CUploadManager(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig);
public:
virtual ~CUploadManager();
private:
CSiaDriveConfig* _siaDriveConfig;
SQLite::Database _uploadDatabase;
std::mutex _uploadMutex;
std::shared_ptr<std::vector<CSiaFilePtr>> _uploadFileList;
private:
void DeleteFilesNotFound(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig);
void DeleteFilesRemovedFromSia(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig, const bool& isStartup = false);
CSiaDriveConfig* GetSiaDriveConfig() const { return _siaDriveConfig; }
void HandleFileRemove(const CSiaCurl& siaCurl, const SString& siaPath);
protected:
virtual void AutoThreadCallback(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig) override;
public:
static SString UploadStatusToString(const _UploadStatus& uploadStatus);
public:
CSiaError<_UploadErrorCode> AddOrUpdate(const SString& siaPath, SString filePath, const std::uint64_t& lastModified);
_UploadStatus GetUploadStatus(const SString& siaPath);
CSiaError<_UploadErrorCode> Remove(const SString& siaPath);
std::shared_ptr<std::vector<CSiaFilePtr>> GetUploadFileList() const;
};
typedef CUploadManager::_UploadStatus UploadStatus;
typedef CUploadManager::_UploadErrorCode UploadErrorCode;
typedef CSiaError<CUploadManager::_UploadErrorCode> UploadError;
typedef std::vector<CSiaFilePtr> UploadFileList;
typedef std::shared_ptr<UploadFileList> UploadFileListPtr;
NS_END(2)
#endif //_UPLOADMANAGER_H