DaemonManager: support dataDir parameter + validator

pull/2/head
Jaquee 7 years ago
parent 0cb6900295
commit 9037eed805

@ -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)
{

@ -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: