From c360177c313cca3ff519ac00b396adc7e95b677f Mon Sep 17 00:00:00 2001 From: Craig Raw Date: Sun, 12 Feb 2023 13:06:21 +0200 Subject: [PATCH] use default ports for bitcoin core if absent, fix ux on changing port for an aliased server --- src/main/java/com/sparrowwallet/sparrow/io/Server.java | 8 ++++++++ src/main/java/com/sparrowwallet/sparrow/net/Bwt.java | 3 +++ .../net/cormorant/bitcoind/BitcoindTransport.java | 6 +++++- .../sparrow/preferences/ServerPreferencesController.java | 9 +++++++++ 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/sparrowwallet/sparrow/io/Server.java b/src/main/java/com/sparrowwallet/sparrow/io/Server.java index 406ad6cc..a9f73ebc 100644 --- a/src/main/java/com/sparrowwallet/sparrow/io/Server.java +++ b/src/main/java/com/sparrowwallet/sparrow/io/Server.java @@ -70,6 +70,14 @@ public class Server { return url + (alias == null ? "" : "|" + alias); } + public boolean portEquals(String port) { + if(port == null) { + return !getHostAndPort().hasPort(); + } + + return port.equals(getHostAndPort().hasPort() ? Integer.toString(getHostAndPort().getPort()) : ""); + } + public static Server fromString(String server) { String[] parts = server.split("\\|"); if(parts.length >= 2) { diff --git a/src/main/java/com/sparrowwallet/sparrow/net/Bwt.java b/src/main/java/com/sparrowwallet/sparrow/net/Bwt.java index 0a931ea5..4d5a9921 100644 --- a/src/main/java/com/sparrowwallet/sparrow/net/Bwt.java +++ b/src/main/java/com/sparrowwallet/sparrow/net/Bwt.java @@ -146,6 +146,9 @@ public class Bwt { Config config = Config.get(); if(config.getCoreServer() != null) { bwtConfig.bitcoindUrl = config.getCoreServer().getUrl(); + if(!config.getCoreServer().getHostAndPort().hasPort()) { + bwtConfig.bitcoindUrl = config.getCoreServer().getUrl() + ":" + Network.get().getDefaultPort(); + } try { Protocol protocol = config.getCoreServer().getProtocol(); HostAndPort hostAndPort = protocol.getServerHostAndPort(bwtConfig.bitcoindUrl); diff --git a/src/main/java/com/sparrowwallet/sparrow/net/cormorant/bitcoind/BitcoindTransport.java b/src/main/java/com/sparrowwallet/sparrow/net/cormorant/bitcoind/BitcoindTransport.java index d5c19c22..76317f80 100644 --- a/src/main/java/com/sparrowwallet/sparrow/net/cormorant/bitcoind/BitcoindTransport.java +++ b/src/main/java/com/sparrowwallet/sparrow/net/cormorant/bitcoind/BitcoindTransport.java @@ -43,7 +43,11 @@ public class BitcoindTransport implements Transport { private BitcoindTransport(Server bitcoindServer, String bitcoindWallet) { this.bitcoindServer = bitcoindServer; try { - this.bitcoindUrl = new URL(bitcoindServer.getUrl() + "/wallet/" + bitcoindWallet); + String serverUrl = bitcoindServer.getUrl(); + if(!bitcoindServer.getHostAndPort().hasPort()) { + serverUrl += ":" + Network.get().getDefaultPort(); + } + this.bitcoindUrl = new URL(serverUrl + "/wallet/" + bitcoindWallet); } catch(MalformedURLException e) { log.error("Malformed Bitcoin Core RPC URL", e); } diff --git a/src/main/java/com/sparrowwallet/sparrow/preferences/ServerPreferencesController.java b/src/main/java/com/sparrowwallet/sparrow/preferences/ServerPreferencesController.java index 956ba817..eb447580 100644 --- a/src/main/java/com/sparrowwallet/sparrow/preferences/ServerPreferencesController.java +++ b/src/main/java/com/sparrowwallet/sparrow/preferences/ServerPreferencesController.java @@ -243,6 +243,7 @@ public class ServerPreferencesController extends PreferencesDetailController { proxyHost.textProperty().addListener(getProxyListener(config)); proxyPort.textProperty().addListener(getProxyListener(config)); + corePort.setPromptText("e.g. " + Network.get().getDefaultPort()); coreDataDirField.managedProperty().bind(coreDataDirField.visibleProperty()); coreUserPassField.managedProperty().bind(coreUserPassField.visibleProperty()); coreUserPassField.visibleProperty().bind(coreDataDirField.visibleProperty().not()); @@ -734,6 +735,10 @@ public class ServerPreferencesController extends PreferencesDetailController { private ChangeListener getBitcoinCoreListener(Config config) { return (observable, oldValue, newValue) -> { Server existingServer = config.getRecentCoreServers().stream().filter(server -> coreHost.getText().equals(server.getAlias())).findFirst().orElse(null); + if(existingServer != null && !existingServer.portEquals(corePort.getText())) { + coreHost.setText(existingServer.getHost()); + existingServer = null; + } coreHost.setLeft(existingServer == null ? null : getGlyph(FontAwesome5.Glyph.TAG, null)); setCoreServerInConfig(config); }; @@ -769,6 +774,10 @@ public class ServerPreferencesController extends PreferencesDetailController { private ChangeListener getElectrumServerListener(Config config) { return (observable, oldValue, newValue) -> { Server existingServer = config.getRecentElectrumServers().stream().filter(server -> electrumHost.getText().equals(server.getAlias())).findFirst().orElse(null); + if(existingServer != null && !existingServer.portEquals(electrumPort.getText())) { + electrumHost.setText(existingServer.getHost()); + existingServer = null; + } electrumHost.setLeft(existingServer == null ? null : getGlyph(FontAwesome5.Glyph.TAG, null)); setElectrumServerInConfig(config); };