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
This commit is contained in:
@@ -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,6 +106,18 @@ public partial class MainWindowViewModel
|
||||
KnownServers.Clear();
|
||||
foreach (var server in Registry.All)
|
||||
KnownServers.Add(server);
|
||||
|
||||
if (_config.LastServerHost is { Length: > 0 } savedHost && _config.LastServerPort is { } savedPort)
|
||||
{
|
||||
_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)
|
||||
{
|
||||
@@ -110,6 +125,7 @@ public partial class MainWindowViewModel
|
||||
ServerPort = (UseSsl ? Profile.DefaultSslPort : Profile.DefaultTcpPort).ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private (string Host, int Port) ParseServer()
|
||||
{
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -895,7 +895,7 @@
|
||||
IsVisible="{Binding IsConnected}"/>
|
||||
<Ellipse Width="10" Height="10" Fill="{DynamicResource DangerBrush}" VerticalAlignment="Center"
|
||||
IsVisible="{Binding !IsConnected}"/>
|
||||
<TextBlock Text="{Binding ConnectionStatus}" FontSize="12"
|
||||
<TextBlock Text="{Binding ConnectionStatusShort}" FontSize="12"
|
||||
Foreground="{DynamicResource SystemAccentColor}"
|
||||
VerticalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
|
||||
@@ -15,6 +15,11 @@ public sealed class AppConfig
|
||||
/// <summary>Display unit for amounts (see <see cref="Wallet.CoinAmount.Units"/>).</summary>
|
||||
public string Unit { get; set; } = "PLM";
|
||||
|
||||
/// <summary>Last successfully connected server, persisted across sessions.</summary>
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user