diff --git a/src/gui/views/goblin/mod.rs b/src/gui/views/goblin/mod.rs index 954d61e..3b944a8 100644 --- a/src/gui/views/goblin/mod.rs +++ b/src/gui/views/goblin/mod.rs @@ -525,7 +525,10 @@ impl GoblinWalletView { .get_data() .map(|d| d.info.last_confirmed_height) .unwrap_or(0); - let synced = height > 0 && !wallet.syncing(); + // Distinguish "scanning" from "can't reach the node": a flaky + // external node otherwise reads as syncing forever. + let error = wallet.sync_error(); + let synced = height > 0 && !wallet.syncing() && !error; w::card(ui, |ui| { ui.set_min_width(ui.available_width()); ui.horizontal(|ui| { @@ -533,14 +536,26 @@ impl GoblinWalletView { ui.painter().circle_filled( dot.center(), 4.0, - if synced { t.pos } else { t.accent }, + if error { + t.neg + } else if synced { + t.pos + } else { + t.accent + }, ); ui.add_space(8.0); ui.vertical(|ui| { ui.label( - RichText::new(if synced { "Node synced" } else { "Syncing…" }) - .font(FontId::new(14.0, fonts::semibold())) - .color(t.surface_text), + RichText::new(if error { + "Can't reach node" + } else if synced { + "Node synced" + } else { + "Syncing…" + }) + .font(FontId::new(14.0, fonts::semibold())) + .color(t.surface_text), ); // Single line: wrapping strands the "·" separator at the // end of the first line in the narrow sidebar card.