feat: non-blocking warmup — connect during daemon initialization

Instead of blocking the entire UI with "Activating best chain..." until
the daemon finishes warmup, treat warmup responses as a successful
connection. The wallet now:

- Sets connected=true + warming_up=true when daemon returns RPC -28
- Shows warmup status with block progress in the loading overlay
- Polls getinfo every few seconds to detect warmup completion
- Allows Console, Peers, Settings tabs during warmup
- Shows orange status indicator with warmup message in status bar
- Skips balance/tx/address refresh until warmup completes
- Triggers full data refresh once daemon is ready

Also: fix curl handle/header leak on reconnect, fill in empty
externalDetected error branch, bump version to v1.2.0 in build scripts.
This commit is contained in:
2026-04-12 14:32:57 -05:00
parent 1860e9b277
commit d2dccbac05
9 changed files with 181 additions and 29 deletions

View File

@@ -180,6 +180,8 @@ struct PoolMiningState {
struct WalletState {
// Connection
bool connected = false;
bool warming_up = false; // daemon reachable but in RPC warmup (error -28)
std::string warmup_status; // e.g. "Activating best chain..."
int daemon_version = 0;
std::string daemon_subversion;
int protocol_version = 0;
@@ -250,6 +252,8 @@ struct WalletState {
void clear() {
connected = false;
warming_up = false;
warmup_status.clear();
daemon_version = 0;
daemon_subversion.clear();
protocol_version = 0;