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:
@@ -116,6 +116,26 @@ public:
|
||||
* @brief Get last N lines of daemon output (thread-safe snapshot)
|
||||
*/
|
||||
std::vector<std::string> getRecentLines(int maxLines = 8) const;
|
||||
|
||||
/**
|
||||
* @brief Extract the latest block height from daemon output (thread-safe).
|
||||
* Parses the last "height=N" from UpdateTip lines without copying
|
||||
* the entire output buffer. Returns -1 if no UpdateTip found.
|
||||
*/
|
||||
int getLastBlockHeight() const {
|
||||
std::lock_guard<std::mutex> lk(output_mutex_);
|
||||
// Search backwards from the end for "height="
|
||||
size_t pos = process_output_.rfind("height=");
|
||||
if (pos == std::string::npos) return -1;
|
||||
pos += 7; // skip "height="
|
||||
int h = 0;
|
||||
for (size_t i = pos; i < process_output_.size(); ++i) {
|
||||
char c = process_output_[i];
|
||||
if (c >= '0' && c <= '9') h = h * 10 + (c - '0');
|
||||
else break;
|
||||
}
|
||||
return h > 0 ? h : -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Whether start() detected an existing daemon on the RPC port.
|
||||
|
||||
Reference in New Issue
Block a user