diff --git a/src/App/Localization/Loc.cs b/src/App/Localization/Loc.cs
index af56ffd..9f42caf 100644
--- a/src/App/Localization/Loc.cs
+++ b/src/App/Localization/Loc.cs
@@ -169,9 +169,9 @@ public sealed class Loc
// Wallet panel
["wallet.close"] = ["Chiudi wallet", "Close wallet", "Cerrar wallet", "Fermer le wallet", "Fechar carteira", "Wallet schließen"],
["wallet.server"] = ["Server:", "Server:", "Servidor:", "Serveur :", "Servidor:", "Server:"],
- ["wallet.connect"] = ["Connetti e sincronizza", "Connect and sync", "Conectar y sincronizar", "Connecter et synchroniser", "Conectar e sincronizar", "Verbinden und synchronisieren"],
+ ["wallet.connect"] = ["Connetti", "Connect", "Conectar", "Connecter", "Conectar", "Verbinden"],
["wallet.manual"] = ["oppure host:porta manuale", "or manual host:port", "o host:puerto manual", "ou hôte:port manuel", "ou host:porta manual", "oder manuell host:port"],
- ["wallet.discover"] = ["Cerca altri server", "Discover servers", "Buscar otros servidores", "Rechercher des serveurs", "Procurar servidores", "Server suchen"],
+ ["wallet.discover"] = ["Sincronizza", "Sync servers", "Sincronizar", "Synchroniser", "Sincronizar", "Synchronisieren"],
["wallet.resetcert"] = ["Reset cert.", "Reset certs", "Restablecer cert.", "Réinit. cert.", "Redefinir cert.", "Zert. zurücksetzen"],
["tab.receive"] = ["Ricevi", "Receive", "Recibir", "Recevoir", "Receber", "Empfangen"],
["tab.history"] = ["Storico", "History", "Historial", "Historique", "Histórico", "Verlauf"],
diff --git a/src/App/ViewModels/MainWindowViewModel.Sync.cs b/src/App/ViewModels/MainWindowViewModel.Sync.cs
index c31ff44..6924ded 100644
--- a/src/App/ViewModels/MainWindowViewModel.Sync.cs
+++ b/src/App/ViewModels/MainWindowViewModel.Sync.cs
@@ -345,17 +345,57 @@ public partial class MainWindowViewModel
_ = ConnectAndSync();
}
+ ///
+ /// Peer discovery. Always clickable: if the wallet is already connected, it reuses
+ /// that connection; otherwise it opens a short-lived connection to a candidate server
+ /// just to query its peer list, without touching the wallet's connection state.
+ ///
[RelayCommand]
private async Task DiscoverServers()
{
- if (_client is null || !_client.IsConnected)
+ if (_client is { IsConnected: true } connected)
{
- StatusMessage = Loc.Tr("conn.none") + ".";
+ await DiscoverServersUsing(connected);
+ return;
+ }
+
+ var (host, port) = ParseServer();
+ ElectrumClient? temp = null;
+ Exception? lastError = null;
+ foreach (var (h, p) in BuildServerCandidates(host, port))
+ {
+ try
+ {
+ var pins = new CertificatePinStore(AppPaths.CertificatePinsPath(Net));
+ temp = await ElectrumClient.ConnectAsync(h, p, UseSsl, pins);
+ lastError = null;
+ break;
+ }
+ catch (Exception ex)
+ {
+ lastError = ex;
+ }
+ }
+ if (temp is null)
+ {
+ StatusMessage = $"Errore nella scoperta peer: {lastError?.Message ?? Loc.Tr("conn.none")}";
return;
}
try
{
- var added = await Registry.DiscoverAsync(_client);
+ await DiscoverServersUsing(temp);
+ }
+ finally
+ {
+ await temp.DisposeAsync();
+ }
+ }
+
+ private async Task DiscoverServersUsing(ElectrumClient client)
+ {
+ try
+ {
+ var added = await Registry.DiscoverAsync(client);
var selected = SelectedKnownServer;
RefreshServers();
SelectedKnownServer = KnownServers.FirstOrDefault(s => s.Host == selected?.Host)
diff --git a/src/App/Views/MainView.axaml b/src/App/Views/MainView.axaml
index 0317834..b528ac4 100644
--- a/src/App/Views/MainView.axaml
+++ b/src/App/Views/MainView.axaml
@@ -1237,6 +1237,8 @@
+
@@ -1245,6 +1247,9 @@
+