diff --git a/src/App/ViewModels/MainWindowViewModel.cs b/src/App/ViewModels/MainWindowViewModel.cs
index 8c16b02..f3ace12 100644
--- a/src/App/ViewModels/MainWindowViewModel.cs
+++ b/src/App/ViewModels/MainWindowViewModel.cs
@@ -397,7 +397,9 @@ public partial class MainWindowViewModel : ViewModelBase
private async Task KeepAliveTickAsync()
{
- if (!IsWalletOpen || IsSyncing)
+ // Vale anche senza wallet aperto: se l'utente si è connesso dalle
+ // impostazioni server, la connessione va mantenuta e riconnessa.
+ if (IsSyncing)
return;
if (_client is { IsConnected: true })
{
@@ -461,6 +463,9 @@ public partial class MainWindowViewModel : ViewModelBase
? Loc.Tr("msg.welcome.existing")
: Loc.Tr("msg.welcome.new");
RefreshServers();
+ // Come Electrum: ci si connette al server già durante il setup, senza
+ // aspettare l'apertura di un wallet (la sync parte poi all'apertura).
+ _ = ConnectAndSync();
}
private void RefreshServers()
@@ -776,8 +781,6 @@ public partial class MainWindowViewModel : ViewModelBase
[RelayCommand]
private async Task ConnectAndSync()
{
- if (_account is null || _doc is null)
- return;
if (IsSyncing)
{
_resyncRequested = true;
@@ -812,8 +815,18 @@ public partial class MainWindowViewModel : ViewModelBase
IsConnected = true;
_autoReconnect = true;
ConnectionStatus = $"{Loc.Tr("conn.connectedto")} {host}:{port}{(UseSsl ? " (TLS)" : "")}";
- // Synchronizer per connessione: conserva la cache di tx e
- // prove verificate, così le risincronizzazioni sono incrementali.
+ }
+
+ // Senza un wallet aperto ci si limita a stabilire/verificare la
+ // connessione: la sincronizzazione richiede un account.
+ if (_account is null || _doc is null)
+ return;
+
+ // Synchronizer legato all'account corrente, creato alla prima sync
+ // dopo la connessione: conserva la cache di tx e prove verificate,
+ // così le risincronizzazioni sono incrementali.
+ if (_synchronizer is null)
+ {
_synchronizer = new WalletSynchronizer(_account, _client, _doc.GapLimit);
_synchronizer.Progress += msg => Dispatcher.UIThread.Post(() => StatusMessage = msg);
}
@@ -823,7 +836,7 @@ public partial class MainWindowViewModel : ViewModelBase
do
{
_resyncRequested = false;
- var result = await _synchronizer!.SyncOnceAsync();
+ var result = await _synchronizer.SyncOnceAsync();
_lastTransactions = result.Transactions;
_doc.Cache = new SyncCache
diff --git a/src/App/Views/MainWindow.axaml b/src/App/Views/MainWindow.axaml
index 91da29a..d3a45e5 100644
--- a/src/App/Views/MainWindow.axaml
+++ b/src/App/Views/MainWindow.axaml
@@ -26,10 +26,6 @@
-
@@ -159,29 +155,13 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
@@ -331,10 +311,27 @@
-
+
-
+
+
+
+
+
+
+
+
@@ -540,11 +537,10 @@
-
+
+ Command="{Binding OpenServerSettingsCommand}"/>