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)