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/SiaDrive.Api/UploadManager.h
2017-02-23 00:55:18 -06:00

68 lines
1.4 KiB
C++

#pragma once
#include "AutoThread.h"
#include "SQLiteCpp/Database.h"
#include <deque>
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<std::function<void()>> _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)