diff options
| author | xiphon <xiphon@protonmail.com> | 2019-08-13 12:21:47 +0000 |
|---|---|---|
| committer | xiphon <xiphon@protonmail.com> | 2019-08-13 12:21:47 +0000 |
| commit | a01ffc6e1ae24dfbabaa640d65208140fa281dbf (patch) | |
| tree | 39bc0c9aa9aa2c3629663577fff16b47cf7503f5 | |
| parent | 55b4425c5db5d25e72dc9089d9ec5aac4f2c5ddf (diff) | |
| download | monzero-gui-a01ffc6e1ae24dfbabaa640d65208140fa281dbf.tar.gz monzero-gui-a01ffc6e1ae24dfbabaa640d65208140fa281dbf.tar.xz monzero-gui-a01ffc6e1ae24dfbabaa640d65208140fa281dbf.zip | |
daemon: async daemon status check, don't freeze on wallet startup
| -rw-r--r-- | main.qml | 8 | ||||
| -rw-r--r-- | src/daemon/DaemonManager.cpp | 8 | ||||
| -rw-r--r-- | src/daemon/DaemonManager.h | 5 |
3 files changed, 17 insertions, 4 deletions
@@ -486,8 +486,12 @@ ApplicationWindow { middlePanel.transferView.updatePriorityDropdown(); // If wallet isnt connected, advanced wallet mode and no daemon is running - Ask - if(!isMobile && appWindow.walletMode >= 2 && walletManager.isDaemonLocal(currentDaemonAddress) && !walletInitialized && status === Wallet.ConnectionStatus_Disconnected && !daemonManager.running(persistentSettings.nettype)){ - daemonManagerDialog.open(); + if (!isMobile && appWindow.walletMode >= 2 && walletManager.isDaemonLocal(currentDaemonAddress) && !walletInitialized && status === Wallet.ConnectionStatus_Disconnected) { + daemonManager.runningAsync(persistentSettings.nettype, function(running) { + if (!running) { + daemonManagerDialog.open(); + } + }); } // initialize transaction history once wallet is initialized first time; if (!walletInitialized) { diff --git a/src/daemon/DaemonManager.cpp b/src/daemon/DaemonManager.cpp index ecbe1784..4277e0bb 100644 --- a/src/daemon/DaemonManager.cpp +++ b/src/daemon/DaemonManager.cpp @@ -243,6 +243,14 @@ bool DaemonManager::running(NetworkType::Type nettype) const } return false; } + +void DaemonManager::runningAsync(NetworkType::Type nettype, const QJSValue& callback) const +{ + m_scheduler.run([this, nettype] { + return QJSValueList({running(nettype)}); + }, callback); +} + bool DaemonManager::sendCommand(const QString &cmd, NetworkType::Type nettype) const { QString message; diff --git a/src/daemon/DaemonManager.h b/src/daemon/DaemonManager.h index 6063c8cb..5a29ea64 100644 --- a/src/daemon/DaemonManager.h +++ b/src/daemon/DaemonManager.h @@ -48,7 +48,7 @@ public: Q_INVOKABLE bool stop(NetworkType::Type nettype); // return true if daemon process is started - Q_INVOKABLE bool running(NetworkType::Type nettype) const; + Q_INVOKABLE void runningAsync(NetworkType::Type nettype, const QJSValue& callback) const; // Send daemon command from qml and prints output in console window. Q_INVOKABLE bool sendCommand(const QString &cmd, NetworkType::Type nettype) const; Q_INVOKABLE void exit(); @@ -56,6 +56,7 @@ public: private: + bool running(NetworkType::Type nettype) const; bool sendCommand(const QString &cmd, NetworkType::Type nettype, QString &message) const; bool startWatcher(NetworkType::Type nettype) const; bool stopWatcher(NetworkType::Type nettype) const; @@ -82,7 +83,7 @@ private: bool m_has_daemon = true; bool m_app_exit = false; - FutureScheduler m_scheduler; + mutable FutureScheduler m_scheduler; }; #endif // DAEMONMANAGER_H |
