]> Nutra Git (v1) - gamesguru/feather.git/commitdiff
wip
authorgg <chown_tee@proton.me>
Mon, 19 Jan 2026 21:17:36 +0000 (16:17 -0500)
committergg <chown_tee@proton.me>
Mon, 19 Jan 2026 21:17:36 +0000 (16:17 -0500)
src/MainWindow.cpp
src/libwalletqt/Wallet.cpp
src/libwalletqt/Wallet.h

index 3142dce9643c29c9686b953079970c28c08cc153..e645422b9cc05d2ad301fffbf75c9fc8ba529ac7 100644 (file)
@@ -259,7 +259,7 @@ void MainWindow::initStatusBar() {
     QAction *scanTxAction = new QAction(tr("Import Transaction"), this);
     m_statusLabelStatus->addAction(scanTxAction);
 
-    m_updateNetworkInfoAction = new QAction(tr("Scan Mempool"), this);
+    m_updateNetworkInfoAction = new QAction(tr("Scan mempool when paused"), this);
     m_statusLabelStatus->addAction(m_updateNetworkInfoAction);
 
     connect(m_actionPauseSync, &QAction::toggled, this, [this](bool checked) {
@@ -604,18 +604,18 @@ void MainWindow::initOffline() {
             ui->radio_airgapUR->setChecked(true);
     }
 
-    connect(m_updateNetworkInfoAction, &QAction::triggered, this, [this]() {
+    m_updateNetworkInfoAction->setCheckable(true);
+    connect(m_updateNetworkInfoAction, &QAction::toggled, this, [this](bool checked) {
         if (!m_wallet) return;
+        
+        m_wallet->setScanMempoolWhenPaused(checked);
 
-        qDebug() << "[UI] User requested network info and scan of mempool";
-
-        // FIX: Temporarily connect if we are disconnected/paused
-        if (m_wallet->connectionStatus() == Wallet::ConnectionStatus_Disconnected) {
-             m_nodes->connectToNode();
+        if (checked) {
+             // Ensure we are connected if enabling
+            if (m_wallet->connectionStatus() == Wallet::ConnectionStatus_Disconnected) {
+                 m_nodes->connectToNode();
+            }
         }
-        
-        // Trigger the refresh (sets m_refreshNow = true, bypassing the pause check)
-        m_wallet->startRefresh(true);
     });
 
 
@@ -1087,10 +1087,16 @@ void MainWindow::onConnectionStatusChanged(int status)
         switch(status){
             case Wallet::ConnectionStatus_Idle:
             {
-                if (conf()->get(Config::proxy).toInt() == Config::Proxy::Tor) {
-                    icon = icons()->icon("status_idle_proxy.svg");
+                // If "Scan Mempool" is active, we show "Idle" (connected/active)
+                if (m_updateNetworkInfoAction->isChecked()) {
+                    if (conf()->get(Config::proxy).toInt() == Config::Proxy::Tor) {
+                        icon = icons()->icon("status_idle_proxy.svg");
+                    } else {
+                        icon = icons()->icon("status_idle.svg");
+                    }
                 } else {
-                    icon = icons()->icon("status_idle.svg");
+                    // "True Idle" - just waiting, no network activity
+                    icon = icons()->icon("status_waiting.svg");
                 }
                 statusStr = this->getPausedStatusText();
                 m_statusLabelNetStats->hide();
index b479fd748565e6408ef158535033bddcc6fd6385..d2ec3d5a27aa7992ba59419cf74e22b095937f1b 100644 (file)
@@ -533,7 +533,7 @@ void Wallet::startRefreshThread()
                 if (elapsed >= std::chrono::seconds(m_refreshInterval) || m_refreshNow)
                 {
                     if (m_syncPaused && !m_rangeSyncActive) {
-                        bool shouldScanMempool = m_refreshNow;
+                        bool shouldScanMempool = m_refreshNow || m_scanMempoolWhenPaused;
 
                         if (shouldScanMempool) {
                             if (m_wallet2->get_daemon_address().empty()) {
@@ -698,12 +698,28 @@ void Wallet::setSyncPaused(bool paused) {
     m_syncPaused = paused;
     if (paused) {
         pauseRefresh();
+        if (!m_scanMempoolWhenPaused) {
+            m_wallet2->set_offline(true);
+        }
     } else {
         m_wallet2->set_offline(false);
         startRefresh(true);
     }
 }
 
+void Wallet::setScanMempoolWhenPaused(bool enabled) {
+    m_scanMempoolWhenPaused = enabled;
+
+    // Immediately trigger a scan if enabled and paused
+    if (enabled && m_syncPaused) {
+        m_wallet2->set_offline(false);
+        startRefresh(true);
+    }
+    else if (!enabled && m_syncPaused) {
+        m_wallet2->set_offline(true);
+    }
+}
+
 QDateTime Wallet::lastSyncTime() const {
     return m_lastSyncTime;
 }
index 4da2a85fde5a5d019d5eab58aeb963a531d11bfa..ee9a27a93ac992fa07e8a2a4f0b72ffae720e1c9 100644 (file)
@@ -225,6 +225,10 @@ public:
     void pauseRefresh();
     Q_INVOKABLE void updateNetworkStatus();
 
+    bool syncPaused() const;
+    void setSyncPaused(bool paused);
+    void setScanMempoolWhenPaused(bool enabled);
+
     //! returns current wallet's block height
     //! (can be less than daemon's blockchain height when wallet sync in progress)
     quint64 blockChainHeight() const;
@@ -549,6 +553,7 @@ private:
     std::atomic<bool> m_syncPaused{false};
     std::atomic<int64_t> m_lastRefreshTime{0};
     std::atomic<bool> m_refreshThreadStarted{false};
+    std::atomic<bool> m_scanMempoolWhenPaused{false};
 };
 
 #endif // FEATHER_WALLET_H