Upload manager changes
This commit is contained in:
@@ -22,6 +22,8 @@ private:
|
||||
private:
|
||||
static std::mutex _dokanMutex;
|
||||
static CSiaApi* _siaApi;
|
||||
static CSiaDriveConfig* _siaDriveConfig;
|
||||
static std::unique_ptr<CUploadManager> _uploadManager;
|
||||
static DOKAN_OPERATIONS _dokanOps;
|
||||
static DOKAN_OPTIONS _dokanOptions;
|
||||
static String _cacheLocation;
|
||||
@@ -64,13 +66,15 @@ private:
|
||||
if (size > 0)
|
||||
{
|
||||
// TODO Always save for now - need to change to detect modifications
|
||||
_siaApi->GetRenter()->QueueUploadFile(_openFileMap[id].SiaPath, _openFileMap[id].CacheFilePath);
|
||||
// TODO Handle error return
|
||||
_uploadManager->AddOrUpdate(_openFileMap[id].SiaPath, _openFileMap[id].CacheFilePath);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Treat 0 length files as deleted in Sia - cache retains 0-length
|
||||
// TODO Retain 0 length in cache?
|
||||
_siaApi->GetRenter()->DeleteFile(_openFileMap[id].SiaPath);
|
||||
// TODO Handle error return
|
||||
_uploadManager->Remove(_openFileMap[id].SiaPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -232,8 +236,7 @@ private:
|
||||
// If file isn't cached, delete from Sia only
|
||||
if (!PathFileExists(cacheFilePath.c_str()) || ::DeleteFile(cacheFilePath.c_str()))
|
||||
{
|
||||
// TODO May not be necessary to delete, just queue another upload
|
||||
if (!ApiSuccess(_siaApi->GetRenter()->DeleteFile(siaPath)))
|
||||
if (!ApiSuccess(_uploadManager->Remove(siaPath)))
|
||||
{
|
||||
ret = STATUS_INVALID_SERVER_STATE;
|
||||
}
|
||||
@@ -389,9 +392,11 @@ private:
|
||||
}
|
||||
|
||||
public:
|
||||
static void Initialize(CSiaApi* siaApi)
|
||||
static void Initialize(CSiaApi* siaApi, CSiaDriveConfig* siaDriveConfig)
|
||||
{
|
||||
_siaApi = siaApi;
|
||||
_siaDriveConfig = siaDriveConfig;
|
||||
_uploadManager.reset(new CUploadManager(CSiaCurl(siaApi->GetHostConfig()), siaDriveConfig));
|
||||
_dokanOps.Cleanup = nullptr;
|
||||
_dokanOps.CloseFile = Sia_CloseFile;
|
||||
_dokanOps.DeleteDirectory = nullptr;
|
||||
@@ -453,8 +458,9 @@ public:
|
||||
static void Shutdown()
|
||||
{
|
||||
Unmount();
|
||||
|
||||
_uploadManager.reset(nullptr);
|
||||
_siaApi = nullptr;
|
||||
_siaDriveConfig = nullptr;
|
||||
ZeroMemory(&_dokanOps, sizeof(_dokanOps));
|
||||
ZeroMemory(&_dokanOptions, sizeof(_dokanOptions));
|
||||
}
|
||||
@@ -472,6 +478,8 @@ public:
|
||||
// Static member variables
|
||||
std::mutex DokanImpl::_dokanMutex;
|
||||
CSiaApi* DokanImpl::_siaApi = nullptr;
|
||||
CSiaDriveConfig* DokanImpl::_siaDriveConfig = nullptr;
|
||||
std::unique_ptr<CUploadManager> DokanImpl::_uploadManager;
|
||||
DOKAN_OPERATIONS DokanImpl::_dokanOps;
|
||||
DOKAN_OPTIONS DokanImpl::_dokanOptions;
|
||||
String DokanImpl::_cacheLocation;
|
||||
@@ -485,15 +493,16 @@ NTSTATUS DokanImpl::_mountStatus = STATUS_SUCCESS;
|
||||
String DokanImpl::_mountPoint;
|
||||
|
||||
|
||||
CSiaDokanDrive::CSiaDokanDrive(CSiaApi& siaApi) :
|
||||
CSiaDokanDrive::CSiaDokanDrive(CSiaApi& siaApi, CSiaDriveConfig* siaDriveConfig) :
|
||||
_siaApi(siaApi),
|
||||
_siaDriveConfig(siaDriveConfig),
|
||||
_Mounted(false)
|
||||
{
|
||||
std::lock_guard<std::mutex> l(DokanImpl::GetMutex());
|
||||
if (DokanImpl::IsInitialized())
|
||||
throw SiaDokanDriveException("Sia drive has already been activated");
|
||||
|
||||
DokanImpl::Initialize(&_siaApi);
|
||||
DokanImpl::Initialize(&_siaApi, _siaDriveConfig);
|
||||
}
|
||||
|
||||
CSiaDokanDrive::~CSiaDokanDrive()
|
||||
|
Reference in New Issue
Block a user