pauseSyncAction->setChecked(conf()->get(Config::syncPaused).toBool());
m_statusLabelStatus->addAction(pauseSyncAction);
- m_actionDisconnectNodeOnPause = new QAction(tr("Disconnect from Node"), this);
- m_actionDisconnectNodeOnPause->setCheckable(true);
- m_actionDisconnectNodeOnPause->setChecked(conf()->get(Config::syncPausedAlsoDisconnectNode).toBool());
- m_actionDisconnectNodeOnPause->setEnabled(pauseSyncAction->isChecked());
- m_statusLabelStatus->addAction(m_actionDisconnectNodeOnPause);
-
m_actionEnableWebsocket = new QAction(tr("Enable Websocket"), this);
m_actionEnableWebsocket->setCheckable(true);
m_actionEnableWebsocket->setChecked(!conf()->get(Config::disableWebsocket).toBool());
WindowManager::instance()->onWebsocketStatusChanged(checked);
});
- connect(m_actionDisconnectNodeOnPause, &QAction::toggled, this, [](bool checked){
- conf()->set(Config::syncPausedAlsoDisconnectNode, checked);
- });
QAction *skipSyncAction = new QAction(tr("Skip Sync"), this);
m_statusLabelStatus->addAction(skipSyncAction);
qInfo() << "Pause Sync toggled. Checked =" << checked;
conf()->set(Config::syncPaused, checked);
- m_actionDisconnectNodeOnPause->setEnabled(checked);
m_updateNetworkInfoAction->setEnabled(!checked);
if (m_wallet) {
if (checked) {
m_wallet->setSyncPaused(true);
-
- if (m_actionDisconnectNodeOnPause->isChecked()) {
- qInfo() << "Disconnecting from node (Pause Sync enabled)";
- m_nodes->disconnectCurrentNode();
- this->onConnectionStatusChanged(Wallet::ConnectionStatus_Disconnected);
- }
-
- this->setPausedSyncStatus();
+ m_nodes->disconnectCurrentNode();
+ this->onConnectionStatusChanged(Wallet::ConnectionStatus_Disconnected);
} else {
// Ensure we reconnect everything when unpausing
m_wallet->setSyncPaused(false);
m_wallet->updateNetworkStatus();
});
- connect(m_wallet, &Wallet::heightsRefreshed, this, [this](bool success, quint64 daemonHeight, quint64 targetHeight) {
- if (conf()->get(Config::syncPaused).toBool()) {
- qDebug() << "Heights refreshed (Paused): Daemon" << daemonHeight << "Target" << targetHeight;
- this->setPausedSyncStatus();
- }
- });
// We do NOT want to start syncing yet here, wait for wallet to be opened
// We can't use rich text for radio buttons
this->updateBalance();
});
- connect(m_wallet, &Wallet::heightsRefreshed, this, [this](bool success, quint64 daemonHeight, quint64 targetHeight) {
- // When paused, we might get success=false because wallet->refresh() is skipped,
- // preventing strict cache updates. We should attempt to fallback to m_nodes info.
- if (!success && !conf()->get(Config::syncPaused).toBool()) return;
-
- // Update sync estimate if paused
- if (conf()->get(Config::syncPaused).toBool()) {
- this->setPausedSyncStatus();
- }
- });
connect(m_wallet, &Wallet::currentSubaddressAccountChanged, this, &MainWindow::updateTitle);
connect(m_wallet, &Wallet::walletPassphraseNeeded, this, &MainWindow::onWalletPassphraseNeeded);
if (!conf()->get(Config::disableAutoRefresh).toBool()) {
if (conf()->get(Config::syncPaused).toBool()) {
m_wallet->setSyncPaused(true);
- this->setPausedSyncStatus();
}
m_nodes->connectToNode();
}
m_statusLabelBalance->setProperty("copyableValue", valueStr);
}
-void MainWindow::setPausedSyncStatus() {
- qDebug() << "setPausedSyncStatus called. Sync paused:" << conf()->get(Config::syncPaused).toBool();
- QString tooltip;
- QString status = Utils::getPausedSyncStatus(m_wallet, m_nodes, &tooltip);
-
- if (m_wallet) {
- quint64 daemonHeight = m_wallet->daemonBlockChainHeight();
- quint64 walletHeight = m_wallet->blockChainHeight();
- quint64 targetHeight = m_wallet->daemonBlockChainTargetHeight();
- quint64 blocksBehind = Utils::blocksBehind(walletHeight, targetHeight);
-
- qDebug() << "Paused Status Calc: WalletHeight:" << walletHeight
- << "DaemonHeight:" << daemonHeight
- << "TargetHeight:" << targetHeight
- << "BlocksBehind:" << blocksBehind;
- }
-
- this->setStatusText(status);
- if (!tooltip.isEmpty())
- m_statusLabelStatus->setToolTip(tooltip);
-}
void MainWindow::setStatusText(const QString &text, bool override, int timeout) {
m_statusBtnConnectionStatusIndicator->setToolTip(statusStr);
- if (conf()->get(Config::syncPaused).toBool() && !conf()->get(Config::offlineMode).toBool()) {
- if (status == Wallet::ConnectionStatus_Synchronizing
- || status == Wallet::ConnectionStatus_Synchronized
- || status == Wallet::ConnectionStatus_Connecting) {
- this->setPausedSyncStatus();
- icon = icons()->icon("status_lagging.svg");
- }
- }
m_statusBtnConnectionStatusIndicator->setIcon(icon);
}
}
}
m_statusBtnHwDevice->setIcon(this->hardwareDevicePairedIcon());
- m_wallet->setSyncPaused(conf()->get(Config::syncPaused).toBool());
m_showDeviceError = false;
}
return blocks * 30 * 1024;
}
-QString formatPausedSyncStatus(quint64 blocks) {
- QString blocksStr = QLocale().toString(blocks);
- return QObject::tr("[PAUSED] %1 blocks behind").arg(blocksStr);
-}
-
-QString getPausedSyncStatus(Wallet *wallet, Nodes *nodes, QString *tooltip) {
- if (!wallet) return QObject::tr("[PAUSED] Sync paused");
-
- quint64 walletHeight = wallet->blockChainHeight();
- quint64 creationHeight = wallet->getWalletCreationHeight();
- quint64 startHeight = (walletHeight > creationHeight) ? walletHeight : creationHeight;
- quint64 daemonHeight = wallet->daemonBlockChainTargetHeight();
- if (daemonHeight == 0) {
- daemonHeight = wallet->daemonBlockChainHeight();
- }
-
- // If sync is paused or wallet just started, Wallet's internal height might be 0.
- // If the daemon is connected, use its target_height or height to determine the latest tip.
- if (daemonHeight == 0 && nodes) {
- auto connection = nodes->connection();
- if (connection.target_height > 0) daemonHeight = connection.target_height;
- else if (connection.height > 0) daemonHeight = connection.height;
- }
-
- if (daemonHeight > 0) {
- if (tooltip) {
- *tooltip = QObject::tr("Wallet Height: %1 | Network Tip: %2").arg(walletHeight).arg(daemonHeight);
- }
- quint64 blocksBehind = Utils::blocksBehind(startHeight, daemonHeight);
- if (blocksBehind == 0) {
- return QObject::tr("[PAUSED] Sync paused");
- }
- return formatPausedSyncStatus(blocksBehind);
- }
-
- return QObject::tr("[PAUSED] Sync paused");
-}
-
QString formatRestoreHeight(quint64 height) {
const QDateTime restoreDate = appData()->restoreHeights[constants::networkType]->heightToDate(height);
return QString("%1 (%2)").arg(QString::number(height), restoreDate.toString("yyyy-MM-dd"));