feat(lite): ObsidianDragonLite Network tab — server browser
A lite-wallet-only "Network" tab (full-node keeps the Peers tab; exactly one shows per variant) to manage lightwalletd servers, replacing the basic selector that was in Settings. - Card list of servers with per-server latency + status dot, DNS host + resolved IP, and an Official/Custom pill. Official DragonX servers get a glowing outline. - Pick a server (Sticky) by clicking its card, or toggle "use a random server" (Random mode); selection applies immediately (App::rebuildLiteWallet(force=true) tears down + rebuilds the controller against the new server and resyncs — its dtor detaches the uninterruptible sync thread, so this doesn't block). - Add custom servers; hide/unhide servers (persisted set, revealed by a "Show hidden" toggle). - Latency/IP come from a new background probe (util/LiteServerProbe): libcurl CONNECT_ONLY does the TCP+TLS handshake (works for gRPC lightwalletd, no HTTP response needed), recording APPCONNECT_TIME as latency and CURLINFO_PRIMARY_IP. Auto-runs on tab open + a Refresh button. Wiring: WalletUiSurface::LiteNetwork (gated !fullNodePagesAvailable) + NavPage::LiteNetwork in the sidebar + app.cpp dispatch; settings gains a hidden-servers set; isOfficialLiteServer() added to lite_connection_service. The Settings page lite-server selector + its plumbing are removed (single source of truth = the tab). Reuses the existing server model (LiteServerPreference, Sticky/Random, selectLiteServer) and UI primitives (DrawGlassPanel, ThemeEffects glow, peers-tab ping-dot idiom). Unit-tested (liteServerHost, isOfficialLiteServer) + an env-gated live probe (verified vs lite.dragonx.is: online, latency, IP). Both variants + lite-backend build; suite passes; hygiene clean; GUI smoke-launched without crash. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1061,6 +1061,26 @@ void I18n::loadBuiltinEnglish()
|
||||
strings_["xmrig_update_failed"] = "Update failed";
|
||||
strings_["xmrig_unknown_error"] = "Unknown error.";
|
||||
|
||||
// --- Lite Network tab (server browser) ---
|
||||
strings_["lite_net_title"] = "Lite Servers";
|
||||
strings_["lite_net_intro"] = "Pick a server to use, or let the wallet choose one at random. Changes apply immediately.";
|
||||
strings_["lite_net_use_random"] = "Use a random server each time";
|
||||
strings_["lite_net_random_active"] = "Random server selection is active.";
|
||||
strings_["lite_net_refresh"] = "Refresh";
|
||||
strings_["lite_net_add"] = "Add";
|
||||
strings_["lite_net_add_url_hint"] = "https://your-lite-server";
|
||||
strings_["lite_net_add_label_hint"] = "Label (optional)";
|
||||
strings_["lite_net_invalid_url"] = "Enter a valid http(s):// URL.";
|
||||
strings_["lite_net_official"] = "Official";
|
||||
strings_["lite_net_custom"] = "Custom";
|
||||
strings_["lite_net_in_use"] = "In use";
|
||||
strings_["lite_net_offline"] = "offline";
|
||||
strings_["lite_net_checking"] = "checking…";
|
||||
strings_["lite_net_hide"] = "Hide";
|
||||
strings_["lite_net_unhide"] = "Unhide";
|
||||
strings_["lite_net_show_hidden"] = "Show hidden servers";
|
||||
strings_["lite_net_hidden_section"] = "Hidden servers";
|
||||
|
||||
// --- Peers Tab ---
|
||||
strings_["peers_avg_ping"] = "Avg Ping";
|
||||
strings_["peers_ban_24h"] = "Ban Peer 24h";
|
||||
|
||||
Reference in New Issue
Block a user