aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaquee <jaquee.monero@gmail.com>2017-02-25 20:25:16 +0100
committerJaquee <jaquee.monero@gmail.com>2017-02-25 20:25:16 +0100
commit80210376f3fb80116f4592dd206247bf82fd7edc (patch)
treea7b5305b61d1fbbedd3eaef9988080f52322d557
parentdf60c8190bf2da1ffca6660392158fe8ee520cd6 (diff)
downloadmonzero-gui-80210376f3fb80116f4592dd206247bf82fd7edc.tar.gz
monzero-gui-80210376f3fb80116f4592dd206247bf82fd7edc.tar.xz
monzero-gui-80210376f3fb80116f4592dd206247bf82fd7edc.zip
pause refresh while starting daemon + startup timeout
-rw-r--r--main.qml19
-rw-r--r--src/daemon/DaemonManager.cpp26
-rw-r--r--src/daemon/DaemonManager.h1
3 files changed, 40 insertions, 6 deletions
diff --git a/main.qml b/main.qml
index 553c9521..8b7c079d 100644
--- a/main.qml
+++ b/main.qml
@@ -380,6 +380,9 @@ ApplicationWindow {
}
function startDaemon(flags){
+ // Pause refresh while starting daemon
+ currentWallet.pauseRefresh();
+
appWindow.showProcessingSplash(qsTr("Waiting for daemon to start..."))
daemonManager.start(flags, persistentSettings.testnet);
persistentSettings.daemonFlags = flags
@@ -395,6 +398,8 @@ ApplicationWindow {
daemonRunning = true;
hideProcessingSplash();
currentWallet.connected(true);
+ // resume refresh
+ currentWallet.startRefresh();
}
function onDaemonStopped(){
console.log("daemon stopped");
@@ -403,6 +408,19 @@ ApplicationWindow {
currentWallet.connected(true);
}
+ function onDaemonStartFailure(){
+ console.log("daemon start failed");
+ hideProcessingSplash();
+ // resume refresh
+ currentWallet.startRefresh();
+ daemonRunning = false;
+ informationPopup.title = qsTr("Daemon failed to start") + translationManager.emptyString;
+ informationPopup.text = qsTr("Please check your wallet and daemon log for errors. You can also try to start %1 manually.").arg((isWindows)? "monerod.exe" : "monerod")
+ informationPopup.icon = StandardIcon.Critical
+ informationPopup.onCloseCallback = null
+ informationPopup.open();
+ }
+
function onWalletNewBlock(blockHeight, targetHeight) {
// Update progress bar
leftPanel.progressBar.updateProgress(blockHeight,targetHeight);
@@ -760,6 +778,7 @@ ApplicationWindow {
walletManager.walletClosed.connect(onWalletClosed);
daemonManager.daemonStarted.connect(onDaemonStarted);
+ daemonManager.daemonStartFailure.connect(onDaemonStartFailure);
daemonManager.daemonStopped.connect(onDaemonStopped);
if(!walletsFound()) {
diff --git a/src/daemon/DaemonManager.cpp b/src/daemon/DaemonManager.cpp
index 855058eb..47ad10cf 100644
--- a/src/daemon/DaemonManager.cpp
+++ b/src/daemon/DaemonManager.cpp
@@ -7,6 +7,11 @@
#include <QtConcurrent/QtConcurrent>
#include <QApplication>
#include <QProcess>
+#include <QTime>
+
+namespace {
+ static const int DAEMON_START_TIMEOUT_SECONDS = 30;
+}
DaemonManager * DaemonManager::m_instance = nullptr;
QStringList DaemonManager::m_clArgs;
@@ -67,8 +72,11 @@ bool DaemonManager::start(const QString &flags, bool testnet)
// add state changed listener
connect(m_daemon,SIGNAL(stateChanged(QProcess::ProcessState)),this,SLOT(stateChanged(QProcess::ProcessState)));
- if (!started)
+ if (!started) {
qDebug() << "Daemon start error: " + m_daemon->errorString();
+ emit daemonStartFailure();
+ return false;
+ }
// Start start watcher
QFuture<bool> future = QtConcurrent::run(this, &DaemonManager::startWatcher, testnet);
@@ -77,14 +85,15 @@ bool DaemonManager::start(const QString &flags, bool testnet)
this, [this, watcher]() {
QFuture<bool> future = watcher->future();
watcher->deleteLater();
- if(future.result()) {
+ if(future.result())
emit daemonStarted();
- }
+ else
+ emit daemonStartFailure();
});
watcher->setFuture(future);
- return started;
+ return true;
}
bool DaemonManager::stop(bool testnet)
@@ -112,12 +121,17 @@ bool DaemonManager::stop(bool testnet)
bool DaemonManager::startWatcher(bool testnet) const
{
// Check if daemon is started every 2 seconds
- while(true && !m_app_exit) {
+ QTime timer;
+ timer.restart();
+ while(true && !m_app_exit && timer.elapsed() / 1000 < DAEMON_START_TIMEOUT_SECONDS ) {
QThread::sleep(2);
if(!running(testnet)) {
qDebug() << "daemon not running. checking again in 2 seconds.";
- } else
+ } else {
+ qDebug() << "daemon is started. Waiting 5 seconds to let daemon catch up";
+ QThread::sleep(5);
return true;
+ }
}
return false;
}
diff --git a/src/daemon/DaemonManager.h b/src/daemon/DaemonManager.h
index b45b369f..428630e1 100644
--- a/src/daemon/DaemonManager.h
+++ b/src/daemon/DaemonManager.h
@@ -30,6 +30,7 @@ private:
signals:
void daemonStarted() const;
void daemonStopped() const;
+ void daemonStartFailure() const;
void daemonConsoleUpdated(QString message) const;
public slots: