From c5290a17964f79ee9a5691e7e2993caa24a667ba Mon Sep 17 00:00:00 2001 From: Davide Grilli Date: Thu, 18 Jun 2026 19:34:36 +0200 Subject: [PATCH] feat(ui): persist last server and split connection status text - AppConfig stores LastServerHost/Port/UseSsl; restored on next launch so the wallet reconnects to the last-used server instead of defaulting to the first bootstrap entry - Added ConnectionStatusShort for the status bar (short label only); ConnectionStatus retains the full "Connesso a ip:porta" shown in the server settings overlay --- .../ViewModels/MainWindowViewModel.Sync.cs | 34 ++++++++++++++++--- src/App/Views/MainView.axaml | 2 +- src/Core/Storage/AppConfig.cs | 5 +++ 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/src/App/ViewModels/MainWindowViewModel.Sync.cs b/src/App/ViewModels/MainWindowViewModel.Sync.cs index 8326196..6195b54 100644 --- a/src/App/ViewModels/MainWindowViewModel.Sync.cs +++ b/src/App/ViewModels/MainWindowViewModel.Sync.cs @@ -46,6 +46,9 @@ public partial class MainWindowViewModel [ObservableProperty] private string connectionStatus = Loc.Tr("conn.none"); + [ObservableProperty] + private string connectionStatusShort = Loc.Tr("conn.none"); + [ObservableProperty] private bool isConnected; @@ -103,11 +106,24 @@ public partial class MainWindowViewModel KnownServers.Clear(); foreach (var server in Registry.All) KnownServers.Add(server); - SelectedKnownServer = KnownServers.FirstOrDefault(); - if (SelectedKnownServer is null) + + if (_config.LastServerHost is { Length: > 0 } savedHost && _config.LastServerPort is { } savedPort) { - ServerHost = "127.0.0.1"; - ServerPort = (UseSsl ? Profile.DefaultSslPort : Profile.DefaultTcpPort).ToString(); + _syncingServerFields = true; + UseSsl = _config.LastServerUseSsl; + ServerHost = savedHost; + ServerPort = savedPort.ToString(); + SelectedKnownServer = KnownServers.FirstOrDefault(s => s.Host == savedHost); + _syncingServerFields = false; + } + else + { + SelectedKnownServer = KnownServers.FirstOrDefault(); + if (SelectedKnownServer is null) + { + ServerHost = "127.0.0.1"; + ServerPort = (UseSsl ? Profile.DefaultSslPort : Profile.DefaultTcpPort).ToString(); + } } } @@ -179,6 +195,7 @@ public partial class MainWindowViewModel foreach (var (h, p) in candidates) { ConnectionStatus = $"{Loc.Tr("conn.connectingto")} {h}:{p}…"; + ConnectionStatusShort = Loc.Tr("conn.connectingto") + "…"; try { var pins = new CertificatePinStore(AppPaths.CertificatePinsPath(Net)); @@ -188,10 +205,12 @@ public partial class MainWindowViewModel { IsConnected = false; ConnectionStatus = Loc.Tr("conn.none"); + ConnectionStatusShort = Loc.Tr("conn.none"); }); IsConnected = true; _autoReconnect = true; ConnectionStatus = $"{Loc.Tr("conn.connectedto")} {h}:{p}"; + ConnectionStatusShort = Loc.Tr("conn.connectedto"); // Update the UI to reflect the server actually connected. _syncingServerFields = true; ServerHost = h; @@ -199,6 +218,11 @@ public partial class MainWindowViewModel SelectedKnownServer = KnownServers.FirstOrDefault(s => s.Host == h) ?? SelectedKnownServer; _syncingServerFields = false; + // Persist the last-used server so it is restored on next launch. + _config.LastServerHost = h; + _config.LastServerPort = p; + _config.LastServerUseSsl = UseSsl; + _config.Save(); lastError = null; break; } @@ -264,12 +288,14 @@ public partial class MainWindowViewModel { IsConnected = false; ConnectionStatus = Loc.Tr("conn.none"); + ConnectionStatusShort = Loc.Tr("conn.none"); StatusMessage = ex.Message; } catch (Exception ex) { IsConnected = _client?.IsConnected == true; ConnectionStatus = IsConnected ? ConnectionStatus : Loc.Tr("conn.none"); + ConnectionStatusShort = IsConnected ? Loc.Tr("conn.connectedto") : Loc.Tr("conn.none"); StatusMessage = $"Errore: {ex.Message}"; if (_account is not null) { diff --git a/src/App/Views/MainView.axaml b/src/App/Views/MainView.axaml index b83a598..f4482af 100644 --- a/src/App/Views/MainView.axaml +++ b/src/App/Views/MainView.axaml @@ -895,7 +895,7 @@ IsVisible="{Binding IsConnected}"/> - diff --git a/src/Core/Storage/AppConfig.cs b/src/Core/Storage/AppConfig.cs index 578f3e0..91d6d89 100644 --- a/src/Core/Storage/AppConfig.cs +++ b/src/Core/Storage/AppConfig.cs @@ -15,6 +15,11 @@ public sealed class AppConfig /// Display unit for amounts (see ). public string Unit { get; set; } = "PLM"; + /// Last successfully connected server, persisted across sessions. + public string? LastServerHost { get; set; } + public int? LastServerPort { get; set; } + public bool LastServerUseSsl { get; set; } = true; + private static readonly JsonSerializerOptions JsonOptions = new() { WriteIndented = true }; public static AppConfig Load(string? path = null)