aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorxiphon <xiphon@protonmail.com>2020-01-28 04:43:31 +0000
committerxiphon <xiphon@protonmail.com>2020-01-28 05:11:29 +0000
commit6940390a5e0f07914695a11a12dd12b0cff395f1 (patch)
tree7ae8c44c1a1c856b5d24ebe751066d9e550cd81b /src
parent6de8547047d5801181b61cbbc707a44a4ee5e77b (diff)
downloadmonzero-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.cpp48
-rw-r--r--src/libwalletqt/Wallet.h9
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;