From 32257c8fab83cab89811111284cdca8bf5e9dbac Mon Sep 17 00:00:00 2001 From: xiphon Date: Fri, 27 Sep 2019 10:56:42 +0000 Subject: [PATCH] DaemonManager: implement async sendCommand --- components/DaemonConsole.qml | 6 +++++- pages/settings/SettingsLog.qml | 6 +++++- src/daemon/DaemonManager.cpp | 23 ++++++++++++----------- src/daemon/DaemonManager.h | 4 ++-- 4 files changed, 24 insertions(+), 15 deletions(-) diff --git a/components/DaemonConsole.qml b/components/DaemonConsole.qml index 0138473b..20e14fe4 100644 --- a/components/DaemonConsole.qml +++ b/components/DaemonConsole.qml @@ -178,7 +178,11 @@ Window { onAccepted: { if(text.length > 0) { textArea.logCommand(">>> " + text) - daemonManager.sendCommand(text, currentWallet.nettype); + daemonManager.sendCommandAsync(text.split(" "), currentWallet.nettype, function(result) { + if (!result) { + appWindow.showStatusMessage(qsTr("Failed to send command"), 3); + } + }); } text = "" } diff --git a/pages/settings/SettingsLog.qml b/pages/settings/SettingsLog.qml index eccd79b6..05101376 100644 --- a/pages/settings/SettingsLog.qml +++ b/pages/settings/SettingsLog.qml @@ -216,7 +216,11 @@ Rectangle { onAccepted: { if(text.length > 0) { consoleArea.logCommand(">>> " + text) - daemonManager.sendCommand(text, currentWallet.nettype); + daemonManager.sendCommandAsync(text.split(" "), currentWallet.nettype, function(result) { + if (!result) { + appWindow.showStatusMessage(qsTr("Failed to send command"), 3); + } + }); } text = "" } diff --git a/src/daemon/DaemonManager.cpp b/src/daemon/DaemonManager.cpp index 0d311535..baabffb4 100644 --- a/src/daemon/DaemonManager.cpp +++ b/src/daemon/DaemonManager.cpp @@ -150,7 +150,7 @@ bool DaemonManager::start(const QString &flags, NetworkType::Type nettype, const bool DaemonManager::stop(NetworkType::Type nettype) { QString message; - sendCommand("exit", nettype, message); + sendCommand({"exit"}, nettype, message); qDebug() << message; // Start stop watcher - Will kill if not shutting down @@ -240,7 +240,7 @@ void DaemonManager::printError() bool DaemonManager::running(NetworkType::Type nettype) const { QString status; - sendCommand("sync_info", nettype, status); + sendCommand({"sync_info"}, nettype, status); qDebug() << status; return status.contains("Height:"); } @@ -257,17 +257,10 @@ void DaemonManager::runningAsync(NetworkType::Type nettype, const QJSValue& call }, callback); } -bool DaemonManager::sendCommand(const QString &cmd, NetworkType::Type nettype) const -{ - QString message; - return sendCommand(cmd, nettype, message); -} - -bool DaemonManager::sendCommand(const QString &cmd, NetworkType::Type nettype, QString &message) const +bool DaemonManager::sendCommand(const QStringList &cmd, NetworkType::Type nettype, QString &message) const { QProcess p; - QStringList external_cmd; - external_cmd << cmd; + QStringList external_cmd(cmd); // Add network type flag if needed if (nettype == NetworkType::TESTNET) @@ -286,6 +279,14 @@ bool DaemonManager::sendCommand(const QString &cmd, NetworkType::Type nettype, Q return started; } +void DaemonManager::sendCommandAsync(const QStringList &cmd, NetworkType::Type nettype, const QJSValue& callback) const +{ + m_scheduler.run([this, cmd, nettype] { + QString message; + return QJSValueList({sendCommand(cmd, nettype, message)}); + }, callback); +} + void DaemonManager::exit() { qDebug("DaemonManager: exit()"); diff --git a/src/daemon/DaemonManager.h b/src/daemon/DaemonManager.h index 0df97c63..a03d3d9b 100644 --- a/src/daemon/DaemonManager.h +++ b/src/daemon/DaemonManager.h @@ -51,14 +51,14 @@ public: // return true if daemon process is started 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 sendCommandAsync(const QStringList &cmd, NetworkType::Type nettype, const QJSValue& callback) const; Q_INVOKABLE void exit(); Q_INVOKABLE QVariantMap validateDataDir(const QString &dataDir) const; private: bool running(NetworkType::Type nettype) const; - bool sendCommand(const QString &cmd, NetworkType::Type nettype, QString &message) const; + bool sendCommand(const QStringList &cmd, NetworkType::Type nettype, QString &message) const; bool startWatcher(NetworkType::Type nettype) const; bool stopWatcher(NetworkType::Type nettype) const; signals: