diff --git a/SiaDrive.Api/SiaWallet.cpp b/SiaDrive.Api/SiaWallet.cpp index d78f289..ca49c56 100644 --- a/SiaDrive.Api/SiaWallet.cpp +++ b/SiaDrive.Api/SiaWallet.cpp @@ -138,6 +138,7 @@ SiaApiError CSiaApi::_CSiaWallet::GetConfirmedBalance(SiaCurrency& balance) cons if (API_SUCCESS(SiaCurlError, cerror)) { balance = HastingsStringToSiaCurrency(String(CA2W(result["confirmedsiacoinbalance"].get().c_str()))); + ret = SiaApiError::Success; } return ret; @@ -153,6 +154,7 @@ SiaApiError CSiaApi::_CSiaWallet::GetUnonfirmedBalance(SiaCurrency& balance) con if (API_SUCCESS(SiaCurlError, cerror)) { balance = HastingsStringToSiaCurrency(String(CA2W(result["unconfirmedincomingsiacoins"].get().c_str()))); + ret = SiaApiError::Success; } return ret; diff --git a/SiaDrive/SiaDriveDlg.cpp b/SiaDrive/SiaDriveDlg.cpp index c5510bf..54a1b90 100644 --- a/SiaDrive/SiaDriveDlg.cpp +++ b/SiaDrive/SiaDriveDlg.cpp @@ -6,6 +6,7 @@ #include "SiaDriveApp.h" #include "SiaDriveDlg.h" #include "afxdialogex.h" +#include #ifdef _DEBUG #define new DEBUG_NEW @@ -58,11 +59,6 @@ CSiaDriveDlg::CSiaDriveDlg(CWnd* pParent /*=NULL*/) _siaApi({L"localhost", 9980, L"1.1.0"}) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); - _serverVersion = L"x.x.x"; - _clientVersion = L"1.0.0"; - _walletBalanceConfirmed = L"0"; - _walletBalanceUnconfirmed = L"0"; - _walletBalanceTotal = L"0"; } void CSiaDriveDlg::DoDataExchange(CDataExchange* pDX) @@ -176,20 +172,54 @@ HRESULT CSiaDriveDlg::OnButtonCancel(IHTMLElement* /*pElement*/) return S_OK; } +BOOL CSiaDriveDlg::PreTranslateMessage(MSG* pMsg) +{ + //TODO: Implement copy/paste context menu + if ((pMsg->message == WM_RBUTTONDOWN) || (pMsg->message == WM_RBUTTONDBLCLK)) + { + return TRUE; + } + + return CDHtmlDialog::PreTranslateMessage(pMsg); +} + +bool IsRefreshKeyMessage(const MSG *message) +{ + return message + && (message->message == WM_KEYUP) + && (message->wParam == VK_F5); +} + +HRESULT CSiaDriveDlg::TranslateAccelerator(MSG *message, const GUID *, DWORD) +{ + return IsRefreshKeyMessage(message) ? E_FAIL : S_OK; +} + void CSiaDriveDlg::OnDocumentComplete(LPDISPATCH, LPCTSTR) { - UpdateUi(); + KillTimer(IDT_UPDATE); - switch (_siaConfig.GetUI_Main_TabIndex()) + _serverVersion = L"x.x.x"; + _clientVersion = L"1.0.0"; + _walletBalanceConfirmed = L""; + _walletBalanceUnconfirmed = L""; + _walletBalanceTotal = L""; + + UpdateData(FALSE); + + if ((_connected = UpdateUi(false))) { - case WALLET_TAB: - { - DisplayWalletTab(); - } - break; + switch (_siaConfig.GetUI_Main_TabIndex()) + { + case WALLET_TAB: + { + DisplayWalletTab(); + } + break; + } } - SetTimer(IDT_UPDATE, 1000, nullptr); + SetTimer(IDT_UPDATE, 2000, nullptr); } void CSiaDriveDlg::OnTimer(UINT_PTR nIDEvent) @@ -204,27 +234,57 @@ void CSiaDriveDlg::OnTimer(UINT_PTR nIDEvent) } } -void CSiaDriveDlg::SetWalletInfo() -{ - SiaCurrency confirmed; - _siaApi.GetWallet()->GetConfirmedBalance(confirmed); - - SiaCurrency unconfirmed; - _siaApi.GetWallet()->GetUnonfirmedBalance(unconfirmed); - - SiaCurrency total = confirmed + unconfirmed; - - _walletBalanceConfirmed = SiaCurrencyToString(confirmed).c_str(); - _walletBalanceUnconfirmed = SiaCurrencyToString(unconfirmed).c_str(); - _walletBalanceTotal = SiaCurrencyToString(total).c_str(); -} - -void CSiaDriveDlg::UpdateUi() +bool CSiaDriveDlg::DisplaySiaInfo() { _serverVersion = _siaApi.GetServerVersion().c_str(); - SetWalletInfo(); + if (_serverVersion) + { + SiaCurrency confirmed; + if (API_SUCCESS(SiaApiError, _siaApi.GetWallet()->GetConfirmedBalance(confirmed))) + { + SiaCurrency unconfirmed; + if (API_SUCCESS(SiaApiError, _siaApi.GetWallet()->GetUnonfirmedBalance(unconfirmed))) + { + SiaCurrency total = confirmed + unconfirmed; - UpdateData(FALSE); + _walletBalanceConfirmed = SiaCurrencyToString(confirmed).c_str(); + _walletBalanceUnconfirmed = SiaCurrencyToString(unconfirmed).c_str(); + _walletBalanceTotal = SiaCurrencyToString(total).c_str(); + + return true; + } + } + } + + _serverVersion = L"x.x.x"; + _walletBalanceConfirmed = _walletBalanceUnconfirmed = _walletBalanceTotal = L""; + + return false; +} + +bool CSiaDriveDlg::UpdateUi(const bool& refresh) +{ + bool ret = DisplaySiaInfo(); + if (ret) + { + if (_connected) + { + UpdateData(FALSE); + } + else + { + KillTimer(IDT_UPDATE); + this->Navigate(this->m_strCurrentUrl); + } + } + else if (refresh) + { + _connected = false; + KillTimer(IDT_UPDATE); + this->Navigate(this->m_strCurrentUrl); + } + + return ret; } HRESULT CSiaDriveDlg::GetDomElementById(const CString& id, CComPtr& node) @@ -278,6 +338,7 @@ void CSiaDriveDlg::DisplayWalletTab() { if (_siaApi.GetWallet()->GetCreated()) { + } else { diff --git a/SiaDrive/SiaDriveDlg.h b/SiaDrive/SiaDriveDlg.h index 4f2194e..e3c57cd 100644 --- a/SiaDrive/SiaDriveDlg.h +++ b/SiaDrive/SiaDriveDlg.h @@ -32,7 +32,6 @@ protected: // Generated message map functions virtual BOOL OnInitDialog(); virtual void OnDocumentComplete(LPDISPATCH pDisp, LPCTSTR szUrl); - afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); @@ -40,11 +39,14 @@ protected: DECLARE_MESSAGE_MAP() DECLARE_DHTML_EVENT_MAP() + virtual HRESULT TranslateAccelerator(MSG *message, const GUID *, DWORD) override; + virtual BOOL PreTranslateMessage(MSG* pMsg) override; + private: void DisplayCreateWallet(); void DisplayWalletTab(); - void SetWalletInfo(); - void UpdateUi(); + bool DisplaySiaInfo(); + bool UpdateUi(const bool& refresh = true); HRESULT GetDomElementById(const CString& id, CComPtr& node); HRESULT GetDomElementAndNodeById(const CString& id, CComPtr& node, CComPtr& elem); @@ -56,6 +58,7 @@ private: CString _walletBalanceTotal; CString _walletBalanceConfirmed; CString _walletBalanceUnconfirmed; + bool _connected = false; static const UINT IDT_UPDATE = 1; static const std::uint8_t WALLET_TAB = 0; };