1
0

Change api error structure

This commit is contained in:
Scott E. Graves
2017-03-30 12:44:48 -05:00
parent 69415bcf45
commit 5bc42b1fd4
8 changed files with 127 additions and 95 deletions

View File

@@ -43,10 +43,11 @@ protected:
class SIADRIVE_EXPORTABLE CSiaApi class SIADRIVE_EXPORTABLE CSiaApi
{ {
public: public:
enum class _SiaApiError enum class _SiaApiErrorCode
{ {
Success, Success,
NotImplemented, NotImplemented,
NotConnected,
RequestError, RequestError,
WalletExists, WalletExists,
WalletLocked, WalletLocked,
@@ -133,10 +134,10 @@ public:
virtual void Refresh(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig); virtual void Refresh(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig);
public: public:
_SiaApiError Create(const _SiaSeedLanguage& seedLanguage, SString& seed); CSiaError<_SiaApiErrorCode> Create(const _SiaSeedLanguage& seedLanguage, SString& seed);
_SiaApiError Restore(const SString& seed); CSiaError<_SiaApiErrorCode> Restore(const SString& seed);
_SiaApiError Lock(); CSiaError<_SiaApiErrorCode> Lock();
_SiaApiError Unlock(const SString& password); CSiaError<_SiaApiErrorCode> Unlock(const SString& password);
}; };
class SIADRIVE_EXPORTABLE _CSiaRenter : class SIADRIVE_EXPORTABLE _CSiaRenter :
@@ -176,12 +177,12 @@ public:
void Refresh(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig); void Refresh(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig);
public: public:
_SiaApiError FileExists(const SString& siaPath, bool& exists) const; CSiaError<_SiaApiErrorCode> FileExists(const SString& siaPath, bool& exists) const;
_SiaApiError DownloadFile(const SString& siaPath, const SString& location) const; CSiaError<_SiaApiErrorCode> DownloadFile(const SString& siaPath, const SString& location) const;
_SiaApiError GetFileTree(std::shared_ptr<_CSiaFileTree>& siaFileTree) const; CSiaError<_SiaApiErrorCode> GetFileTree(std::shared_ptr<_CSiaFileTree>& siaFileTree) const;
_SiaRenterAllowance GetAllowance() const; _SiaRenterAllowance GetAllowance() const;
_SiaApiError SetAllowance(const _SiaRenterAllowance& renterAllowance); CSiaError<_SiaApiErrorCode> SetAllowance(const _SiaRenterAllowance& renterAllowance);
_SiaApiError RefreshFileTree( ); CSiaError<_SiaApiErrorCode> RefreshFileTree( );
}; };
class SIADRIVE_EXPORTABLE _CSiaConsensus : class SIADRIVE_EXPORTABLE _CSiaConsensus :
@@ -233,7 +234,8 @@ public:
SiaHostConfig GetHostConfig() const; SiaHostConfig GetHostConfig() const;
}; };
typedef CSiaApi::_SiaApiError SiaApiError; typedef CSiaApi::_SiaApiErrorCode SiaApiErrorCode;
typedef CSiaError<SiaApiErrorCode> SiaApiError;
typedef CSiaApi::_SiaSeedLanguage SiaSeedLanguage; typedef CSiaApi::_SiaSeedLanguage SiaSeedLanguage;
typedef CSiaApi::_CSiaWallet CSiaWallet; typedef CSiaApi::_CSiaWallet CSiaWallet;
typedef CSiaApi::_CSiaRenter CSiaRenter; typedef CSiaApi::_CSiaRenter CSiaRenter;

View File

