connect(conf(), &Config::changed, this, [this](Config::ConfigKey key){
if (key == Config::syncPaused) {
- this->setSyncPaused(conf()->get(Config::syncPaused).toBool());
+ bool paused = conf()->get(Config::syncPaused).toBool();
+ this->setSyncPaused(paused);
+ // "Scan mempool when paused" only makes sense when sync is paused
+ if (m_updateNetworkInfoAction) {
+ m_updateNetworkInfoAction->setEnabled(paused);
+ }
}
});
if (!m_wallet) return;
QString msg = tr("Sync Unconfirmed (Smart Sync) will scan only the specific blocks required to unlock your pending funds (e.g. 10 confirmations).\n\n"
- "This minimizes data usage by pausing immediately after verification.\n\n"
+ "This minimizes data usage and processing time by seeking out only the blocks required to unlock your pending funds and pausing immediately after verification.\n\n"
+ "NOTE: You need to manually add all Tx IDs or scan the range of all transactions to ensure an accurate balance and use all features.\n\n"
"Continue?");
if (QMessageBox::question(this, tr("Sync Unconfirmed"), msg) == QMessageBox::Yes) {
}
m_updateNetworkInfoAction->setCheckable(true);
+ // Only enable this action when sync is paused
+ m_updateNetworkInfoAction->setEnabled(conf()->get(Config::syncPaused).toBool());
connect(m_updateNetworkInfoAction, &QAction::toggled, this, [this](bool checked) {
if (!m_wallet) return;
-
+
m_wallet->setScanMempoolWhenPaused(checked);
if (checked) {
if (m_wallet->connectionStatus() == Wallet::ConnectionStatus_Disconnected) {
m_nodes->connectToNode();
}
+ } else {
+ // Disconnect if paused and no longer scanning mempool
+ if (conf()->get(Config::syncPaused).toBool()) {
+ m_nodes->disconnectCurrentNode();
+ }
}
});
if (!conf()->get(Config::disableAutoRefresh).toBool()) {
if (conf()->get(Config::syncPaused).toBool()) {
m_wallet->setSyncPaused(true);
- // Manually set status to Disconnected/Paused so UI looks correct immediately
- this->onConnectionStatusChanged(Wallet::ConnectionStatus_Disconnected);
+ // Still connect to daemon if mempool scanning is enabled while paused
+ if (m_updateNetworkInfoAction && m_updateNetworkInfoAction->isChecked()) {
+ m_nodes->connectToNode();
+ } else {
+ // Manually set status to Disconnected/Paused so UI looks correct immediately
+ this->onConnectionStatusChanged(Wallet::ConnectionStatus_Disconnected);
+ }
} else {
m_nodes->connectToNode();
}
}
m_connectionStatus.store(value);
- emit connectionStatusChanged(static_cast<ConnectionStatus>(m_connectionStatus.load()));
+ emit connectionStatusChanged(value);
}
bool Wallet::isSynchronized() const {
m_wallet2->set_offline(true);
setConnectionStatus(ConnectionStatus_Disconnected);
} else {
- // Paused, but scanning mempool -> We consider this "Idle" in the UI sense (connected but waiting)
- setConnectionStatus(ConnectionStatus_Idle);
+ // Paused with mempool scanning: stay online but don't sync blocks
+ // Only set Idle if we already have a daemon connection
m_wallet2->set_offline(false);
- startRefresh(true); // Trigger scan immediately
+ if (!m_wallet2->get_daemon_address().empty()) {
+ setConnectionStatus(ConnectionStatus_Idle);
+ }
+ startRefresh(true);
}
} else {
m_syncState = SyncState::Active;
m_wallet2->set_offline(false);
- // setConnectionStatus(ConnectionStatus_Synchronizing); // Let loop set it
+ // Let the refresh loop set the appropriate connection status
startRefresh(true);
}
}
if (enabled) {
m_syncState = SyncState::PausedScanning;
m_wallet2->set_offline(false);
- setConnectionStatus(ConnectionStatus_Idle);
+ // Only set Idle if we already have a daemon connection
+ if (!m_wallet2->get_daemon_address().empty()) {
+ setConnectionStatus(ConnectionStatus_Idle);
+ }
startRefresh(true);
} else {
m_syncState = SyncState::Paused;
m_rangeSyncActive = true;
m_syncState = SyncState::SyncingOneShot;
m_lastSyncTime = QDateTime::currentDateTime().toMSecsSinceEpoch();
- m_lastSyncTime = QDateTime::currentDateTime().toMSecsSinceEpoch();
setConnectionStatus(ConnectionStatus_Synchronizing);
startRefresh(true);
}
// Update network stats if we just scanned OR if we don't have stats yet (startup recovery)
- if (shouldScanMempool || m_daemonBlockChainHeight == 0) {
+ // But only if we actually have a daemon address configured
+ if ((shouldScanMempool || m_daemonBlockChainHeight == 0) && !m_wallet2->get_daemon_address().empty()) {
quint64 daemonHeight = m_walletImpl->daemonBlockChainHeight();
quint64 targetHeight = (daemonHeight > 0) ? m_walletImpl->daemonBlockChainTargetHeight() : 0;
emit heightsRefreshed(daemonHeight > 0, daemonHeight, targetHeight);