diff options
| author | xiphon <xiphon@protonmail.com> | 2020-01-28 04:43:31 +0000 |
|---|---|---|
| committer | xiphon <xiphon@protonmail.com> | 2020-01-28 05:11:29 +0000 |
| commit | 6940390a5e0f07914695a11a12dd12b0cff395f1 (patch) | |
| tree | 7ae8c44c1a1c856b5d24ebe751066d9e550cd81b /src | |
| parent | 6de8547047d5801181b61cbbc707a44a4ee5e77b (diff) | |
| download | monzero-gui-6940390a5e0f07914695a11a12dd12b0cff395f1.tar.gz monzero-gui-6940390a5e0f07914695a11a12dd12b0cff395f1.tar.xz monzero-gui-6940390a5e0f07914695a11a12dd12b0cff395f1.zip | |
Wallet: implement 'Connecting' status, add 'disconnected' property
Diffstat (limited to 'src')
| -rw-r--r-- | src/libwalletqt/Wallet.cpp | 48 | ||||
| -rw-r--r-- | src/libwalletqt/Wallet.h | 9 |
2 files changed, 45 insertions, 12 deletions
diff --git a/src/libwalletqt/Wallet.cpp b/src/libwalletqt/Wallet.cpp index c32026f8..89707b5a 100644 --- a/src/libwalletqt/Wallet.cpp +++ b/src/libwalletqt/Wallet.cpp @@ -153,12 +153,14 @@ NetworkType::Type Wallet::nettype() const void Wallet::updateConnectionStatusAsync() { m_scheduler.run([this] { + if (m_connectionStatus == Wallet::ConnectionStatus_Disconnected) + { + setConnectionStatus(ConnectionStatus_Connecting); + } ConnectionStatus newStatus = static_cast<ConnectionStatus>(m_walletImpl->connected()); if (newStatus != m_connectionStatus || !m_initialized) { m_initialized = true; - m_connectionStatus = newStatus; - qDebug() << "NEW STATUS " << newStatus; - emit connectionStatusChanged(newStatus); + setConnectionStatus(newStatus); } // Release lock m_connectionStatusRunning = false; @@ -178,6 +180,31 @@ Wallet::ConnectionStatus Wallet::connected(bool forceCheck) return m_connectionStatus; } +bool Wallet::disconnected() const +{ + return m_disconnected; +} + +void Wallet::setConnectionStatus(ConnectionStatus value) +{ + if (m_connectionStatus == value) + { + return; + } + + m_connectionStatus = value; + emit connectionStatusChanged(m_connectionStatus); + + bool disconnected = m_connectionStatus == Wallet::ConnectionStatus_Connecting || + m_connectionStatus == Wallet::ConnectionStatus_Disconnected; + + if (m_disconnected != disconnected) + { + m_disconnected = disconnected; + emit disconnectedChanged(); + } +} + bool Wallet::synchronized() const { return m_walletImpl->synchronized(); @@ -237,13 +264,7 @@ void Wallet::setDaemonLogin(const QString &daemonUsername, const QString &daemon void Wallet::initAsync(const QString &daemonAddress, bool trustedDaemon, quint64 upperTransactionLimit, bool isRecovering, bool isRecoveringFromDevice, quint64 restoreHeight) { qDebug() << "initAsync: " + daemonAddress; - // Change status to disconnected if connected - if(m_connectionStatus != Wallet::ConnectionStatus_Disconnected) { - m_connectionStatus = Wallet::ConnectionStatus_Disconnected; - emit connectionStatusChanged(m_connectionStatus); - } - - m_scheduler.run([this, daemonAddress, trustedDaemon, upperTransactionLimit, isRecovering, isRecoveringFromDevice, restoreHeight] { + const auto future = m_scheduler.run([this, daemonAddress, trustedDaemon, upperTransactionLimit, isRecovering, isRecoveringFromDevice, restoreHeight] { bool success = init(daemonAddress, trustedDaemon, upperTransactionLimit, isRecovering, isRecoveringFromDevice, restoreHeight); if (success) { @@ -253,6 +274,10 @@ void Wallet::initAsync(const QString &daemonAddress, bool trustedDaemon, quint64 m_walletImpl->startRefresh(); } }); + if (future.first) + { + setConnectionStatus(Wallet::ConnectionStatus_Connecting); + } } bool Wallet::isHwBacked() const @@ -985,7 +1010,9 @@ Wallet::Wallet(Monero::Wallet *w, QObject *parent) , m_daemonBlockChainHeightTtl(DAEMON_BLOCKCHAIN_HEIGHT_CACHE_TTL_SECONDS) , m_daemonBlockChainTargetHeight(0) , m_daemonBlockChainTargetHeightTtl(DAEMON_BLOCKCHAIN_TARGET_HEIGHT_CACHE_TTL_SECONDS) + , m_connectionStatus(Wallet::ConnectionStatus_Disconnected) , m_connectionStatusTtl(WALLET_CONNECTION_STATUS_CACHE_TTL_SECONDS) + , m_disconnected(true) , m_currentSubaddressAccount(0) , m_subaddress(nullptr) , m_subaddressModel(nullptr) @@ -999,7 +1026,6 @@ Wallet::Wallet(Monero::Wallet *w, QObject *parent) m_subaddressAccount = new SubaddressAccount(m_walletImpl->subaddressAccount(), this); m_walletListener = new WalletListenerImpl(this); m_walletImpl->setListener(m_walletListener); - m_connectionStatus = Wallet::ConnectionStatus_Disconnected; m_currentSubaddressAccount = getCacheAttribute(ATTRIBUTE_SUBADDRESS_ACCOUNT).toUInt(); // start cache timers m_connectionStatusTime.restart(); diff --git a/src/libwalletqt/Wallet.h b/src/libwalletqt/Wallet.h index a6add1da..2646da30 100644 --- a/src/libwalletqt/Wallet.h +++ b/src/libwalletqt/Wallet.h @@ -60,6 +60,7 @@ class SubaddressAccountModel; class Wallet : public QObject { Q_OBJECT + Q_PROPERTY(bool disconnected READ disconnected NOTIFY disconnectedChanged) Q_PROPERTY(QString seed READ getSeed) Q_PROPERTY(QString seedLanguage READ getSeedLanguage) Q_PROPERTY(Status status READ status) @@ -100,7 +101,8 @@ public: enum ConnectionStatus { ConnectionStatus_Connected = Monero::Wallet::ConnectionStatus_Connected, ConnectionStatus_Disconnected = Monero::Wallet::ConnectionStatus_Disconnected, - ConnectionStatus_WrongVersion = Monero::Wallet::ConnectionStatus_WrongVersion + ConnectionStatus_WrongVersion = Monero::Wallet::ConnectionStatus_WrongVersion, + ConnectionStatus_Connecting }; Q_ENUM(ConnectionStatus) @@ -368,6 +370,7 @@ signals: void connectionStatusChanged(int status) const; void currentSubaddressAccountChanged() const; + void disconnectedChanged() const; private: Wallet(QObject * parent = nullptr); @@ -387,6 +390,9 @@ private: //! initializes wallet bool init(const QString &daemonAddress, bool trustedDaemon, quint64 upperTransactionLimit, bool isRecovering, bool isRecoveringFromDevice, quint64 restoreHeight); + bool disconnected() const; + void setConnectionStatus(ConnectionStatus value); + private: friend class WalletManager; friend class WalletListenerImpl; @@ -409,6 +415,7 @@ private: mutable ConnectionStatus m_connectionStatus; int m_connectionStatusTtl; mutable QTime m_connectionStatusTime; + bool m_disconnected; mutable bool m_initialized; uint32_t m_currentSubaddressAccount; Subaddress * m_subaddress; |
