]> Nutra Git (v2) - gamesguru/feather.git/commitdiff
Settings: offline mode
authortobtoht <thotbot@protonmail.com>
Mon, 14 Mar 2022 21:36:58 +0000 (22:36 +0100)
committertobtoht <thotbot@protonmail.com>
Mon, 14 Mar 2022 21:36:58 +0000 (22:36 +0100)
13 files changed:
src/MainWindow.cpp
src/SettingsDialog.cpp
src/SettingsDialog.h
src/SettingsDialog.ui
src/WindowManager.cpp
src/dialog/DebugInfoDialog.cpp
src/libwalletqt/Wallet.cpp
src/libwalletqt/Wallet.h
src/utils/Utils.cpp
src/utils/config.cpp
src/utils/config.h
src/utils/networking.cpp
src/utils/nodes.cpp

index 82f818c61973134d47db237618583f6e35233957..52f7b4ae6c4540c7dbb4f5121733d52457d4c8ae 100644 (file)
@@ -451,8 +451,6 @@ void MainWindow::onWalletOpened() {
 
     this->bringToFront();
     this->setEnabled(true);
-    if (!torManager()->torConnected)
-        this->setStatusText("Starting Tor (may take a while)");
 
     // receive page
     m_ctx->wallet->subaddress()->refresh(m_ctx->wallet->currentSubaddressAccount());
index 42cb3a2d257d83c6930c91c769cd033ca07624dc..990e47a29df63e517f95f5f9a0cd319959300b0a 100644 (file)
@@ -9,6 +9,7 @@
 
 #include "Icons.h"
 #include "utils/WebsocketNotifier.h"
+#include "utils/NetworkManager.h"
 
 Settings::Settings(QSharedPointer<AppContext> ctx, QWidget *parent)
         : QDialog(parent)
@@ -48,13 +49,14 @@ Settings::Settings(QSharedPointer<AppContext> ctx, QWidget *parent)
     connect(ui->spinBox_inactivityLockTimeout, QOverload<int>::of(&QSpinBox::valueChanged), [](int value){
         config()->set(Config::inactivityLockTimeout, value);
     });
-    connect(ui->checkBox_disableWebsocket, &QCheckBox::toggled, [this](bool toggled){
-        config()->set(Config::disableWebsocket, toggled);
-        if (toggled) {
-            websocketNotifier()->websocketClient.stop();
-        } else {
-            websocketNotifier()->websocketClient.restart();
-        }
+    connect(ui->checkBox_disableWebsocket, &QCheckBox::toggled, [this](bool checked){
+        config()->set(Config::disableWebsocket, checked);
+        this->enableWebsocket(checked);
+    });
+    connect(ui->checkBox_offlineMode, &QCheckBox::toggled, [this](bool checked){
+        config()->set(Config::offlineMode, checked);
+        m_ctx->wallet->setOffline(checked);
+        this->enableWebsocket(checked);
     });
 
     connect(ui->closeButton, &QDialogButtonBox::accepted, this, &Settings::close);
@@ -72,6 +74,7 @@ Settings::Settings(QSharedPointer<AppContext> ctx, QWidget *parent)
     ui->checkBox_inactivityLockTimeout->setChecked(config()->get(Config::inactivityLockEnabled).toBool());
     ui->spinBox_inactivityLockTimeout->setValue(config()->get(Config::inactivityLockTimeout).toInt());
     ui->checkBox_disableWebsocket->setChecked(config()->get(Config::disableWebsocket).toBool());
+    ui->checkBox_offlineMode->setChecked(config()->get(Config::offlineMode).toBool());
 
     // setup comboboxes
     this->setupSkinCombobox();
@@ -226,4 +229,12 @@ void Settings::setupLocalMoneroFrontendCombobox() {
     ui->combo_localMoneroFrontend->setCurrentIndex(ui->combo_localMoneroFrontend->findData(config()->get(Config::localMoneroFrontend).toString()));
 }
 
+void Settings::enableWebsocket(bool enabled) {
+    if (enabled && !config()->get(Config::offlineMode).toBool() && !config()->get(Config::disableWebsocket).toBool()) {
+        websocketNotifier()->websocketClient.restart();
+    } else {
+        websocketNotifier()->websocketClient.stop();
+    }
+}
+
 Settings::~Settings() = default;
\ No newline at end of file
index edbb77b554d2f8db3e801fedcae83444177e63b8..97d8c99f106d536d5000a3df0df6d9892c041619 100644 (file)
@@ -49,6 +49,7 @@ public slots:
 private:
     void setupSkinCombobox();
     void setupLocalMoneroFrontendCombobox();
+    void enableWebsocket(bool enabled);
 
     QScopedPointer<Ui::Settings> ui;
     QSharedPointer<AppContext> m_ctx;
index 6eb3635f31b446a3e5ae9586ab363670e7886fb6..ee16aaecd6c315a0c4ed0e6d4657f7bfb17df3c5 100644 (file)
@@ -17,7 +17,7 @@
    <item>
     <widget class="QTabWidget" name="tabWidget">
      <property name="currentIndex">
-      <number>0</number>
+      <number>1</number>
      </property>
      <widget class="QWidget" name="tab_general">
       <attribute name="title">
          </item>
         </layout>
        </item>
+       <item>
+        <widget class="QCheckBox" name="checkBox_offlineMode">
+         <property name="text">
+          <string>Offline mode</string>
+         </property>
+        </widget>
+       </item>
        <item>
         <spacer name="verticalSpacer_4">
          <property name="orientation">
index 437695a49542e2084647aab5bde2d3d39572e40a..a76c130a772236bd100e15a92d5573e6fff3922d 100644 (file)
@@ -489,6 +489,7 @@ void WindowManager::onInitialNetworkConfigured() {
     if (!m_initialNetworkConfigured) {
         m_initialNetworkConfigured = true;
         appData();
+
         this->initTor();
         this->initWS();
     }
@@ -522,6 +523,10 @@ void WindowManager::onTorSettingsChanged() {
 }
 
 void WindowManager::initWS() {
+    if (config()->get(Config::offlineMode).toBool()) {
+        return;
+    }
+
     if (config()->get(Config::disableWebsocket).toBool()) {
         return;
     }
index 2b071b20f003ec84c834779167969b342224616f..86a6b74c841decc5fe9c904d0dff5fabeb07608c 100644 (file)
@@ -88,7 +88,11 @@ void DebugInfoDialog::updateInfo() {
         }
     }();
 
-    ui->label_netType->setText(Utils::QtEnumToString(m_ctx->wallet->nettype()));
+    QString networkType = Utils::QtEnumToString(m_ctx->wallet->nettype());
+    if (config()->get(Config::offlineMode).toBool()) {
+        networkType += " (offline)";
+    }
+    ui->label_netType->setText(networkType);
     ui->label_seedType->setText(seedType);
     ui->label_deviceType->setText(deviceType);
     ui->label_viewOnly->setText(m_ctx->wallet->viewOnly() ? "True" : "False");
index 07c250da191f11ced30f666829ba606c94aecdc4..6a60cd197471940cc8a2a0916fdc5fce50df345b 100644 (file)
@@ -148,6 +148,11 @@ bool Wallet::isConnected() const
     return status == ConnectionStatus_Synchronizing || status == ConnectionStatus_Synchronized;
 }
 
+void Wallet::setOffline(bool offline) const
+{
+    return m_walletImpl->setOffline(offline);
+}
+
 QString Wallet::errorString() const
 {
     return QString::fromStdString(m_walletImpl->errorString());
index 19ec6855ffe07263de5b65ad92862397b7a8b58a..9b08f5e80a08ad359fa7d5cc34dd548a31107ed5 100644 (file)
@@ -127,6 +127,8 @@ public:
     //! return true if wallet is connected to a node
     bool isConnected() const;
 
+    void setOffline(bool offline) const;
+
     //! returns last operation's error message
     QString errorString() const;
 
index 0a07e79280dc1a91e347ba8f55d592431d190f68..499c3cf35470b334b16e0ff183379c02e99ca7e8 100644 (file)
@@ -238,7 +238,11 @@ bool xdgDesktopEntryRegister() {
     return true;
 }
 
-bool portOpen(const QString &hostname, quint16 port){
+bool portOpen(const QString &hostname, quint16 port) { // TODO: this call should be async
+    if (config()->get(Config::offlineMode).toBool()) {
+        return false;
+    }
+
     QTcpSocket socket;
     socket.connectToHost(hostname, port);
     return socket.waitForConnected(600);
index bba161c20ded7237131bfce60f29d706be04a348..24dc35faca1b87db258a6ba7c20bfb87f13c9ebf 100644 (file)
@@ -69,6 +69,7 @@ static const QHash<Config::ConfigKey, ConfigDirective> configStrings = {
         {Config::inactivityLockEnabled, {QS("inactivityLockEnabled"), false}},
         {Config::inactivityLockTimeout, {QS("inactivityLockTimeout"), 10}},
         {Config::disableWebsocket, {QS("disableWebsocket"), false}},
+        {Config::offlineMode, {QS("offlineMode"), false}},
 
         {Config::multiBroadcast, {QS("multiBroadcast"), true}},
         {Config::warnOnExternalLink,{QS("warnOnExternalLink"), true}},
index 28698a5a3be61bbb5fe053e75f4b53d06fc9fec0..f0131ae96a1ce3af57536f8453a34699b05209eb 100644 (file)
@@ -73,6 +73,7 @@ public:
         inactivityLockEnabled,
         inactivityLockTimeout,
         disableWebsocket,
+        offlineMode,
 
         multiBroadcast,
         warnOnExternalLink,
index 66e0ef78949037e217e3a123f16c8c5ef434922d..f1893adc70178ec7cecd2525646e1c6853f72215 100644 (file)
@@ -6,16 +6,21 @@
 
 #include "utils/Utils.h"
 #include "utils/networking.h"
+#include "config.h"
 
-UtilsNetworking::UtilsNetworking(QNetworkAccessManager *networkAccessManager, QObject *parent) :
-        QObject(parent),
-        m_networkAccessManager(networkAccessManager) {}
+UtilsNetworking::UtilsNetworking(QNetworkAccessManager *networkAccessManager, QObject *parent)
+    : QObject(parent)
+    , m_networkAccessManager(networkAccessManager) {}
 
 void UtilsNetworking::setUserAgent(const QString &userAgent) {
     this->m_userAgent = userAgent;
 }
 
 QNetworkReply* UtilsNetworking::get(const QString &url) {
+    if (config()->get(Config::offlineMode).toBool()) {
+        return nullptr;
+    }
+
     QNetworkRequest request;
     request.setUrl(QUrl(url));
     request.setRawHeader("User-Agent", m_userAgent.toUtf8());
@@ -24,6 +29,10 @@ QNetworkReply* UtilsNetworking::get(const QString &url) {
 }
 
 QNetworkReply* UtilsNetworking::getJson(const QString &url) {
+    if (config()->get(Config::offlineMode).toBool()) {
+        return nullptr;
+    }
+
     QNetworkRequest request;
     request.setUrl(QUrl(url));
     request.setRawHeader("User-Agent", m_userAgent.toUtf8());
@@ -33,6 +42,10 @@ QNetworkReply* UtilsNetworking::getJson(const QString &url) {
 }
 
 QNetworkReply* UtilsNetworking::postJson(const QString &url, const QJsonObject &data) {
+    if (config()->get(Config::offlineMode).toBool()) {
+        return nullptr;
+    }
+
     QNetworkRequest request;
     request.setUrl(QUrl(url));
     request.setRawHeader("User-Agent", m_userAgent.toUtf8());
index 5d398dfecc22194c6568a7108bb9a186958cfd44..09d28218eeb02b3b7f08ab366da41274162a1f8b 100644 (file)
@@ -192,6 +192,10 @@ void Nodes::connectToNode(const FeatherNode &node) {
     if (!node.isValid())
         return;
 
+    if (config()->get(Config::offlineMode).toBool()) {
+        return;
+    }
+
     emit updateStatus(QString("Connecting to %1").arg(node.toAddress()));
     qInfo() << QString("Attempting to connect to %1 (%2)").arg(node.toAddress()).arg(node.custom ? "custom" : "ws");