aboutsummaryrefslogtreecommitdiff
path: root/src/daemon
diff options
context:
space:
mode:
authorJaquee <jaquee.monero@gmail.com>2017-05-04 14:04:46 +0200
committerJaquee <jaquee.monero@gmail.com>2017-06-02 23:39:30 +0200
commit9037eed80574544ece21a5cddad5ccf0f07c7773 (patch)
tree740d2851872415ea0d2ca26613bd1c791ff9f243 /src/daemon
parent0cb69002957c2e69850a2a32f920958996b62c3e (diff)
downloadmonzero-gui-9037eed80574544ece21a5cddad5ccf0f07c7773.tar.gz
monzero-gui-9037eed80574544ece21a5cddad5ccf0f07c7773.tar.xz
monzero-gui-9037eed80574544ece21a5cddad5ccf0f07c7773.zip
DaemonManager: support dataDir parameter + validator
Diffstat (limited to 'src/daemon')
-rw-r--r--src/daemon/DaemonManager.cpp55
-rw-r--r--src/daemon/DaemonManager.h4
2 files changed, 57 insertions, 2 deletions
diff --git a/src/daemon/DaemonManager.cpp b/src/daemon/DaemonManager.cpp
index 5d95b26b..58002014 100644
--- a/src/daemon/DaemonManager.cpp
+++ b/src/daemon/DaemonManager.cpp
@@ -8,6 +8,10 @@
#include <QApplication>
#include <QProcess>
#include <QTime>
+#include <QStorageInfo>
+#include <QVariantMap>
+#include <QVariant>
+#include <QMap>
namespace {
static const int DAEMON_START_TIMEOUT_SECONDS = 30;
@@ -28,7 +32,7 @@ DaemonManager *DaemonManager::instance(const QStringList *args)
return m_instance;
}
-bool DaemonManager::start(const QString &flags, bool testnet)
+bool DaemonManager::start(const QString &flags, bool testnet, const QString &dataDir)
{
// prepare command line arguments and pass to monerod
QStringList arguments;
@@ -54,8 +58,19 @@ bool DaemonManager::start(const QString &flags, bool testnet)
arguments << str;
}
+ // Custom data-dir
+ if(!dataDir.isEmpty()) {
+ if(testnet)
+ arguments << "--testnet-data-dir";
+ else
+ arguments << "--data-dir";
+ arguments << dataDir;
+ }
+
arguments << "--check-updates" << "disabled";
+
+
qDebug() << "starting monerod " + m_monerod;
qDebug() << "With command line arguments " << arguments;
@@ -236,6 +251,44 @@ void DaemonManager::exit()
m_app_exit = true;
}
+QVariantMap DaemonManager::validateDataDir(const QString &dataDir) const
+{
+ QVariantMap result;
+ bool valid = true;
+ bool readOnly = false;
+ int storageAvailable = 0;
+ bool lmdbExists = true;
+
+ QStorageInfo storage(dataDir);
+ if (storage.isValid() && storage.isReady()) {
+ if (storage.isReadOnly()) {
+ readOnly = true;
+ valid = false;
+ }
+
+ // Make sure there is 20GB storage available
+ storageAvailable = storage.bytesAvailable()/1000/1000/1000;
+ if (storageAvailable < 20) {
+ valid = false;
+ }
+ } else {
+ valid = false;
+ }
+
+
+ if (!QDir(dataDir+"/lmdb").exists()) {
+ lmdbExists = false;
+ valid = false;
+ }
+
+ result.insert("valid", valid);
+ result.insert("lmdbExists", lmdbExists);
+ result.insert("readOnly", readOnly);
+ result.insert("storageAvailable", storageAvailable);
+
+ return result;
+}
+
DaemonManager::DaemonManager(QObject *parent)
: QObject(parent)
{
diff --git a/src/daemon/DaemonManager.h b/src/daemon/DaemonManager.h
index 428630e1..2b9c8b84 100644
--- a/src/daemon/DaemonManager.h
+++ b/src/daemon/DaemonManager.h
@@ -4,6 +4,7 @@
#include <QObject>
#include <QUrl>
#include <QProcess>
+#include <QVariantMap>
class DaemonManager : public QObject
{
@@ -13,7 +14,7 @@ public:
static DaemonManager * instance(const QStringList *args);
- Q_INVOKABLE bool start(const QString &flags, bool testnet);
+ Q_INVOKABLE bool start(const QString &flags, bool testnet, const QString &dataDir = "");
Q_INVOKABLE bool stop(bool testnet);
// return true if daemon process is started
@@ -21,6 +22,7 @@ public:
// Send daemon command from qml and prints output in console window.
Q_INVOKABLE bool sendCommand(const QString &cmd, bool testnet) const;
Q_INVOKABLE void exit();
+ Q_INVOKABLE QVariantMap validateDataDir(const QString &dataDir) const;
private: