diff options
| -rw-r--r-- | Dockerfile.android | 10 | ||||
| -rw-r--r-- | components/NetworkStatusItem.qml | 1 | ||||
| -rw-r--r-- | main.qml | 8 | ||||
| -rw-r--r-- | pages/Advanced.qml | 5 | ||||
| -rw-r--r-- | pages/Mining.qml | 2 | ||||
| -rw-r--r-- | pages/settings/Settings.qml | 1 | ||||
| -rw-r--r-- | pages/settings/SettingsLog.qml | 2 | ||||
| -rw-r--r-- | pages/settings/SettingsNode.qml | 1 | ||||
| -rw-r--r-- | src/daemon/DaemonManager.cpp | 43 | ||||
| -rw-r--r-- | src/daemon/DaemonManager.h | 14 | ||||
| -rw-r--r-- | wizard/WizardModeSelection.qml | 2 |
11 files changed, 54 insertions, 35 deletions
diff --git a/Dockerfile.android b/Dockerfile.android index b077fb3f..3ea401d7 100644 --- a/Dockerfile.android +++ b/Dockerfile.android @@ -206,6 +206,16 @@ RUN git clone -b v3.24.2 --depth 1 https://github.com/Kitware/CMake \ && PATH=${HOST_PATH} make -j${THREADS} install \ && rm -rf $(pwd) +RUN GRADLE_VERSION=5.6.4 \ + && GRADLE_HASH=1f3067073041bc44554d0efe5d402a33bc3d3c93cc39ab684f308586d732a80d \ + && wget -q https\://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip \ + && echo "${GRADLE_HASH} gradle-${GRADLE_VERSION}-bin.zip" | sha256sum -c \ + && GRADLE_LOCAL_PATH=gradle/wrapper/dists/gradle-${GRADLE_VERSION}-bin/bxirm19lnfz6nurbatndyydux \ + && mkdir -p ${GRADLE_LOCAL_PATH} \ + && mv gradle-${GRADLE_VERSION}-bin.zip ${GRADLE_LOCAL_PATH} + +ENV GRADLE_USER_HOME=${WORKDIR}/gradle + CMD set -ex \ && cd /monero-gui \ && mkdir -p build/Android/release \ diff --git a/components/NetworkStatusItem.qml b/components/NetworkStatusItem.qml index 48eeccc2..46e9fbd6 100644 --- a/components/NetworkStatusItem.qml +++ b/components/NetworkStatusItem.qml @@ -201,6 +201,7 @@ Rectangle { daemonManager.sendCommandAsync( ["set_bootstrap_daemon", "auto"], appWindow.currentWallet.nettype, + persistentSettings.blockchainDataDir, callback); refreshMouseArea.visible = false; @@ -469,7 +469,7 @@ ApplicationWindow { // If wallet isnt connected, advanced wallet mode and no daemon is running - Ask if (appWindow.walletMode >= 2 && !persistentSettings.useRemoteNode && !walletInitialized && disconnected) { - daemonManager.runningAsync(persistentSettings.nettype, function(running) { + daemonManager.runningAsync(persistentSettings.nettype, persistentSettings.blockchainDataDir, function(running) { if (!running) { daemonManagerDialog.open(); } @@ -714,7 +714,7 @@ ApplicationWindow { appWindow.showProcessingSplash(qsTr("Waiting for daemon to stop...")); } p2poolManager.exit() - daemonManager.stopAsync(persistentSettings.nettype, function(result) { + daemonManager.stopAsync(persistentSettings.nettype, persistentSettings.blockchainDataDir, function(result) { daemonStartStopInProgress = 0; if (splash) { hideProcessingSplash(); @@ -1395,7 +1395,7 @@ ApplicationWindow { property bool historyShowAdvanced: false property bool historyHumanDates: true property string blockchainDataDir: "" - property bool useRemoteNode: false + property bool useRemoteNode: isAndroid property string remoteNodeAddress: "" // TODO: drop after v0.17.2.0 release property string remoteNodesSerialized: JSON.stringify({ selected: 0, @@ -2141,7 +2141,7 @@ ApplicationWindow { if (currentWallet) { handler(!currentWallet.disconnected); } else { - daemonManager.runningAsync(persistentSettings.nettype, handler); + daemonManager.runningAsync(persistentSettings.nettype, persistentSettings.blockchainDataDir, handler); } } } diff --git a/pages/Advanced.qml b/pages/Advanced.qml index 6aa8ac46..e41390db 100644 --- a/pages/Advanced.qml +++ b/pages/Advanced.qml @@ -52,6 +52,7 @@ ColumnLayout { active: state == "Mining" text: qsTr("Mining") + translationManager.emptyString onSelected: state = "Mining" + visible: !isAndroid } MoneroComponents.NavbarItem { active: state == "Prove" @@ -81,7 +82,7 @@ ColumnLayout { Layout.fillWidth: true Layout.preferredHeight: panelHeight color: "transparent" - state: "Mining" + state: isAndroid ? "Prove" : "Mining" onCurrentViewChanged: { if (previousView) { @@ -120,7 +121,7 @@ ColumnLayout { StackView { id: stackView - initialItem: stateView.miningView + initialItem: isAndroid ? stateView.prooveView : stateView.miningView anchors.fill: parent clip: false // otherwise animation will affect left panel diff --git a/pages/Mining.qml b/pages/Mining.qml index 8d5a2522..e9ab1d07 100644 --- a/pages/Mining.qml +++ b/pages/Mining.qml @@ -297,7 +297,7 @@ Rectangle { startP2Pool() } else { - daemonManager.stopAsync(persistentSettings.nettype, startP2PoolLocal) + daemonManager.stopAsync(persistentSettings.nettype, persistentSettings.blockchainDataDir, startP2PoolLocal) } } else { diff --git a/pages/settings/Settings.qml b/pages/settings/Settings.qml index fdf03ce6..414b61a1 100644 --- a/pages/settings/Settings.qml +++ b/pages/settings/Settings.qml @@ -74,6 +74,7 @@ ColumnLayout { active: settingsStateView.state == "Log" text: qsTr("Log") + translationManager.emptyString onSelected: settingsStateView.state = "Log" + visible: !isAndroid } MoneroComponents.NavbarItem { active: settingsStateView.state == "Info" diff --git a/pages/settings/SettingsLog.qml b/pages/settings/SettingsLog.qml index 4c393ee9..d11201b0 100644 --- a/pages/settings/SettingsLog.qml +++ b/pages/settings/SettingsLog.qml @@ -254,7 +254,7 @@ Rectangle { onAccepted: { if(text.length > 0) { consoleArea.logCommand(">>> " + text) - daemonManager.sendCommandAsync(text.split(" "), currentWallet.nettype, function(result) { + daemonManager.sendCommandAsync(text.split(" "), currentWallet.nettype, persistentSettings.blockchainDataDir, function(result) { if (!result) { appWindow.showStatusMessage(qsTr("Failed to send command"), 3); } diff --git a/pages/settings/SettingsNode.qml b/pages/settings/SettingsNode.qml index ab3d49f1..e0ae009a 100644 --- a/pages/settings/SettingsNode.qml +++ b/pages/settings/SettingsNode.qml @@ -55,6 +55,7 @@ Rectangle{ Layout.fillWidth: true Layout.preferredHeight: 90 color: "transparent" + visible: !isAndroid Rectangle { id: localNodeDivider diff --git a/src/daemon/DaemonManager.cpp b/src/daemon/DaemonManager.cpp index ad8bab16..6a5a8233 100644 --- a/src/daemon/DaemonManager.cpp +++ b/src/daemon/DaemonManager.cpp @@ -130,8 +130,8 @@ bool DaemonManager::start(const QString &flags, NetworkType::Type nettype, const } // Start start watcher - m_scheduler.run([this, nettype, noSync] { - if (startWatcher(nettype)) { + m_scheduler.run([this, nettype, dataDir, noSync] { + if (startWatcher(nettype, dataDir)) { emit daemonStarted(); m_noSync = noSync; } else { @@ -142,13 +142,13 @@ bool DaemonManager::start(const QString &flags, NetworkType::Type nettype, const return true; } -void DaemonManager::stopAsync(NetworkType::Type nettype, const QJSValue& callback) +void DaemonManager::stopAsync(NetworkType::Type nettype, const QString &dataDir, const QJSValue& callback) { - const auto feature = m_scheduler.run([this, nettype] { + const auto feature = m_scheduler.run([this, nettype, dataDir] { QString message; - sendCommand({"exit"}, nettype, message); + sendCommand({"exit"}, nettype, dataDir, message); - return QJSValueList({stopWatcher(nettype)}); + return QJSValueList({stopWatcher(nettype, dataDir)}); }, callback); if (!feature.first) @@ -157,14 +157,14 @@ void DaemonManager::stopAsync(NetworkType::Type nettype, const QJSValue& callbac } } -bool DaemonManager::startWatcher(NetworkType::Type nettype) const +bool DaemonManager::startWatcher(NetworkType::Type nettype, const QString &dataDir) const { // Check if daemon is started every 2 seconds QElapsedTimer timer; timer.start(); while(true && !m_app_exit && timer.elapsed() / 1000 < DAEMON_START_TIMEOUT_SECONDS ) { QThread::sleep(2); - if(!running(nettype)) { + if(!running(nettype, dataDir)) { qDebug() << "daemon not running. checking again in 2 seconds."; } else { qDebug() << "daemon is started. Waiting 5 seconds to let daemon catch up"; @@ -175,14 +175,14 @@ bool DaemonManager::startWatcher(NetworkType::Type nettype) const return false; } -bool DaemonManager::stopWatcher(NetworkType::Type nettype) const +bool DaemonManager::stopWatcher(NetworkType::Type nettype, const QString &dataDir) const { // Check if daemon is running every 2 seconds. Kill if still running after 10 seconds int counter = 0; while(true && !m_app_exit) { QThread::sleep(2); counter++; - if(running(nettype)) { + if(running(nettype, dataDir)) { qDebug() << "Daemon still running. " << counter; if(counter >= 5) { qDebug() << "Killing it! "; @@ -236,10 +236,10 @@ void DaemonManager::printError() } } -bool DaemonManager::running(NetworkType::Type nettype) const +bool DaemonManager::running(NetworkType::Type nettype, const QString &dataDir) const { QString status; - sendCommand({"sync_info"}, nettype, status); + sendCommand({"sync_info"}, nettype, dataDir, status); qDebug() << status; return status.contains("Height:"); } @@ -249,14 +249,14 @@ bool DaemonManager::noSync() const noexcept return m_noSync; } -void DaemonManager::runningAsync(NetworkType::Type nettype, const QJSValue& callback) const +void DaemonManager::runningAsync(NetworkType::Type nettype, const QString &dataDir, const QJSValue& callback) const { - m_scheduler.run([this, nettype] { - return QJSValueList({running(nettype)}); + m_scheduler.run([this, nettype, dataDir] { + return QJSValueList({running(nettype, dataDir)}); }, callback); } -bool DaemonManager::sendCommand(const QStringList &cmd, NetworkType::Type nettype, QString &message) const +bool DaemonManager::sendCommand(const QStringList &cmd, NetworkType::Type nettype, const QString &dataDir, QString &message) const { QProcess p; QStringList external_cmd(cmd); @@ -267,6 +267,11 @@ bool DaemonManager::sendCommand(const QStringList &cmd, NetworkType::Type nettyp else if (nettype == NetworkType::STAGENET) external_cmd << "--stagenet"; + // Custom data-dir + if (!dataDir.isEmpty()) { + external_cmd << "--data-dir" << dataDir; + } + qDebug() << "sending external cmd: " << external_cmd; @@ -278,11 +283,11 @@ bool DaemonManager::sendCommand(const QStringList &cmd, NetworkType::Type nettyp return started; } -void DaemonManager::sendCommandAsync(const QStringList &cmd, NetworkType::Type nettype, const QJSValue& callback) const +void DaemonManager::sendCommandAsync(const QStringList &cmd, NetworkType::Type nettype, const QString &dataDir, const QJSValue& callback) const { - m_scheduler.run([this, cmd, nettype] { + m_scheduler.run([this, cmd, nettype, dataDir] { QString message; - return QJSValueList({sendCommand(cmd, nettype, message)}); + return QJSValueList({sendCommand(cmd, nettype, dataDir, message)}); }, callback); } diff --git a/src/daemon/DaemonManager.h b/src/daemon/DaemonManager.h index 2f884665..5a48a489 100644 --- a/src/daemon/DaemonManager.h +++ b/src/daemon/DaemonManager.h @@ -48,23 +48,23 @@ public: ~DaemonManager(); Q_INVOKABLE bool start(const QString &flags, NetworkType::Type nettype, const QString &dataDir = "", const QString &bootstrapNodeAddress = "", bool noSync = false, bool pruneBlockchain = false); - Q_INVOKABLE void stopAsync(NetworkType::Type nettype, const QJSValue& callback); + Q_INVOKABLE void stopAsync(NetworkType::Type nettype, const QString &dataDir, const QJSValue& callback); Q_INVOKABLE bool noSync() const noexcept; // return true if daemon process is started - Q_INVOKABLE void runningAsync(NetworkType::Type nettype, const QJSValue& callback) const; + Q_INVOKABLE void runningAsync(NetworkType::Type nettype, const QString &dataDir, const QJSValue& callback) const; // Send daemon command from qml and prints output in console window. - Q_INVOKABLE void sendCommandAsync(const QStringList &cmd, NetworkType::Type nettype, const QJSValue& callback) const; + Q_INVOKABLE void sendCommandAsync(const QStringList &cmd, NetworkType::Type nettype, const QString &dataDir, const QJSValue& callback) const; Q_INVOKABLE void exit(); Q_INVOKABLE QVariantMap validateDataDir(const QString &dataDir) const; Q_INVOKABLE bool checkLmdbExists(QString datadir); private: - bool running(NetworkType::Type nettype) const; - bool sendCommand(const QStringList &cmd, NetworkType::Type nettype, QString &message) const; - bool startWatcher(NetworkType::Type nettype) const; - bool stopWatcher(NetworkType::Type nettype) const; + bool running(NetworkType::Type nettype, const QString &dataDir) const; + bool sendCommand(const QStringList &cmd, NetworkType::Type nettype, const QString &dataDir, QString &message) const; + bool startWatcher(NetworkType::Type nettype, const QString &dataDir) const; + bool stopWatcher(NetworkType::Type nettype, const QString &dataDir) const; signals: void daemonStarted() const; void daemonStopped() const; diff --git a/wizard/WizardModeSelection.qml b/wizard/WizardModeSelection.qml index 5411735c..eb6b36d4 100644 --- a/wizard/WizardModeSelection.qml +++ b/wizard/WizardModeSelection.qml @@ -41,7 +41,7 @@ Rectangle { property alias pageHeight: pageRoot.height property string viewName: "wizardModeSelection1" property bool portable: persistentSettings.portable - property bool simpleModeAvailable: !isTails && appWindow.persistentSettings.nettype == 0 + property bool simpleModeAvailable: !isTails && appWindow.persistentSettings.nettype == 0 && !isAndroid function applyWalletMode(mode, wizardState) { if (!persistentSettings.setPortable(portable)) { |