@@ -98,6 +98,36 @@ get_access:\
set_access:\ set_access:\
type Set##name(const type& value) { json_doc[#name] = value; return value; } type Set##name(const type& value) { json_doc[#name] = value; return value; }
template<typename T>
class CSiaError
{
public:
CSiaError()
{
SetCode(T::Success);
}
CSiaError(const T& t)
{
SetCode(t);
}
CSiaError(const T& code, const SString& reason)
{
SetCode(code);
SetReason(reason);
}
public:
Property(T, Code, public, private)
Property(SString, Reason, public, private)
public:
operator bool() { return GetCode() == T::Success; }
operator bool() const { return GetCode() == T::Success; }
CSiaError& operator=(const T& code) { SetCode(code); return *this; }
};
typedef struct typedef struct
{ {
SString HostName; SString HostName;
@@ -107,7 +137,7 @@ typedef struct
template<typename T> template<typename T>
inline bool ApiSuccess(const T& t) { inline bool ApiSuccess(const T& t) {
return t == T::Success; return static_cast<bool>(t);
} }
typedef ttmath::UInt<256> Hastings; typedef ttmath::UInt<256> Hastings;

View File

@@ -9,7 +9,7 @@ NS_BEGIN(Api)
class SIADRIVE_EXPORTABLE CSiaCurl class SIADRIVE_EXPORTABLE CSiaCurl
{ {
public: public:
enum class _SiaCurlError enum class _SiaCurlErrorCode
{ {
Success, Success,
ServerVersionMismatch, ServerVersionMismatch,
@@ -36,23 +36,23 @@ public:
static SString UrlEncode(const SString& data, const bool& allowSlash = false); static SString UrlEncode(const SString& data, const bool& allowSlash = false);
private: private:
static _SiaCurlError CheckApiError(const json& result); static SString CSiaCurl::GetApiErrorMessage(const json& result);
static _SiaCurlError CheckHttpError(const std::string& result);
private: private:
std::string ConstructPath(const SString& relativePath) const; std::string ConstructPath(const SString& relativePath) const;
_SiaCurlError _Get(const SString& path, const _HttpParameters& parameters, json& response) const; CSiaError<_SiaCurlErrorCode> _Get(const SString& path, const _HttpParameters& parameters, json& response) const;
bool CheckVersion(_SiaCurlError& error) const; bool CheckVersion(CSiaError<_SiaCurlErrorCode>& error) const;
_SiaCurlError ProcessResponse(const int& res, const int& httpCode, const std::string& result, json& response) const; CSiaError<_SiaCurlErrorCode> ProcessResponse(const int& res, const int& httpCode, const std::string& result, json& response) const;
public: public:
SString GetServerVersion() const; SString GetServerVersion() const;
_SiaCurlError Get(const SString& path, json& result) const; CSiaError<_SiaCurlErrorCode> Get(const SString& path, json& result) const;
_SiaCurlError Get(const SString& path, const _HttpParameters& parameters, json& result) const; CSiaError<_SiaCurlErrorCode> Get(const SString& path, const _HttpParameters& parameters, json& result) const;
_SiaCurlError Post(const SString& path, const _HttpParameters& parameters, json& response) const; CSiaError<_SiaCurlErrorCode> Post(const SString& path, const _HttpParameters& parameters, json& response) const;
}; };
typedef CSiaCurl::_SiaCurlError SiaCurlError; typedef CSiaCurl::_SiaCurlErrorCode SiaCurlErrorCode;
typedef CSiaError<SiaCurlErrorCode> SiaCurlError;
typedef CSiaCurl::_HttpParameters HttpParameters; typedef CSiaCurl::_HttpParameters HttpParameters;
NS_END(2) NS_END(2)

View File

@@ -26,7 +26,7 @@ public:
Error Error
}; };
enum class _UploadError enum class _UploadErrorCode
{ {
Success, Success,
SourceFileNotFound, SourceFileNotFound,
@@ -68,12 +68,13 @@ public:
public: public:
_UploadStatus GetUploadStatus(const SString& siaPath); _UploadStatus GetUploadStatus(const SString& siaPath);
_UploadError AddOrUpdate(const SString& siaPath, SString filePath); CSiaError<_UploadErrorCode> AddOrUpdate(const SString& siaPath, SString filePath);
_UploadError Remove(const SString& siaPath); CSiaError<_UploadErrorCode> Remove(const SString& siaPath);
}; };
typedef Sia::Api::CUploadManager::_UploadStatus UploadStatus; typedef CUploadManager::_UploadStatus UploadStatus;
typedef Sia::Api::CUploadManager::_UploadError UploadError; typedef CUploadManager::_UploadErrorCode UploadErrorCode;
typedef CSiaError<CUploadManager::_UploadErrorCode> UploadError;
// Event Notifications // Event Notifications
class CreatingTemporarySiaDriveFile : class CreatingTemporarySiaDriveFile :
@@ -388,7 +389,7 @@ public:
private: private:
const SString _siaPath; const SString _siaPath;
const SString _filePath; const SString _filePath;
const SiaCurlError _curlError = SiaCurlError::Success; const SiaCurlError _curlError;
public: public:
virtual SString GetSingleLineMessage() const override virtual SString GetSingleLineMessage() const override

View File

@@ -35,21 +35,13 @@ SString CSiaCurl::UrlEncode(const SString& data, const bool& allowSlash)
return ret; return ret;
} }
SiaCurlError CSiaCurl::CheckApiError(const json& result) SString CSiaCurl::GetApiErrorMessage(const json& result)
{ {
SiaCurlError ret = SiaCurlError::Success;
SString ret;
if (result.find("message") != result.end()) if (result.find("message") != result.end())
{ {
ret = SiaCurlError::UnknownFailure; ret = result["message"].get<std::string>();
const std::string msg = result["message"].get<std::string>();
if ((msg.length() >= 3))
{
if ((msg.substr(0, 3) == "404"))
{
ret = SiaCurlError::HttpError;
}
}
} }
return ret; return ret;
@@ -61,40 +53,29 @@ std::string CSiaCurl::ConstructPath(const SString& relativePath) const
return ret; return ret;
} }
SiaCurlError CSiaCurl::CheckHttpError(const std::string& result)
{
if (result.length() && ((result.length() < 2) || (result[0] != '{')))
{
return SiaCurlError::HttpError;
}
return SiaCurlError::Success;
}
SiaCurlError CSiaCurl::ProcessResponse(const int& res, const int& httpCode, const std::string& result, json& response) const SiaCurlError CSiaCurl::ProcessResponse(const int& res, const int& httpCode, const std::string& result, json& response) const
{ {
SiaCurlError ret; SiaCurlError ret;
if ((res == CURLE_OK) && ((httpCode >= 200) && (httpCode <300))) if ((res == CURLE_OK) && ((httpCode >= 200) && (httpCode <300)))
{ {
ret = CheckHttpError(result); if (result.length())
if (ApiSuccess(ret)) {
{ response = json::parse(result.c_str());
ret = (result.length() ? CheckApiError((response = json::parse(result.c_str()))) : SiaCurlError::Success); }
}
} }
else else
{ {
if ((res == CURLE_COULDNT_RESOLVE_HOST) || (res == CURLE_COULDNT_CONNECT)) if ((res == CURLE_COULDNT_RESOLVE_HOST) || (res == CURLE_COULDNT_CONNECT))
{ {
ret = SiaCurlError::NoResponse; ret = SiaCurlErrorCode::NoResponse;
} }
else if (httpCode) else if (httpCode)
{ {
ret = SiaCurlError::HttpError; ret = { SiaCurlErrorCode::HttpError, GetApiErrorMessage(result) };
} }
else else
{ {
ret = SiaCurlError::UnknownFailure; ret = { SiaCurlErrorCode::UnknownFailure, "Unknown curl error" };
} }
} }
@@ -140,14 +121,14 @@ SiaCurlError CSiaCurl::_Get(const SString& path, const HttpParameters& parameter
bool CSiaCurl::CheckVersion(SiaCurlError& error) const bool CSiaCurl::CheckVersion(SiaCurlError& error) const
{ {
error = SiaCurlError::InvalidRequiredVersion; error = SiaCurlErrorCode::InvalidRequiredVersion;
if (GetHostConfig().RequiredVersion.Length()) if (GetHostConfig().RequiredVersion.Length())
{ {
error = SiaCurlError::NoResponse; error = SiaCurlErrorCode::NoResponse;
const SString serverVersion = GetServerVersion(); const SString serverVersion = GetServerVersion();
if (serverVersion.Length()) if (serverVersion.Length())
{ {
error = (serverVersion == GetHostConfig().RequiredVersion) ? SiaCurlError::Success : SiaCurlError::ServerVersionMismatch; error = (serverVersion == GetHostConfig().RequiredVersion) ? SiaCurlErrorCode::Success : SiaCurlErrorCode::ServerVersionMismatch;
} }
} }

View File

@@ -103,7 +103,7 @@ void CSiaApi::_CSiaRenter::Refresh(const CSiaCurl& siaCurl, CSiaDriveConfig* sia
std::uint32_t totalProgress = std::accumulate(std::next(fileList.begin()), fileList.end(), fileList[0]->GetUploadProgress(), [](const std::uint32_t& progress, const CSiaFilePtr& file) std::uint32_t totalProgress = std::accumulate(std::next(fileList.begin()), fileList.end(), fileList[0]->GetUploadProgress(), [](const std::uint32_t& progress, const CSiaFilePtr& file)
{ {
return progress + min(100, file->GetUploadProgress()); return progress + min(100, file->GetUploadProgress());
}) / fileList.size(); }) / static_cast<std::uint32_t>(fileList.size());
SetTotalUsedBytes(total); SetTotalUsedBytes(total);
SetTotalUploadProgress(totalProgress); SetTotalUploadProgress(totalProgress);
@@ -135,10 +135,11 @@ void CSiaApi::_CSiaRenter::Refresh(const CSiaCurl& siaCurl, CSiaDriveConfig* sia
SiaApiError CSiaApi::_CSiaRenter::RefreshFileTree( ) SiaApiError CSiaApi::_CSiaRenter::RefreshFileTree( )
{ {
SiaApiError ret = SiaApiError::RequestError; SiaApiError ret;
CSiaFileTreePtr tempTree(new CSiaFileTree(GetSiaCurl(), &GetSiaDriveConfig())); CSiaFileTreePtr tempTree(new CSiaFileTree(GetSiaCurl(), &GetSiaDriveConfig()));
json result; json result;
if (ApiSuccess(GetSiaCurl().Get(L"/renter/files", result))) SiaCurlError cerror = GetSiaCurl().Get(L"/renter/files", result);
if (ApiSuccess(cerror))
{ {
tempTree->BuildTree(result); tempTree->BuildTree(result);
{ {
@@ -146,6 +147,10 @@ SiaApiError CSiaApi::_CSiaRenter::RefreshFileTree( )
_fileTree = tempTree; _fileTree = tempTree;
} }
} }
else
{
ret = { SiaApiErrorCode::RequestError, cerror.GetReason() };
}
return ret; return ret;
} }
@@ -158,16 +163,18 @@ SiaApiError CSiaApi::_CSiaRenter::FileExists(const SString& siaPath, bool& exist
{ {
exists = siaFileTree->FileExists(siaPath); exists = siaFileTree->FileExists(siaPath);
} }
return ret; return ret;
} }
SiaApiError CSiaApi::_CSiaRenter::DownloadFile(const SString& siaPath, const SString& location) const SiaApiError CSiaApi::_CSiaRenter::DownloadFile(const SString& siaPath, const SString& location) const
{ {
SiaApiError ret = SiaApiError::RequestError; SiaApiError ret;
json result; json result;
if (ApiSuccess(GetSiaCurl().Get(L"/renter/download/" + siaPath, { { L"destination", location } }, result))) auto cerror = GetSiaCurl().Get(L"/renter/download/" + siaPath, { { L"destination", location } }, result);
if (!ApiSuccess(cerror))
{ {
ret = SiaApiError::Success; ret = { SiaApiErrorCode::RequestError, cerror.GetReason() };
} }
return ret; return ret;
@@ -181,7 +188,7 @@ SiaApiError CSiaApi::_CSiaRenter::GetFileTree(CSiaFileTreePtr& siaFileTree) cons
siaFileTree.reset(new CSiaFileTree(GetSiaCurl(), &GetSiaDriveConfig())); siaFileTree.reset(new CSiaFileTree(GetSiaCurl(), &GetSiaDriveConfig()));
} }
return SiaApiError::Success; return SiaApiErrorCode::Success;
} }
SiaRenterAllowance CSiaApi::_CSiaRenter::GetAllowance() const SiaRenterAllowance CSiaApi::_CSiaRenter::GetAllowance() const
@@ -191,18 +198,19 @@ SiaRenterAllowance CSiaApi::_CSiaRenter::GetAllowance() const
SiaApiError CSiaApi::_CSiaRenter::SetAllowance(const SiaRenterAllowance& renterAllowance) SiaApiError CSiaApi::_CSiaRenter::SetAllowance(const SiaRenterAllowance& renterAllowance)
{ {
SiaApiError ret = SiaApiError::RequestError; SiaApiError ret;
json result; json result;
if (ApiSuccess(GetSiaCurl().Post(L"/renter", auto cerror = GetSiaCurl().Post(L"/renter",
{ {
{ "funds", SiaCurrencyToHastingsString(renterAllowance.Funds) }, { "funds", SiaCurrencyToHastingsString(renterAllowance.Funds) },
{ "hosts", SString::FromUInt64(renterAllowance.Hosts) }, { "hosts", SString::FromUInt64(renterAllowance.Hosts) },
{ "period", SString::FromUInt64(renterAllowance.Period) }, { "period", SString::FromUInt64(renterAllowance.Period) },
{ "renewwindow", SString::FromUInt64 (renterAllowance.RenewWindowInBlocks) } { "renewwindow", SString::FromUInt64 (renterAllowance.RenewWindowInBlocks) }
}, result))) }, result);
if (!ApiSuccess(cerror))
{ {
ret = SiaApiError::Success; ret = { SiaApiErrorCode::RequestError, cerror.GetReason() };
} }
return ret; return ret;

View File

@@ -83,20 +83,26 @@ void CSiaApi::_CSiaWallet::Refresh(const CSiaCurl& siaCurl, CSiaDriveConfig* sia
SiaApiError CSiaApi::_CSiaWallet::Create(const SiaSeedLanguage& seedLanguage, SString& seed) SiaApiError CSiaApi::_CSiaWallet::Create(const SiaSeedLanguage& seedLanguage, SString& seed)
{ {
SiaApiError error = SiaApiError::RequestError; SiaApiError error = SiaApiErrorCode::NotConnected;
if (GetConnected()) if (GetConnected())
{ {
error = SiaApiError::WalletExists; if (GetCreated())
if (!GetCreated()) {
error = SiaApiErrorCode::WalletExists;
}
else
{ {
error = SiaApiError::RequestError;
json result; json result;
SiaCurlError cerror = GetSiaCurl().Post(L"/wallet/init", { {L"dictionary", SeedLangToString(seedLanguage)} }, result); SiaCurlError cerror = GetSiaCurl().Post(L"/wallet/init", { {L"dictionary", SeedLangToString(seedLanguage)} }, result);
if (ApiSuccess(cerror)) if (ApiSuccess(cerror))
{ {
error = SiaApiError::Success; error = SiaApiErrorCode::Success;
seed = result["primaryseed"].get<std::string>(); seed = result["primaryseed"].get<std::string>();
} }
else
{
error = { SiaApiErrorCode::RequestError, cerror.GetReason() };
}
} }
} }
@@ -105,24 +111,26 @@ SiaApiError CSiaApi::_CSiaWallet::Create(const SiaSeedLanguage& seedLanguage, SS
SiaApiError CSiaApi::_CSiaWallet::Restore(const SString& seed) SiaApiError CSiaApi::_CSiaWallet::Restore(const SString& seed)
{ {
SiaApiError error = SiaApiError::NotImplemented; SiaApiError error = SiaApiErrorCode::NotImplemented;
// TODO Future enhancement // TODO Future enhancement
return error; return error;
} }
SiaApiError CSiaApi::_CSiaWallet::Lock() SiaApiError CSiaApi::_CSiaWallet::Lock()
{ {
SiaApiError error = GetCreated() ? (GetLocked() ? SiaApiError::WalletLocked : SiaApiError::Success) : SiaApiError::WalletNotCreated; SiaApiError error = GetCreated() ? (GetLocked() ? SiaApiErrorCode::WalletLocked : SiaApiErrorCode::Success) : SiaApiErrorCode::WalletNotCreated;
if (ApiSuccess(error)) if (ApiSuccess(error))
{ {
error = SiaApiError::RequestError;
json result; json result;
SiaCurlError cerror = GetSiaCurl().Post(L"/wallet/lock", {}, result); SiaCurlError cerror = GetSiaCurl().Post(L"/wallet/lock", {}, result);
if (ApiSuccess(cerror)) if (ApiSuccess(cerror))
{ {
error = SiaApiError::Success; error = SiaApiErrorCode::Success;
} }
else
{
error = { SiaApiErrorCode::RequestError, cerror.GetReason() };
}
} }
return error; return error;
@@ -130,17 +138,19 @@ SiaApiError CSiaApi::_CSiaWallet::Lock()
SiaApiError CSiaApi::_CSiaWallet::Unlock(const SString& password) SiaApiError CSiaApi::_CSiaWallet::Unlock(const SString& password)
{ {
SiaApiError error = GetCreated() ? (GetLocked() ? SiaApiError::Success : SiaApiError::WalletUnlocked) : SiaApiError::WalletNotCreated; SiaApiError error = GetCreated() ? (GetLocked() ? SiaApiErrorCode::Success : SiaApiErrorCode::WalletUnlocked) : SiaApiErrorCode::WalletNotCreated;
if (ApiSuccess(error)) if (ApiSuccess(error))
{ {
error = SiaApiError::RequestError;
json result; json result;
SiaCurlError cerror = GetSiaCurl().Post(L"/wallet/unlock", { {L"encryptionpassword", password} }, result); SiaCurlError cerror = GetSiaCurl().Post(L"/wallet/unlock", { {L"encryptionpassword", password} }, result);
if (ApiSuccess(cerror)) if (ApiSuccess(cerror))
{ {
error = SiaApiError::Success; error = SiaApiErrorCode::Success;
} }
else
{
error = { SiaApiErrorCode::RequestError, cerror.GetReason() };
}
} }
return error; return error;

View File

@@ -387,7 +387,7 @@ UploadStatus CUploadManager::GetUploadStatus(const SString& siaPath)
UploadError CUploadManager::AddOrUpdate(const SString& siaPath, SString filePath) UploadError CUploadManager::AddOrUpdate(const SString& siaPath, SString filePath)
{ {
UploadError ret = UploadError::Success; UploadError ret;
// Relative to absolute and grab parent folder of source // Relative to absolute and grab parent folder of source
FilePath rootPath = filePath; FilePath rootPath = filePath;
@@ -439,26 +439,26 @@ UploadError CUploadManager::AddOrUpdate(const SString& siaPath, SString filePath
else else
{ {
CEventSystem::EventSystem.NotifyEvent(CreateSystemEvent(DatabaseInsertFailed(siaPath, filePath, insert.getErrorMsg()))); CEventSystem::EventSystem.NotifyEvent(CreateSystemEvent(DatabaseInsertFailed(siaPath, filePath, insert.getErrorMsg())));
ret = UploadError::DatabaseError; ret = UploadErrorCode::DatabaseError;
} }
} }
catch (SQLite::Exception e) catch (SQLite::Exception e)
{ {
CEventSystem::EventSystem.NotifyEvent(CreateSystemEvent(DatabaseExceptionOccurred("AddOrUpdate(insert)", e))); CEventSystem::EventSystem.NotifyEvent(CreateSystemEvent(DatabaseExceptionOccurred("AddOrUpdate(insert)", e)));
ret = UploadError::DatabaseError; ret = { UploadErrorCode::DatabaseError, e.getErrorStr() };
} }
} }
} }
catch (SQLite::Exception e) catch (SQLite::Exception e)
{ {
CEventSystem::EventSystem.NotifyEvent(CreateSystemEvent(DatabaseExceptionOccurred("AddOrUpdate(query)", e))); CEventSystem::EventSystem.NotifyEvent(CreateSystemEvent(DatabaseExceptionOccurred("AddOrUpdate(query)", e)));
ret = UploadError::DatabaseError; ret = { UploadErrorCode::DatabaseError, e.getErrorStr() };
} }
} }
else else
{ {
CEventSystem::EventSystem.NotifyEvent(CreateSystemEvent(SourceFileNotFound(siaPath, filePath))); CEventSystem::EventSystem.NotifyEvent(CreateSystemEvent(SourceFileNotFound(siaPath, filePath)));
ret = UploadError::SourceFileNotFound; ret = UploadErrorCode::SourceFileNotFound;
} }
return ret; return ret;
@@ -466,7 +466,7 @@ UploadError CUploadManager::AddOrUpdate(const SString& siaPath, SString filePath
UploadError CUploadManager::Remove(const SString& siaPath) UploadError CUploadManager::Remove(const SString& siaPath)
{ {
UploadError ret = UploadError::Success; UploadError ret;
bool remove = false; bool remove = false;
SString siaDriveFilePath; SString siaDriveFilePath;
try try
@@ -506,7 +506,7 @@ UploadError CUploadManager::Remove(const SString& siaPath)
catch (SQLite::Exception e) catch (SQLite::Exception e)
{ {
CEventSystem::EventSystem.NotifyEvent(CreateSystemEvent(DatabaseExceptionOccurred("Remove", e))); CEventSystem::EventSystem.NotifyEvent(CreateSystemEvent(DatabaseExceptionOccurred("Remove", e)));
ret = UploadError::DatabaseError; ret = { UploadErrorCode::DatabaseError, e.getErrorStr() };
} }
if (remove) if (remove)