diff --git a/include/siadrive_api/uploadmanager.h b/include/siadrive_api/uploadmanager.h index 45d5f36..bdb57d8 100644 --- a/include/siadrive_api/uploadmanager.h +++ b/include/siadrive_api/uploadmanager.h @@ -21,8 +21,7 @@ public: NotFound, Queued, Uploading, - Complete, - Error + Complete }; enum class _UploadErrorCode diff --git a/src/siadrive_api/siafiletree.cpp b/src/siadrive_api/siafiletree.cpp index 6b043f4..551106b 100644 --- a/src/siadrive_api/siafiletree.cpp +++ b/src/siadrive_api/siafiletree.cpp @@ -81,10 +81,18 @@ std::vector CSiaApi::_CSiaFileTree::QueryDirectories(SString rootFolder SString path = ("\\" + FilePath(v->GetSiaPath()).RemoveFileName()).Replace("/", "\\"); if (path.BeginsWith(rootFolder)) { - path = path.SubString(1, rootFolder.Length()); + path = (rootFolder == "\\") ? path.SubString(1) : path.SubString(1, rootFolder.Length()); if (path.Length()) { - + auto splitPaths = path.Split('\\'); + if (splitPaths.size()) + { + path = splitPaths[0]; + if (std::find(ret.begin(), ret.end(), path) == ret.end()) + { + ret.push_back(path); + } + } } } }); diff --git a/src/siadrive_api/uploadmanager.cpp b/src/siadrive_api/uploadmanager.cpp index 7d9ade4..e9b64db 100644 --- a/src/siadrive_api/uploadmanager.cpp +++ b/src/siadrive_api/uploadmanager.cpp @@ -66,9 +66,6 @@ SString CUploadManager::UploadStatusToString(const UploadStatus& uploadStatus) case UploadStatus::Complete: return L"Complete"; - case UploadStatus::Error: - return L"Error"; - case UploadStatus::NotFound: return L"Not Found"; @@ -271,9 +268,8 @@ UploadError CUploadManager::AddOrUpdate(const SString& siaPath, SString filePath try { - SQLite::Statement query(_uploadDatabase, QUERY_UPLOADS_BY_SIA_PATH_AND_STATUS); + SQLite::Statement query(_uploadDatabase, QUERY_UPLOADS_BY_SIA_PATH); query.bind("@sia_path", SString::ToUtf8(siaPath).c_str()); - query.bind("@status", static_cast(UploadStatus::Uploading)); // Check uploading bool addToDatabase = true; @@ -282,6 +278,7 @@ UploadError CUploadManager::AddOrUpdate(const SString& siaPath, SString filePath UploadStatus uploadStatus = static_cast(static_cast(query.getColumn(query.getColumnIndex("status")))); if (uploadStatus == UploadStatus::Uploading) { + // TODO only remove if file changed addToDatabase = HandleFileRemove(CSiaCurl(GetHostConfig()), siaPath); } else if (uploadStatus == UploadStatus::Queued) @@ -311,7 +308,7 @@ UploadError CUploadManager::AddOrUpdate(const SString& siaPath, SString filePath } catch (SQLite::Exception e) { - CEventSystem::EventSystem.NotifyEvent(CreateSystemEvent(DatabaseExceptionOccurred("AddOrUpdate(insert)", e))); + CEventSystem::EventSystem.NotifyEvent(CreateSystemEvent(DatabaseInsertFailed(siaPath, filePath, e.getErrorStr()))); ret = { UploadErrorCode::DatabaseError, e.getErrorStr() }; } }