1
0

Upload manager changes

This commit is contained in:
Scott E. Graves
2017-02-25 20:48:27 -06:00
parent 169143dd74
commit ced91ecaa9
8 changed files with 79 additions and 36 deletions

View File

@@ -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()