diff --git a/SiaDrive.Api/AutoThread.cpp b/SiaDrive.Api/AutoThread.cpp index f45d252..a6ca62f 100644 --- a/SiaDrive.Api/AutoThread.cpp +++ b/SiaDrive.Api/AutoThread.cpp @@ -3,8 +3,9 @@ using namespace Sia::Api; -CAutoThread::CAutoThread(const CSiaCurl& siaCurl) : +CAutoThread::CAutoThread(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig) : _siaCurl(siaCurl.GetHostConfig()), + _siaDriveConfig(siaDriveConfig), _stopEvent(::CreateEvent(nullptr, FALSE, FALSE, nullptr)) { } @@ -23,7 +24,7 @@ void CAutoThread::StartAutoThread() _thread.reset(new std::thread([this]() { do { - AutoThreadCallback(_siaCurl); + AutoThreadCallback(_siaCurl, _siaDriveConfig); } while (::WaitForSingleObject(_stopEvent, 2000) == WAIT_TIMEOUT); })); } diff --git a/SiaDrive.Api/AutoThread.h b/SiaDrive.Api/AutoThread.h index b42328b..12809a1 100644 --- a/SiaDrive.Api/AutoThread.h +++ b/SiaDrive.Api/AutoThread.h @@ -5,16 +5,18 @@ NS_BEGIN(Sia) NS_BEGIN(Api) +class CSiaDriveConfig; class AFX_EXT_CLASS CAutoThread { public: - CAutoThread(const CSiaCurl& siaCurl); + CAutoThread(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig); public: virtual ~CAutoThread(); private: CSiaCurl _siaCurl; + CSiaDriveConfig* _siaDriveConfig; HANDLE _stopEvent; std::unique_ptr _thread; std::mutex _startStopMutex; @@ -22,7 +24,7 @@ private: protected: void StartAutoThread(); void StopAutoThread(); - virtual void AutoThreadCallback(const CSiaCurl& siaCurl) = 0; + virtual void AutoThreadCallback(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig) = 0; }; NS_END(2) \ No newline at end of file diff --git a/SiaDrive.Api/SiaApi.cpp b/SiaDrive.Api/SiaApi.cpp index 670bf6a..ba401ef 100644 --- a/SiaDrive.Api/SiaApi.cpp +++ b/SiaDrive.Api/SiaApi.cpp @@ -1,14 +1,16 @@ #include "stdafx.h" #include "SiaApi.h" #include +#include "SiaDriveConfig.h" using namespace Sia::Api; -CSiaApi::CSiaApi(const SiaHostConfig& hostConfig) : +CSiaApi::CSiaApi(const SiaHostConfig& hostConfig, CSiaDriveConfig* siaDriveConfig) : _siaCurl(hostConfig), - _wallet(new CSiaWallet(_siaCurl)), - _renter(new CSiaRenter(_siaCurl)), - _consensus(new CSiaConsensus(_siaCurl)) + _siaDriveConfig(siaDriveConfig), + _wallet(new CSiaWallet(_siaCurl, siaDriveConfig)), + _renter(new CSiaRenter(_siaCurl, siaDriveConfig)), + _consensus(new CSiaConsensus(_siaCurl, siaDriveConfig)) { } diff --git a/SiaDrive.Api/SiaApi.h b/SiaDrive.Api/SiaApi.h index b982192..ddc185f 100644 --- a/SiaDrive.Api/SiaApi.h +++ b/SiaDrive.Api/SiaApi.h @@ -7,11 +7,13 @@ NS_BEGIN(Sia) NS_BEGIN(Api) +class CSiaDriveConfig; class AFX_EXT_CLASS CSiaBase { public: - explicit CSiaBase(const CSiaCurl& siaCurl) : - _siaCurl(siaCurl) + explicit CSiaBase(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig) : + _siaCurl(siaCurl), + _siaDriveConfig(siaDriveConfig) { } @@ -22,12 +24,18 @@ public: private: const CSiaCurl& _siaCurl; + CSiaDriveConfig* _siaDriveConfig; protected: inline const CSiaCurl& GetSiaCurl() const { return _siaCurl; } + + inline CSiaDriveConfig& GetSiaDriveConfig() const + { + return *_siaDriveConfig; + } }; @@ -60,7 +68,7 @@ public: friend _CSiaFileTree; private: - explicit _CSiaFile(const CSiaCurl& siaCurl, const json& fileJson); + explicit _CSiaFile(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig, const json& fileJson); public: virtual ~_CSiaFile(); @@ -80,7 +88,7 @@ public: { friend CSiaApi; public: - explicit _CSiaFileTree(const CSiaCurl& siaCurl); + explicit _CSiaFileTree(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig); public: virtual ~_CSiaFileTree(); @@ -105,7 +113,7 @@ public: { friend CSiaApi; private: - explicit _CSiaWallet(const CSiaCurl& siaCurl); + explicit _CSiaWallet(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig); public: virtual ~_CSiaWallet(); @@ -132,7 +140,7 @@ public: friend CSiaApi; private: - explicit _CSiaRenter(const CSiaCurl& siaCurl); + explicit _CSiaRenter(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig); public: virtual ~_CSiaRenter(); @@ -144,7 +152,7 @@ public: Property(std::uint32_t, TotalUploadProgress, public, private) protected: - virtual void AutoThreadCallback(const CSiaCurl& siaCurl) override; + virtual void AutoThreadCallback(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig) override; public: _SiaApiError FileExists(const String& siaPath, bool& exists) const; @@ -161,7 +169,7 @@ public: friend CSiaApi; private: - explicit _CSiaConsensus(const CSiaCurl& siaCurl); + explicit _CSiaConsensus(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig); public: virtual ~_CSiaConsensus(); @@ -172,17 +180,18 @@ public: Property(String, CurrentBlock, public, private) protected: - virtual void AutoThreadCallback(const CSiaCurl& siaCurl) override; + virtual void AutoThreadCallback(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig) override; }; public: - explicit CSiaApi(const SiaHostConfig& hostConfig); + explicit CSiaApi(const SiaHostConfig& hostConfig, CSiaDriveConfig* siaDriveConfig); public: ~CSiaApi(); private: CSiaCurl _siaCurl; + CSiaDriveConfig* _siaDriveConfig; std::shared_ptr<_CSiaWallet> _wallet; std::shared_ptr<_CSiaRenter> _renter; std::shared_ptr<_CSiaConsensus> _consensus; diff --git a/SiaDrive.Api/SiaConsensus.cpp b/SiaDrive.Api/SiaConsensus.cpp index 2371891..fb2edc5 100644 --- a/SiaDrive.Api/SiaConsensus.cpp +++ b/SiaDrive.Api/SiaConsensus.cpp @@ -3,9 +3,9 @@ using namespace Sia::Api; -CSiaApi::_CSiaConsensus::_CSiaConsensus(const CSiaCurl& siaCurl) : - CSiaBase(siaCurl), - CAutoThread(siaCurl), +CSiaApi::_CSiaConsensus::_CSiaConsensus(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig) : + CSiaBase(siaCurl, siaDriveConfig), + CAutoThread(siaCurl, siaDriveConfig), _Height(0), _Synced(false), _CurrentBlock(L"") @@ -18,7 +18,7 @@ CSiaApi::_CSiaConsensus::~_CSiaConsensus() StopAutoThread(); } -void CSiaApi::_CSiaConsensus::AutoThreadCallback(const CSiaCurl& siaCurl) +void CSiaApi::_CSiaConsensus::AutoThreadCallback(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig) { json result; if (ApiSuccess(siaCurl.Get(L"/consensus", result))) diff --git a/SiaDrive.Api/SiaFile.cpp b/SiaDrive.Api/SiaFile.cpp index 19cb0cc..3fdef49 100644 --- a/SiaDrive.Api/SiaFile.cpp +++ b/SiaDrive.Api/SiaFile.cpp @@ -3,8 +3,8 @@ using namespace Sia::Api; -CSiaApi::_CSiaFile::_CSiaFile(const CSiaCurl& siaCurl, const json& fileJson) : - CSiaBase(siaCurl), +CSiaApi::_CSiaFile::_CSiaFile(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig, const json& fileJson) : + CSiaBase(siaCurl, siaDriveConfig), _SiaPath(CA2W(fileJson["siapath"].get().c_str())), _FileSize(fileJson["filesize"].get()), _Available(fileJson["available"].get()), diff --git a/SiaDrive.Api/SiaFileTree.cpp b/SiaDrive.Api/SiaFileTree.cpp index 079e2ab..3d18bd4 100644 --- a/SiaDrive.Api/SiaFileTree.cpp +++ b/SiaDrive.Api/SiaFileTree.cpp @@ -4,8 +4,8 @@ using namespace Sia::Api; -CSiaApi::_CSiaFileTree::_CSiaFileTree(const CSiaCurl& siaCurl) : - CSiaBase(siaCurl) +CSiaApi::_CSiaFileTree::_CSiaFileTree(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig) : + CSiaBase(siaCurl, siaDriveConfig) { } @@ -20,7 +20,7 @@ void CSiaApi::_CSiaFileTree::BuildTree(const json& result) _fileList.clear(); for (const auto& file : result["files"]) { - _fileList.push_back(CSiaFilePtr(new CSiaFile(GetSiaCurl(), file))); + _fileList.push_back(CSiaFilePtr(new CSiaFile(GetSiaCurl(), &GetSiaDriveConfig(), file))); } } diff --git a/SiaDrive.Api/SiaRenter.cpp b/SiaDrive.Api/SiaRenter.cpp index e2d44ca..ee80549 100644 --- a/SiaDrive.Api/SiaRenter.cpp +++ b/SiaDrive.Api/SiaRenter.cpp @@ -46,9 +46,9 @@ using namespace Sia::Api; "unspent": "1234" // hastings } }*/ -CSiaApi::_CSiaRenter::_CSiaRenter(const CSiaCurl& siaCurl) : - CSiaBase(siaCurl), - CAutoThread(siaCurl), +CSiaApi::_CSiaRenter::_CSiaRenter(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig) : + CSiaBase(siaCurl, siaDriveConfig), + CAutoThread(siaCurl, siaDriveConfig), _Funds(0), _Hosts(0), _Unspent(0), @@ -63,7 +63,7 @@ CSiaApi::_CSiaRenter::~_CSiaRenter() StopAutoThread(); } -void CSiaApi::_CSiaRenter::AutoThreadCallback(const CSiaCurl& siaCurl) +void CSiaApi::_CSiaRenter::AutoThreadCallback(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig) { json result; if (ApiSuccess(siaCurl.Get(L"/renter", result))) @@ -75,7 +75,7 @@ void CSiaApi::_CSiaRenter::AutoThreadCallback(const CSiaCurl& siaCurl) SetHosts(hosts); SetUnspent(unspent); - CSiaFileTreePtr fileTree(new CSiaFileTree(siaCurl)); + CSiaFileTreePtr fileTree(new CSiaFileTree(siaCurl, siaDriveConfig)); if (ApiSuccess(siaCurl.Get(L"/renter/files", result))) { fileTree->BuildTree(result); @@ -147,7 +147,7 @@ SiaApiError CSiaApi::_CSiaRenter::QueueUploadFile(const String& siaPath, const S SiaApiError CSiaApi::_CSiaRenter::GetFileTree(CSiaFileTreePtr& siaFileTree) const { SiaApiError ret = SiaApiError::RequestError; - siaFileTree.reset(new CSiaFileTree(GetSiaCurl())); + siaFileTree.reset(new CSiaFileTree(GetSiaCurl(), &GetSiaDriveConfig())); json result; if (ApiSuccess(GetSiaCurl().Get(L"/renter/files", result))) { diff --git a/SiaDrive.Api/SiaWallet.cpp b/SiaDrive.Api/SiaWallet.cpp index 67769fc..6931b1d 100644 --- a/SiaDrive.Api/SiaWallet.cpp +++ b/SiaDrive.Api/SiaWallet.cpp @@ -21,8 +21,8 @@ static String SeedLangToString(const SiaSeedLanguage& lang) } } -CSiaApi::_CSiaWallet::_CSiaWallet(const CSiaCurl& siaCurl) : - CSiaBase(siaCurl), +CSiaApi::_CSiaWallet::_CSiaWallet(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig) : + CSiaBase(siaCurl, siaDriveConfig), _Created(false), _Locked(false) { diff --git a/SiaDrive/SiaDriveDlg.cpp b/SiaDrive/SiaDriveDlg.cpp index 9454dfc..f6464dc 100644 --- a/SiaDrive/SiaDriveDlg.cpp +++ b/SiaDrive/SiaDriveDlg.cpp @@ -213,7 +213,7 @@ void CSiaDriveDlg::OnDocumentComplete(LPDISPATCH, LPCTSTR) KillTimer(IDT_UI_ACTION_QUEUE); // Create new API to clear all cached data used by threaded implementations - _siaApi.reset(new CSiaApi({ L"localhost", 9980, L"1.1.0" })); + _siaApi.reset(new CSiaApi({ L"localhost", 9980, L"1.1.0" }, &_siaConfig)); ClearDisplay(); CallClientScript(L"setAvailableDrives", json(GetAvailableDrives()), nullptr);