diff options
| author | j-berman <justinberman@protonmail.com> | 2022-09-21 21:56:55 -0600 |
|---|---|---|
| committer | j-berman <justinberman@protonmail.com> | 2022-09-21 21:56:55 -0600 |
| commit | 6f2aafdd6c89743d6ddab0ce74b26e55f20b27ec (patch) | |
| tree | c9c48324ddb54a68492b56bc1ec137c5b268f03c /src/libwalletqt/Wallet.cpp | |
| parent | 57fefba3864502a48095df4b34fc38df06fcca4d (diff) | |
| download | monzero-gui-6f2aafdd6c89743d6ddab0ce74b26e55f20b27ec.tar.gz monzero-gui-6f2aafdd6c89743d6ddab0ce74b26e55f20b27ec.tar.xz monzero-gui-6f2aafdd6c89743d6ddab0ce74b26e55f20b27ec.zip | |
Fix behavior when switching nodes
- Improved synchronization when switching nodes
- Avoid infinite "Connecting" loop
- Pause refresh loop while switching, don't start until connected
Diffstat (limited to 'src/libwalletqt/Wallet.cpp')
| -rw-r--r-- | src/libwalletqt/Wallet.cpp | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/src/libwalletqt/Wallet.cpp b/src/libwalletqt/Wallet.cpp index 14d2eab2..26b5e3ec 100644 --- a/src/libwalletqt/Wallet.cpp +++ b/src/libwalletqt/Wallet.cpp @@ -101,20 +101,30 @@ NetworkType::Type Wallet::nettype() const void Wallet::updateConnectionStatusAsync() { m_scheduler.run([this] { + qDebug() << "updateConnectionStatusAsync current status:" << m_connectionStatus; if (m_connectionStatus == Wallet::ConnectionStatus_Disconnected) { setConnectionStatus(ConnectionStatus_Connecting); } ConnectionStatus newStatus = static_cast<ConnectionStatus>(m_walletImpl->connected()); - setConnectionStatus(newStatus); + qDebug() << "Newest wallet status:" << newStatus; + if (m_connectionStatus != newStatus) + { + setConnectionStatus(newStatus); + if (newStatus == ConnectionStatus_Connected) + { + startRefresh(); + } + } // Release lock m_connectionStatusRunning = false; + m_connectionStatusTime.restart(); }); } Wallet::ConnectionStatus Wallet::connected(bool forceCheck) { - if (!m_initialized) + if (!m_initialized || m_initializing) { return ConnectionStatus_Connecting; } @@ -123,7 +133,6 @@ Wallet::ConnectionStatus Wallet::connected(bool forceCheck) if (forceCheck || (m_connectionStatusTime.elapsed() / 1000 > m_connectionStatusTtl && !m_connectionStatusRunning) || m_connectionStatusTime.elapsed() > 30000) { qDebug() << "Checking connection status"; m_connectionStatusRunning = true; - m_connectionStatusTime.restart(); updateConnectionStatusAsync(); } @@ -156,10 +165,9 @@ void Wallet::setConnectionStatus(ConnectionStatus value) } m_connectionStatus = value; - emit connectionStatusChanged(m_connectionStatus); + emit connectionStatusChanged(value); - bool disconnected = m_connectionStatus == Wallet::ConnectionStatus_Connecting || - m_connectionStatus == Wallet::ConnectionStatus_Disconnected; + bool disconnected = value != Wallet::ConnectionStatus_Connected; if (m_disconnected != disconnected) { @@ -280,6 +288,8 @@ void Wallet::initAsync( const QString &proxyAddress /* = "" */) { qDebug() << "initAsync: " + daemonAddress; + m_initializing = true; + pauseRefresh(); const auto future = m_scheduler.run([this, daemonAddress, trustedDaemon, upperTransactionLimit, isRecovering, isRecoveringFromDevice, restoreHeight, proxyAddress] { m_initialized = init( daemonAddress, @@ -289,12 +299,12 @@ void Wallet::initAsync( isRecoveringFromDevice, restoreHeight, proxyAddress); + m_initializing = false; if (m_initialized) { emit walletCreationHeightChanged(); - qDebug() << "init async finished - starting refresh"; + qDebug() << "init async finished: " + daemonAddress; connected(true); - startRefresh(); } else { @@ -544,12 +554,14 @@ bool Wallet::refresh(bool historyAndSubaddresses /* = true */) void Wallet::startRefresh() { + qDebug() << "Starting refresh"; m_refreshEnabled = true; m_refreshNow = true; } void Wallet::pauseRefresh() { + qDebug() << "Pausing refresh"; m_refreshEnabled = false; } @@ -1138,6 +1150,7 @@ Wallet::Wallet(Monero::Wallet *w, QObject *parent) , m_connectionStatusTtl(WALLET_CONNECTION_STATUS_CACHE_TTL_SECONDS) , m_disconnected(true) , m_initialized(false) + , m_initializing(false) , m_currentSubaddressAccount(0) , m_subaddress(new Subaddress(m_walletImpl->subaddress(), this)) , m_subaddressModel(nullptr) |
