diff --git a/core/src/main/java/haveno/core/api/CoreMoneroConnectionsService.java b/core/src/main/java/haveno/core/api/CoreMoneroConnectionsService.java index f5132f73..acd06e50 100644 --- a/core/src/main/java/haveno/core/api/CoreMoneroConnectionsService.java +++ b/core/src/main/java/haveno/core/api/CoreMoneroConnectionsService.java @@ -36,7 +36,6 @@ import javax.inject.Inject; import javax.inject.Singleton; import java.util.ArrayList; import java.util.List; -import java.util.Optional; import java.util.stream.Collectors; @Slf4j @@ -368,67 +367,6 @@ public final class CoreMoneroConnectionsService { connectionManager.reset(); connectionManager.setTimeout(REFRESH_PERIOD_HTTP_MS); - // load previous or default connections - if (coreContext.isApiUser()) { - - // load previous connections - for (MoneroRpcConnection connection : connectionList.getConnections()) connectionManager.addConnection(connection); - log.info("Read " + connectionList.getConnections().size() + " previous connections from disk"); - - // add default connections - for (XmrNode node : xmrNodes.getAllXmrNodes()) { - if (node.hasClearNetAddress()) { - MoneroRpcConnection connection = new MoneroRpcConnection(node.getAddress() + ":" + node.getPort()).setPriority(node.getPriority()); - if (!connectionList.hasConnection(connection.getUri())) addConnection(connection); - } - if (node.hasOnionAddress()) { - MoneroRpcConnection connection = new MoneroRpcConnection(node.getOnionAddress() + ":" + node.getPort()).setPriority(node.getPriority()); - if (!connectionList.hasConnection(connection.getUri())) addConnection(connection); - } - } - } else { - - // add default connections - for (XmrNode node : xmrNodes.selectPreferredNodes(new XmrNodesSetupPreferences(preferences))) { - if (node.hasClearNetAddress()) { - MoneroRpcConnection connection = new MoneroRpcConnection(node.getAddress() + ":" + node.getPort()).setPriority(node.getPriority()); - addConnection(connection); - } - if (node.hasOnionAddress()) { - MoneroRpcConnection connection = new MoneroRpcConnection(node.getOnionAddress() + ":" + node.getPort()).setPriority(node.getPriority()); - addConnection(connection); - } - } - } - - // set current connection - Optional<String> currentConnectionUri = Optional.empty(); - if ("".equals(config.xmrNode)) { - if (coreContext.isApiUser() && connectionList.getCurrentConnectionUri().isPresent()) { - currentConnectionUri = connectionList.getCurrentConnectionUri(); - connectionManager.setConnection(currentConnectionUri.get()); - } - } else if (!isInitialized) { - - // set monero connection from startup arguments - MoneroRpcConnection connection = new MoneroRpcConnection(config.xmrNode, config.xmrNodeUsername, config.xmrNodePassword).setPriority(1); - if (useProxy(connection)) connection.setProxyUri(getProxyUri()); - connectionManager.setConnection(connection); - currentConnectionUri = Optional.of(connection.getUri()); - } - - // set connection proxies - log.info("TOR proxy URI: " + getProxyUri()); - for (MoneroRpcConnection connection : connectionManager.getConnections()) { - if (useProxy(connection)) connection.setProxyUri(getProxyUri()); - } - - // restore configuration - if ("".equals(config.xmrNode)) connectionManager.setAutoSwitch(connectionList.getAutoSwitch()); - - // check connection - checkConnection(); - // run once if (!isInitialized) { @@ -439,6 +377,7 @@ public final class CoreMoneroConnectionsService { log.info(getClass() + ".onNodeStarted() called"); daemon.getRpcConnection().checkConnection(connectionManager.getTimeout()); setConnection(daemon.getRpcConnection()); + checkConnection(); } @Override @@ -449,43 +388,88 @@ public final class CoreMoneroConnectionsService { }); } - // if offline and last connection is local node, start local node if it's offline - currentConnectionUri.ifPresent(uri -> { - try { - if (!connectionManager.isConnected() && nodeService.equalsUri(uri) && !nodeService.isOnline()) { + // restore connections + if ("".equals(config.xmrNode)) { + + // load previous or default connections + if (coreContext.isApiUser()) { + + // load previous connections + for (MoneroRpcConnection connection : connectionList.getConnections()) connectionManager.addConnection(connection); + log.info("Read " + connectionList.getConnections().size() + " previous connections from disk"); + + // add default connections + for (XmrNode node : xmrNodes.getAllXmrNodes()) { + if (node.hasClearNetAddress()) { + MoneroRpcConnection connection = new MoneroRpcConnection(node.getAddress() + ":" + node.getPort()).setPriority(node.getPriority()); + if (!connectionList.hasConnection(connection.getUri())) addConnection(connection); + } + if (node.hasOnionAddress()) { + MoneroRpcConnection connection = new MoneroRpcConnection(node.getOnionAddress() + ":" + node.getPort()).setPriority(node.getPriority()); + if (!connectionList.hasConnection(connection.getUri())) addConnection(connection); + } + } + } else { + + // add default connections + for (XmrNode node : xmrNodes.selectPreferredNodes(new XmrNodesSetupPreferences(preferences))) { + if (node.hasClearNetAddress()) { + MoneroRpcConnection connection = new MoneroRpcConnection(node.getAddress() + ":" + node.getPort()).setPriority(node.getPriority()); + addConnection(connection); + } + if (node.hasOnionAddress()) { + MoneroRpcConnection connection = new MoneroRpcConnection(node.getOnionAddress() + ":" + node.getPort()).setPriority(node.getPriority()); + addConnection(connection); + } + } + } + + // restore last connection + if (connectionList.getCurrentConnectionUri().isPresent()) { + connectionManager.setConnection(connectionList.getCurrentConnectionUri().get()); + } + + // set connection proxies + log.info("TOR proxy URI: " + getProxyUri()); + for (MoneroRpcConnection connection : connectionManager.getConnections()) { + if (useProxy(connection)) connection.setProxyUri(getProxyUri()); + } + + // restore auto switch + if (coreContext.isApiUser()) connectionManager.setAutoSwitch(connectionList.getAutoSwitch()); + else connectionManager.setAutoSwitch(true); + + // start local node if used as last connection and currently offline + if (connectionManager.getConnection() != null && nodeService.equalsUri(connectionManager.getConnection().getUri()) && !nodeService.isOnline()) { + try { log.info("Starting local node"); nodeService.startMoneroNode(); + } catch (Exception e) { + log.warn("Unable to start local monero node: " + e.getMessage()); + e.printStackTrace(); } - } catch (Exception e) { - log.warn("Unable to start local monero node: " + e.getMessage()); - e.printStackTrace(); } - }); - // prefer to connect to local node unless prevented by configuration - if ("".equals(config.xmrNode) && - (!connectionManager.isConnected() || connectionManager.getAutoSwitch()) && - nodeService.isConnected()) { - MoneroRpcConnection connection = connectionManager.getConnectionByUri(nodeService.getDaemon().getRpcConnection().getUri()); - if (connection != null) { - connection.checkConnection(connectionManager.getTimeout()); - setConnection(connection); + // update connection + if (connectionManager.getConnection() == null || connectionManager.getAutoSwitch()) { + setConnection(getBestAvailableConnection()); + } else { + checkConnection(); } + } else if (!isInitialized) { + + // set connection from startup argument if given + connectionManager.setAutoSwitch(false); + MoneroRpcConnection connection = new MoneroRpcConnection(config.xmrNode, config.xmrNodeUsername, config.xmrNodePassword).setPriority(1); + if (useProxy(connection)) connection.setProxyUri(getProxyUri()); + connectionManager.setConnection(connection); } - // if using legacy desktop app, connect to best available connection - if (!coreContext.isApiUser() && "".equals(config.xmrNode)) { - connectionManager.setAutoSwitch(true); - MoneroRpcConnection bestConnection = connectionManager.getBestAvailableConnection(); - log.info("Setting best available connection for monerod: " + (bestConnection == null ? null : bestConnection.getUri())); - connectionManager.setConnection(bestConnection); - } - - // register connection change listener + // register connection listener connectionManager.addListener(this::onConnectionChanged); - isInitialized = true; - // update connection state + // notify final connection + isInitialized = true; onConnectionChanged(connectionManager.getConnection()); } } @@ -556,10 +540,11 @@ public final class CoreMoneroConnectionsService { numPeers.set(lastInfo.getNumOutgoingConnections() + lastInfo.getNumIncomingConnections()); peers.set(new ArrayList<MoneroPeer>()); - // log recovery message + // handle error recovery if (lastErrorTimestamp != null) { log.info("Successfully fetched daemon info after previous error"); lastErrorTimestamp = null; + HavenoUtils.havenoSetup.getWalletServiceErrorMsg().set(null); } // update and notify connected state @@ -575,6 +560,9 @@ public final class CoreMoneroConnectionsService { if (DevEnv.isDevMode()) e.printStackTrace(); } + // notify error message + HavenoUtils.havenoSetup.getWalletServiceErrorMsg().set(e.getMessage()); + // check connection which notifies of changes synchronized (this) { if (connectionManager.getAutoSwitch()) connectionManager.setConnection(connectionManager.getBestAvailableConnection()); diff --git a/core/src/main/java/haveno/core/app/HavenoSetup.java b/core/src/main/java/haveno/core/app/HavenoSetup.java index d25e4ffe..b921342b 100644 --- a/core/src/main/java/haveno/core/app/HavenoSetup.java +++ b/core/src/main/java/haveno/core/app/HavenoSetup.java @@ -727,24 +727,24 @@ public class HavenoSetup { /////////////////////////////////////////////////////////////////////////////////////////// // Wallet - public StringProperty getBtcInfo() { - return walletAppSetup.getBtcInfo(); + public StringProperty getXmrInfo() { + return walletAppSetup.getXmrInfo(); } - public DoubleProperty getBtcSyncProgress() { - return walletAppSetup.getBtcSyncProgress(); + public DoubleProperty getXmrSyncProgress() { + return walletAppSetup.getXmrSyncProgress(); } public StringProperty getWalletServiceErrorMsg() { return walletAppSetup.getWalletServiceErrorMsg(); } - public StringProperty getBtcSplashSyncIconId() { - return walletAppSetup.getBtcSplashSyncIconId(); + public StringProperty getXmrSplashSyncIconId() { + return walletAppSetup.getXmrSplashSyncIconId(); } - public BooleanProperty getUseTorForBTC() { - return walletAppSetup.getUseTorForBTC(); + public BooleanProperty getUseTorForXMR() { + return walletAppSetup.getUseTorForXMR(); } // P2P diff --git a/core/src/main/java/haveno/core/app/WalletAppSetup.java b/core/src/main/java/haveno/core/app/WalletAppSetup.java index 1dd7e683..c0399329 100644 --- a/core/src/main/java/haveno/core/app/WalletAppSetup.java +++ b/core/src/main/java/haveno/core/app/WalletAppSetup.java @@ -67,20 +67,20 @@ public class WalletAppSetup { private final Preferences preferences; @SuppressWarnings("FieldCanBeLocal") - private MonadicBinding<String> btcInfoBinding; + private MonadicBinding<String> xmrInfoBinding; @Getter - private final DoubleProperty btcSyncProgress = new SimpleDoubleProperty(-1); + private final DoubleProperty xmrSyncProgress = new SimpleDoubleProperty(-1); @Getter private final StringProperty walletServiceErrorMsg = new SimpleStringProperty(); @Getter - private final StringProperty btcSplashSyncIconId = new SimpleStringProperty(); + private final StringProperty xmrSplashSyncIconId = new SimpleStringProperty(); @Getter - private final StringProperty btcInfo = new SimpleStringProperty(Res.get("mainView.footer.btcInfo.initializing")); + private final StringProperty xmrInfo = new SimpleStringProperty(Res.get("mainView.footer.xmrInfo.initializing")); @Getter private final ObjectProperty<RejectedTxException> rejectedTxException = new SimpleObjectProperty<>(); @Getter - private final BooleanProperty useTorForBTC = new SimpleBooleanProperty(); + private final BooleanProperty useTorForXMR = new SimpleBooleanProperty(); @Inject public WalletAppSetup(CoreContext coreContext, @@ -95,7 +95,7 @@ public class WalletAppSetup { this.connectionService = connectionService; this.config = config; this.preferences = preferences; - this.useTorForBTC.set(preferences.getUseTorForMonero()); + this.useTorForXMR.set(preferences.getUseTorForMonero()); } void init(@Nullable Consumer<String> chainFileLockedExceptionHandler, @@ -107,58 +107,59 @@ public class WalletAppSetup { VersionMessage.BITCOINJ_VERSION, "2a80db4"); ObjectProperty<Throwable> walletServiceException = new SimpleObjectProperty<>(); - btcInfoBinding = EasyBind.combine(connectionService.downloadPercentageProperty(), // TODO (woodser): update to XMR + xmrInfoBinding = EasyBind.combine(connectionService.downloadPercentageProperty(), // TODO (woodser): update to XMR connectionService.chainHeightProperty(), walletServiceException, - (downloadPercentage, chainHeight, exception) -> { + getWalletServiceErrorMsg(), + (downloadPercentage, chainHeight, exception, errorMsg) -> { String result; - if (exception == null) { + if (exception == null && errorMsg == null) { double percentage = (double) downloadPercentage; - btcSyncProgress.set(percentage); + xmrSyncProgress.set(percentage); MoneroDaemonInfo lastInfo = connectionService.getLastInfo(); Long bestChainHeight = lastInfo == null ? null : lastInfo.getHeight(); String chainHeightAsString = bestChainHeight != null && bestChainHeight > 0 ? String.valueOf(bestChainHeight) : ""; if (percentage == 1) { - String synchronizedWith = Res.get("mainView.footer.btcInfo.synchronizedWith", - getBtcNetworkAsString(), chainHeightAsString); + String synchronizedWith = Res.get("mainView.footer.xmrInfo.synchronizedWith", + getXmrNetworkAsString(), chainHeightAsString); String feeInfo = ""; // TODO: feeService.isFeeAvailable() returns true, disable - result = Res.get("mainView.footer.btcInfo", synchronizedWith, feeInfo); - getBtcSplashSyncIconId().set("image-connection-synced"); + result = Res.get("mainView.footer.xmrInfo", synchronizedWith, feeInfo); + getXmrSplashSyncIconId().set("image-connection-synced"); downloadCompleteHandler.run(); } else if (percentage > 0.0) { - String synchronizingWith = Res.get("mainView.footer.btcInfo.synchronizingWith", - getBtcNetworkAsString(), chainHeightAsString, + String synchronizingWith = Res.get("mainView.footer.xmrInfo.synchronizingWith", + getXmrNetworkAsString(), chainHeightAsString, FormattingUtils.formatToPercentWithSymbol(percentage)); - result = Res.get("mainView.footer.btcInfo", synchronizingWith, ""); + result = Res.get("mainView.footer.xmrInfo", synchronizingWith, ""); } else { - result = Res.get("mainView.footer.btcInfo", - Res.get("mainView.footer.btcInfo.connectingTo"), - getBtcNetworkAsString()); + result = Res.get("mainView.footer.xmrInfo", + Res.get("mainView.footer.xmrInfo.connectingTo"), + getXmrNetworkAsString()); } } else { - result = Res.get("mainView.footer.btcInfo", - Res.get("mainView.footer.btcInfo.connectionFailed"), - getBtcNetworkAsString()); - log.error(exception.toString()); - if (exception instanceof TimeoutException) { - getWalletServiceErrorMsg().set(Res.get("mainView.walletServiceErrorMsg.timeout")); - } else if (exception.getCause() instanceof BlockStoreException) { - if (exception.getCause().getCause() instanceof ChainFileLockedException && chainFileLockedExceptionHandler != null) { - chainFileLockedExceptionHandler.accept(Res.get("popup.warning.startupFailed.twoInstances")); + result = Res.get("mainView.footer.xmrInfo", + Res.get("mainView.footer.xmrInfo.connectionFailed"), + getXmrNetworkAsString()); + if (exception != null) { + if (exception instanceof TimeoutException) { + getWalletServiceErrorMsg().set(Res.get("mainView.walletServiceErrorMsg.timeout")); + } else if (exception.getCause() instanceof BlockStoreException) { + if (exception.getCause().getCause() instanceof ChainFileLockedException && chainFileLockedExceptionHandler != null) { + chainFileLockedExceptionHandler.accept(Res.get("popup.warning.startupFailed.twoInstances")); + } + } else if (exception instanceof RejectedTxException) { + rejectedTxException.set((RejectedTxException) exception); + getWalletServiceErrorMsg().set(Res.get("mainView.walletServiceErrorMsg.rejectedTxException", exception.getMessage())); + } else { + getWalletServiceErrorMsg().set(Res.get("mainView.walletServiceErrorMsg.connectionError", exception.getMessage())); } - } else if (exception instanceof RejectedTxException) { - rejectedTxException.set((RejectedTxException) exception); - getWalletServiceErrorMsg().set(Res.get("mainView.walletServiceErrorMsg.rejectedTxException", exception.getMessage())); - } else { - getWalletServiceErrorMsg().set(Res.get("mainView.walletServiceErrorMsg.connectionError", exception.getMessage())); } } return result; - }); - btcInfoBinding.subscribe((observable, oldValue, newValue) -> UserThread.execute(() -> btcInfo.set(newValue))); + xmrInfoBinding.subscribe((observable, oldValue, newValue) -> UserThread.execute(() -> xmrInfo.set(newValue))); walletsSetup.initialize(null, () -> { @@ -253,7 +254,7 @@ public class WalletAppSetup { }); } - private String getBtcNetworkAsString() { + private String getXmrNetworkAsString() { String postFix; if (config.ignoreLocalXmrNode) postFix = " " + Res.get("mainView.footer.localhostBitcoinNode"); diff --git a/core/src/main/java/haveno/core/xmr/nodes/XmrNodes.java b/core/src/main/java/haveno/core/xmr/nodes/XmrNodes.java index 06dc99b3..eda060c7 100644 --- a/core/src/main/java/haveno/core/xmr/nodes/XmrNodes.java +++ b/core/src/main/java/haveno/core/xmr/nodes/XmrNodes.java @@ -56,22 +56,22 @@ public class XmrNodes { return Arrays.asList( new XmrNode(MoneroNodesOption.PROVIDED, null, null, "127.0.0.1", 38081, 1, "@local"), new XmrNode(MoneroNodesOption.PROVIDED, null, null, "127.0.0.1", 39081, 1, "@local"), - new XmrNode(MoneroNodesOption.PROVIDED, null, null, "45.63.8.26", 38081, 1, "@haveno"), - new XmrNode(MoneroNodesOption.PROVIDED, null, null, "stagenet.community.rino.io", 38081, 2, "@RINOwallet"), - new XmrNode(MoneroNodesOption.PUBLIC, null, null, "stagenet.melo.tools", 38081, 2, null), - new XmrNode(MoneroNodesOption.PUBLIC, null, null, "node.sethforprivacy.com", 38089, 2, null), - new XmrNode(MoneroNodesOption.PUBLIC, null, null, "node2.sethforprivacy.com", 38089, 2, null), + new XmrNode(MoneroNodesOption.PROVIDED, null, null, "45.63.8.26", 38081, 2, "@haveno"), + new XmrNode(MoneroNodesOption.PROVIDED, null, null, "stagenet.community.rino.io", 38081, 3, "@RINOwallet"), + new XmrNode(MoneroNodesOption.PUBLIC, null, null, "stagenet.melo.tools", 38081, 3, null), + new XmrNode(MoneroNodesOption.PUBLIC, null, null, "node.sethforprivacy.com", 38089, 3, null), + new XmrNode(MoneroNodesOption.PUBLIC, null, null, "node2.sethforprivacy.com", 38089, 3, null), new XmrNode(MoneroNodesOption.PUBLIC, null, "plowsof3t5hogddwabaeiyrno25efmzfxyro2vligremt7sxpsclfaid.onion", null, 38089, 2, null) ); case XMR_MAINNET: return Arrays.asList( new XmrNode(MoneroNodesOption.PROVIDED, null, null, "127.0.0.1", 18081, 1, "@local"), - new XmrNode(MoneroNodesOption.PROVIDED, null, null, "xmr-node.cakewallet.com", 18081, 1, "@cakewallet"), + new XmrNode(MoneroNodesOption.PROVIDED, null, null, "xmr-node.cakewallet.com", 18081, 2, "@cakewallet"), + new XmrNode(MoneroNodesOption.PROVIDED, null, null, "xmr-node-eu.cakewallet.com", 18081, 2, "@cakewallet"), + new XmrNode(MoneroNodesOption.PROVIDED, null, null, "xmr-node-usa-east.cakewallet.com", 18081, 2, "@cakewallet"), + new XmrNode(MoneroNodesOption.PROVIDED, null, null, "xmr-node-uk.cakewallet.com", 18081, 2, "@cakewallet"), new XmrNode(MoneroNodesOption.PUBLIC, null, null, "node.community.rino.io", 18081, 2, "@RINOwallet"), - new XmrNode(MoneroNodesOption.PUBLIC, null, null, "xmr-node-eu.cakewallet.com", 18081, 2, "@cakewallet"), - new XmrNode(MoneroNodesOption.PUBLIC, null, null, "xmr-node-usa-east.cakewallet.com", 18081, 2, "@cakewallet"), - new XmrNode(MoneroNodesOption.PUBLIC, null, null, "xmr-node-uk.cakewallet.com", 18081, 2, "@cakewallet"), - new XmrNode(MoneroNodesOption.PUBLIC, null, null, "node.sethforprivacy.com", 18089, 2, "@sethforprivacy") + new XmrNode(MoneroNodesOption.PUBLIC, null, null, "node.sethforprivacy.com", 18089, 3, "@sethforprivacy") ); default: throw new IllegalStateException("Unexpected base currency network: " + Config.baseCurrencyNetwork()); diff --git a/core/src/main/java/haveno/core/xmr/nodes/XmrNodesSetupPreferences.java b/core/src/main/java/haveno/core/xmr/nodes/XmrNodesSetupPreferences.java index 3a67b41f..583a82c5 100644 --- a/core/src/main/java/haveno/core/xmr/nodes/XmrNodesSetupPreferences.java +++ b/core/src/main/java/haveno/core/xmr/nodes/XmrNodesSetupPreferences.java @@ -42,8 +42,8 @@ public class XmrNodesSetupPreferences { XmrNodes.MoneroNodesOption nodesOption = XmrNodes.MoneroNodesOption.values()[preferences.getMoneroNodesOptionOrdinal()]; switch (nodesOption) { case CUSTOM: - String bitcoinNodes = preferences.getMoneroNodes(); - Set<String> distinctNodes = Utilities.commaSeparatedListToSet(bitcoinNodes, false); + String moneroNodes = preferences.getMoneroNodes(); + Set<String> distinctNodes = Utilities.commaSeparatedListToSet(moneroNodes, false); result = XmrNodes.toCustomXmrNodesList(distinctNodes); if (result.isEmpty()) { log.warn("Custom nodes is set but no valid nodes are provided. " + diff --git a/core/src/main/java/haveno/core/xmr/wallet/XmrWalletService.java b/core/src/main/java/haveno/core/xmr/wallet/XmrWalletService.java index 8543d2f7..d5fd337d 100644 --- a/core/src/main/java/haveno/core/xmr/wallet/XmrWalletService.java +++ b/core/src/main/java/haveno/core/xmr/wallet/XmrWalletService.java @@ -675,7 +675,7 @@ public class XmrWalletService { if (wallet != null) { log.info("Monero wallet uri={}, path={}", wallet.getRpcConnection().getUri(), wallet.getPath()); int numAttempts = 0; - int maxAttempts = 2; + int maxAttempts = 3; while (!HavenoUtils.havenoSetup.getWalletInitialized().get()) { try { diff --git a/core/src/main/resources/i18n/displayStrings.properties b/core/src/main/resources/i18n/displayStrings.properties index 61e4bf84..bea94814 100644 --- a/core/src/main/resources/i18n/displayStrings.properties +++ b/core/src/main/resources/i18n/displayStrings.properties @@ -265,13 +265,13 @@ mainView.balance.pending.short=Pending mainView.footer.usingTor=(via Tor) mainView.footer.localhostBitcoinNode=(localhost) -mainView.footer.btcInfo={0} {1} +mainView.footer.xmrInfo={0} {1} mainView.footer.btcFeeRate=/ Fee rate: {0} sat/vB -mainView.footer.btcInfo.initializing=Connecting to Monero network -mainView.footer.btcInfo.synchronizingWith=Synchronizing with {0} at block: {1} / {2} -mainView.footer.btcInfo.synchronizedWith=Synced with {0} at block {1} -mainView.footer.btcInfo.connectingTo=Connecting to -mainView.footer.btcInfo.connectionFailed=Connection failed to +mainView.footer.xmrInfo.initializing=Connecting to Monero network +mainView.footer.xmrInfo.synchronizingWith=Synchronizing with {0} at block: {1} / {2} +mainView.footer.xmrInfo.synchronizedWith=Synced with {0} at block {1} +mainView.footer.xmrInfo.connectingTo=Connecting to +mainView.footer.xmrInfo.connectionFailed=Connection failed to mainView.footer.xmrPeers=Monero network peers: {0} mainView.footer.p2pPeers=Haveno network peers: {0} diff --git a/core/src/main/resources/i18n/displayStrings_cs.properties b/core/src/main/resources/i18n/displayStrings_cs.properties index e6862dd0..37dbea6a 100644 --- a/core/src/main/resources/i18n/displayStrings_cs.properties +++ b/core/src/main/resources/i18n/displayStrings_cs.properties @@ -246,13 +246,13 @@ mainView.balance.pending.short=Zamčeno mainView.footer.usingTor=(přes Tor) mainView.footer.localhostBitcoinNode=(localhost) -mainView.footer.btcInfo={0} {1} +mainView.footer.xmrInfo={0} {1} mainView.footer.btcFeeRate=/ Aktuální poplatek: {0} sat/vB -mainView.footer.btcInfo.initializing=Připojování do Bitcoinové sítě -mainView.footer.btcInfo.synchronizingWith=Synchronizace s {0} v bloku: {1} / {2} -mainView.footer.btcInfo.synchronizedWith=Synchronizováno s {0} v bloku {1} -mainView.footer.btcInfo.connectingTo=Připojování -mainView.footer.btcInfo.connectionFailed=Připojení se nezdařilo +mainView.footer.xmrInfo.initializing=Připojování do Bitcoinové sítě +mainView.footer.xmrInfo.synchronizingWith=Synchronizace s {0} v bloku: {1} / {2} +mainView.footer.xmrInfo.synchronizedWith=Synchronizováno s {0} v bloku {1} +mainView.footer.xmrInfo.connectingTo=Připojování +mainView.footer.xmrInfo.connectionFailed=Připojení se nezdařilo mainView.footer.xmrPeers=Monero síťové nody: {0} mainView.footer.p2pPeers=Haveno síťové nody: {0} diff --git a/core/src/main/resources/i18n/displayStrings_de.properties b/core/src/main/resources/i18n/displayStrings_de.properties index 5e134789..1b799b5e 100644 --- a/core/src/main/resources/i18n/displayStrings_de.properties +++ b/core/src/main/resources/i18n/displayStrings_de.properties @@ -246,13 +246,13 @@ mainView.balance.pending.short=Gesperrt mainView.footer.usingTor=(über Tor) mainView.footer.localhostBitcoinNode=(localhost) -mainView.footer.btcInfo={0} {1} +mainView.footer.xmrInfo={0} {1} mainView.footer.btcFeeRate=/ Aktuelle Gebühr: {0} sat/vB -mainView.footer.btcInfo.initializing=Verbindung mit Bitcoin-Netzwerk wird hergestellt -mainView.footer.btcInfo.synchronizingWith=Synchronisierung mit {0} bei Block: {1} / {2} -mainView.footer.btcInfo.synchronizedWith=Synchronisierung mit {0} bei Block {1} -mainView.footer.btcInfo.connectingTo=Verbinde mit -mainView.footer.btcInfo.connectionFailed=Verbindung fehlgeschlagen zu +mainView.footer.xmrInfo.initializing=Verbindung mit Bitcoin-Netzwerk wird hergestellt +mainView.footer.xmrInfo.synchronizingWith=Synchronisierung mit {0} bei Block: {1} / {2} +mainView.footer.xmrInfo.synchronizedWith=Synchronisierung mit {0} bei Block {1} +mainView.footer.xmrInfo.connectingTo=Verbinde mit +mainView.footer.xmrInfo.connectionFailed=Verbindung fehlgeschlagen zu mainView.footer.xmrPeers=Monero Netzwerk Peers: {0} mainView.footer.p2pPeers=Haveno Netzwerk Peers: {0} diff --git a/core/src/main/resources/i18n/displayStrings_es.properties b/core/src/main/resources/i18n/displayStrings_es.properties index 31d88537..c2c211a5 100644 --- a/core/src/main/resources/i18n/displayStrings_es.properties +++ b/core/src/main/resources/i18n/displayStrings_es.properties @@ -246,13 +246,13 @@ mainView.balance.pending.short=Bloqueado mainView.footer.usingTor=(via Tor) mainView.footer.localhostBitcoinNode=(localhost) -mainView.footer.btcInfo={0} {1} +mainView.footer.xmrInfo={0} {1} mainView.footer.btcFeeRate=/Tasas actuales: {0} sat/vB -mainView.footer.btcInfo.initializing=Conectando a la red Bitcoin -mainView.footer.btcInfo.synchronizingWith=Sincronizando con {0} en el bloque: {1} / {2} -mainView.footer.btcInfo.synchronizedWith=Sincronizado con {0} en el bloque {1} -mainView.footer.btcInfo.connectingTo=Conectando a -mainView.footer.btcInfo.connectionFailed=Conexión fallida a +mainView.footer.xmrInfo.initializing=Conectando a la red Bitcoin +mainView.footer.xmrInfo.synchronizingWith=Sincronizando con {0} en el bloque: {1} / {2} +mainView.footer.xmrInfo.synchronizedWith=Sincronizado con {0} en el bloque {1} +mainView.footer.xmrInfo.connectingTo=Conectando a +mainView.footer.xmrInfo.connectionFailed=Conexión fallida a mainView.footer.xmrPeers=Pares de Monero: {0} mainView.footer.p2pPeers=Pares de la red de Haveno: {0} diff --git a/core/src/main/resources/i18n/displayStrings_fa.properties b/core/src/main/resources/i18n/displayStrings_fa.properties index 041f0d02..09fb690e 100644 --- a/core/src/main/resources/i18n/displayStrings_fa.properties +++ b/core/src/main/resources/i18n/displayStrings_fa.properties @@ -246,13 +246,13 @@ mainView.balance.pending.short=قفل شده mainView.footer.usingTor=(via Tor) mainView.footer.localhostBitcoinNode=(لوکال هاست) -mainView.footer.btcInfo={0} {1} +mainView.footer.xmrInfo={0} {1} mainView.footer.btcFeeRate=/ Fee rate: {0} sat/vB -mainView.footer.btcInfo.initializing=در حال ارتباط با شبکه بیتکوین -mainView.footer.btcInfo.synchronizingWith=Synchronizing with {0} at block: {1} / {2} -mainView.footer.btcInfo.synchronizedWith=Synced with {0} at block {1} -mainView.footer.btcInfo.connectingTo=در حال ایجاد ارتباط با -mainView.footer.btcInfo.connectionFailed=Connection failed to +mainView.footer.xmrInfo.initializing=در حال ارتباط با شبکه بیتکوین +mainView.footer.xmrInfo.synchronizingWith=Synchronizing with {0} at block: {1} / {2} +mainView.footer.xmrInfo.synchronizedWith=Synced with {0} at block {1} +mainView.footer.xmrInfo.connectingTo=در حال ایجاد ارتباط با +mainView.footer.xmrInfo.connectionFailed=Connection failed to mainView.footer.xmrPeers=Monero network peers: {0} mainView.footer.p2pPeers=Haveno network peers: {0} diff --git a/core/src/main/resources/i18n/displayStrings_fr.properties b/core/src/main/resources/i18n/displayStrings_fr.properties index 380b8c71..fb9541a9 100644 --- a/core/src/main/resources/i18n/displayStrings_fr.properties +++ b/core/src/main/resources/i18n/displayStrings_fr.properties @@ -246,13 +246,13 @@ mainView.balance.pending.short=Vérouillé mainView.footer.usingTor=(à travers Tor) mainView.footer.localhostBitcoinNode=(localhost) -mainView.footer.btcInfo={0} {1} +mainView.footer.xmrInfo={0} {1} mainView.footer.btcFeeRate=/ Taux des frais: {0} sat/vB -mainView.footer.btcInfo.initializing=Connexion au réseau Bitcoin en cours -mainView.footer.btcInfo.synchronizingWith=Synchronisation avec {0} au block: {1}/ {2} -mainView.footer.btcInfo.synchronizedWith=Synchronisé avec {0} au block {1} -mainView.footer.btcInfo.connectingTo=Se connecte à -mainView.footer.btcInfo.connectionFailed=Échec de la connexion à +mainView.footer.xmrInfo.initializing=Connexion au réseau Bitcoin en cours +mainView.footer.xmrInfo.synchronizingWith=Synchronisation avec {0} au block: {1}/ {2} +mainView.footer.xmrInfo.synchronizedWith=Synchronisé avec {0} au block {1} +mainView.footer.xmrInfo.connectingTo=Se connecte à +mainView.footer.xmrInfo.connectionFailed=Échec de la connexion à mainView.footer.xmrPeers=Pairs du réseau Monero: {0} mainView.footer.p2pPeers=Pairs du réseau Haveno: {0} diff --git a/core/src/main/resources/i18n/displayStrings_it.properties b/core/src/main/resources/i18n/displayStrings_it.properties index 269aef15..d2290f54 100644 --- a/core/src/main/resources/i18n/displayStrings_it.properties +++ b/core/src/main/resources/i18n/displayStrings_it.properties @@ -246,13 +246,13 @@ mainView.balance.pending.short=Bloccati mainView.footer.usingTor=(via Tor) mainView.footer.localhostBitcoinNode=(localhost) -mainView.footer.btcInfo={0} {1} +mainView.footer.xmrInfo={0} {1} mainView.footer.btcFeeRate=/ Fee rate: {0} sat/vB -mainView.footer.btcInfo.initializing=Connessione alla rete Bitcoin -mainView.footer.btcInfo.synchronizingWith=Synchronizing with {0} at block: {1} / {2} -mainView.footer.btcInfo.synchronizedWith=Synced with {0} at block {1} -mainView.footer.btcInfo.connectingTo=Connessione a -mainView.footer.btcInfo.connectionFailed=Connessione fallita +mainView.footer.xmrInfo.initializing=Connessione alla rete Bitcoin +mainView.footer.xmrInfo.synchronizingWith=Synchronizing with {0} at block: {1} / {2} +mainView.footer.xmrInfo.synchronizedWith=Synced with {0} at block {1} +mainView.footer.xmrInfo.connectingTo=Connessione a +mainView.footer.xmrInfo.connectionFailed=Connessione fallita mainView.footer.xmrPeers=Monero network peers: {0} mainView.footer.p2pPeers=Haveno network peers: {0} diff --git a/core/src/main/resources/i18n/displayStrings_ja.properties b/core/src/main/resources/i18n/displayStrings_ja.properties index fcb74d1f..5659e28e 100644 --- a/core/src/main/resources/i18n/displayStrings_ja.properties +++ b/core/src/main/resources/i18n/displayStrings_ja.properties @@ -246,13 +246,13 @@ mainView.balance.pending.short=ロック中 mainView.footer.usingTor=(Tor経由で) mainView.footer.localhostBitcoinNode=(ローカルホスト) -mainView.footer.btcInfo={0} {1} +mainView.footer.xmrInfo={0} {1} mainView.footer.btcFeeRate=/ 手数料率: {0} サトシ/vB -mainView.footer.btcInfo.initializing=ビットコインネットワークに接続中 -mainView.footer.btcInfo.synchronizingWith={0}と同期中、ブロック: {1} / {2} -mainView.footer.btcInfo.synchronizedWith={0}と同期されています、ブロック{1}に -mainView.footer.btcInfo.connectingTo=接続中: -mainView.footer.btcInfo.connectionFailed=接続失敗 +mainView.footer.xmrInfo.initializing=ビットコインネットワークに接続中 +mainView.footer.xmrInfo.synchronizingWith={0}と同期中、ブロック: {1} / {2} +mainView.footer.xmrInfo.synchronizedWith={0}と同期されています、ブロック{1}に +mainView.footer.xmrInfo.connectingTo=接続中: +mainView.footer.xmrInfo.connectionFailed=接続失敗 mainView.footer.xmrPeers=Moneroネットワークピア: {0} mainView.footer.p2pPeers=Havenoネットワークピア: {0} diff --git a/core/src/main/resources/i18n/displayStrings_pt-br.properties b/core/src/main/resources/i18n/displayStrings_pt-br.properties index 1d00e589..0949476e 100644 --- a/core/src/main/resources/i18n/displayStrings_pt-br.properties +++ b/core/src/main/resources/i18n/displayStrings_pt-br.properties @@ -249,13 +249,13 @@ mainView.balance.pending.short=Travado mainView.footer.usingTor=(via Tor) mainView.footer.localhostBitcoinNode=(localhost) -mainView.footer.btcInfo={0} {1} +mainView.footer.xmrInfo={0} {1} mainView.footer.btcFeeRate=/ Fee rate: {0} sat/vB -mainView.footer.btcInfo.initializing=Conectando-se à rede Bitcoin -mainView.footer.btcInfo.synchronizingWith=Synchronizing with {0} at block: {1} / {2} -mainView.footer.btcInfo.synchronizedWith=Synced with {0} at block {1} -mainView.footer.btcInfo.connectingTo=Conectando-se a -mainView.footer.btcInfo.connectionFailed=Falha na conexão à +mainView.footer.xmrInfo.initializing=Conectando-se à rede Bitcoin +mainView.footer.xmrInfo.synchronizingWith=Synchronizing with {0} at block: {1} / {2} +mainView.footer.xmrInfo.synchronizedWith=Synced with {0} at block {1} +mainView.footer.xmrInfo.connectingTo=Conectando-se a +mainView.footer.xmrInfo.connectionFailed=Falha na conexão à mainView.footer.xmrPeers=Monero network peers: {0} mainView.footer.p2pPeers=Haveno network peers: {0} diff --git a/core/src/main/resources/i18n/displayStrings_pt.properties b/core/src/main/resources/i18n/displayStrings_pt.properties index 480661fe..4b79d526 100644 --- a/core/src/main/resources/i18n/displayStrings_pt.properties +++ b/core/src/main/resources/i18n/displayStrings_pt.properties @@ -246,13 +246,13 @@ mainView.balance.pending.short=Bloqueado mainView.footer.usingTor=(via Tor) mainView.footer.localhostBitcoinNode=(localhost) -mainView.footer.btcInfo={0} {1} +mainView.footer.xmrInfo={0} {1} mainView.footer.btcFeeRate=/ Fee rate: {0} sat/vB -mainView.footer.btcInfo.initializing=Conectando à rede Bitcoin -mainView.footer.btcInfo.synchronizingWith=Synchronizing with {0} at block: {1} / {2} -mainView.footer.btcInfo.synchronizedWith=Synced with {0} at block {1} -mainView.footer.btcInfo.connectingTo=Conectando à -mainView.footer.btcInfo.connectionFailed=Connection failed to +mainView.footer.xmrInfo.initializing=Conectando à rede Bitcoin +mainView.footer.xmrInfo.synchronizingWith=Synchronizing with {0} at block: {1} / {2} +mainView.footer.xmrInfo.synchronizedWith=Synced with {0} at block {1} +mainView.footer.xmrInfo.connectingTo=Conectando à +mainView.footer.xmrInfo.connectionFailed=Connection failed to mainView.footer.xmrPeers=Monero network peers: {0} mainView.footer.p2pPeers=Haveno network peers: {0} diff --git a/core/src/main/resources/i18n/displayStrings_ru.properties b/core/src/main/resources/i18n/displayStrings_ru.properties index e0fc9d90..3d9cb4b1 100644 --- a/core/src/main/resources/i18n/displayStrings_ru.properties +++ b/core/src/main/resources/i18n/displayStrings_ru.properties @@ -246,13 +246,13 @@ mainView.balance.pending.short=В сделках mainView.footer.usingTor=(via Tor) mainView.footer.localhostBitcoinNode=(локальный узел) -mainView.footer.btcInfo={0} {1} +mainView.footer.xmrInfo={0} {1} mainView.footer.btcFeeRate=/ Fee rate: {0} sat/vB -mainView.footer.btcInfo.initializing=Подключение к сети Биткойн -mainView.footer.btcInfo.synchronizingWith=Synchronizing with {0} at block: {1} / {2} -mainView.footer.btcInfo.synchronizedWith=Synced with {0} at block {1} -mainView.footer.btcInfo.connectingTo=Подключение к -mainView.footer.btcInfo.connectionFailed=Connection failed to +mainView.footer.xmrInfo.initializing=Подключение к сети Биткойн +mainView.footer.xmrInfo.synchronizingWith=Synchronizing with {0} at block: {1} / {2} +mainView.footer.xmrInfo.synchronizedWith=Synced with {0} at block {1} +mainView.footer.xmrInfo.connectingTo=Подключение к +mainView.footer.xmrInfo.connectionFailed=Connection failed to mainView.footer.xmrPeers=Monero network peers: {0} mainView.footer.p2pPeers=Haveno network peers: {0} diff --git a/core/src/main/resources/i18n/displayStrings_th.properties b/core/src/main/resources/i18n/displayStrings_th.properties index d9fdb4a4..25e56aba 100644 --- a/core/src/main/resources/i18n/displayStrings_th.properties +++ b/core/src/main/resources/i18n/displayStrings_th.properties @@ -246,13 +246,13 @@ mainView.balance.pending.short=ถูกล็อคไว้ mainView.footer.usingTor=(via Tor) mainView.footer.localhostBitcoinNode=(แม่ข่ายเฉพาะที่) -mainView.footer.btcInfo={0} {1} +mainView.footer.xmrInfo={0} {1} mainView.footer.btcFeeRate=/ Fee rate: {0} sat/vB -mainView.footer.btcInfo.initializing=Connecting to Bitcoin network -mainView.footer.btcInfo.synchronizingWith=Synchronizing with {0} at block: {1} / {2} -mainView.footer.btcInfo.synchronizedWith=Synced with {0} at block {1} -mainView.footer.btcInfo.connectingTo=Connecting to -mainView.footer.btcInfo.connectionFailed=Connection failed to +mainView.footer.xmrInfo.initializing=Connecting to Bitcoin network +mainView.footer.xmrInfo.synchronizingWith=Synchronizing with {0} at block: {1} / {2} +mainView.footer.xmrInfo.synchronizedWith=Synced with {0} at block {1} +mainView.footer.xmrInfo.connectingTo=Connecting to +mainView.footer.xmrInfo.connectionFailed=Connection failed to mainView.footer.xmrPeers=Monero network peers: {0} mainView.footer.p2pPeers=Haveno network peers: {0} diff --git a/core/src/main/resources/i18n/displayStrings_vi.properties b/core/src/main/resources/i18n/displayStrings_vi.properties index 653aa292..c169d985 100644 --- a/core/src/main/resources/i18n/displayStrings_vi.properties +++ b/core/src/main/resources/i18n/displayStrings_vi.properties @@ -246,13 +246,13 @@ mainView.balance.pending.short=Bị khóa mainView.footer.usingTor=(via Tor) mainView.footer.localhostBitcoinNode=(Máy chủ nội bộ) -mainView.footer.btcInfo={0} {1} +mainView.footer.xmrInfo={0} {1} mainView.footer.btcFeeRate=/ Fee rate: {0} sat/vB -mainView.footer.btcInfo.initializing=Đang kết nối với mạng Bitcoin -mainView.footer.btcInfo.synchronizingWith=Synchronizing with {0} at block: {1} / {2} -mainView.footer.btcInfo.synchronizedWith=Synced with {0} at block {1} -mainView.footer.btcInfo.connectingTo=Đang kết nối với -mainView.footer.btcInfo.connectionFailed=Connection failed to +mainView.footer.xmrInfo.initializing=Đang kết nối với mạng Bitcoin +mainView.footer.xmrInfo.synchronizingWith=Synchronizing with {0} at block: {1} / {2} +mainView.footer.xmrInfo.synchronizedWith=Synced with {0} at block {1} +mainView.footer.xmrInfo.connectingTo=Đang kết nối với +mainView.footer.xmrInfo.connectionFailed=Connection failed to mainView.footer.xmrPeers=Monero network peers: {0} mainView.footer.p2pPeers=Haveno network peers: {0} diff --git a/core/src/main/resources/i18n/displayStrings_zh-hans.properties b/core/src/main/resources/i18n/displayStrings_zh-hans.properties index 3677c613..90ce2deb 100644 --- a/core/src/main/resources/i18n/displayStrings_zh-hans.properties +++ b/core/src/main/resources/i18n/displayStrings_zh-hans.properties @@ -246,13 +246,13 @@ mainView.balance.pending.short=冻结 mainView.footer.usingTor=(通过 Tor) mainView.footer.localhostBitcoinNode=(本地主机) -mainView.footer.btcInfo={0} {1} +mainView.footer.xmrInfo={0} {1} mainView.footer.btcFeeRate=/ 矿工手费率:{0} 聪/字节 -mainView.footer.btcInfo.initializing=连接至比特币网络 -mainView.footer.btcInfo.synchronizingWith=正在通过{0}同步区块:{1}/{2} -mainView.footer.btcInfo.synchronizedWith=已通过{0}同步至区块{1} -mainView.footer.btcInfo.connectingTo=连接至 -mainView.footer.btcInfo.connectionFailed=连接失败: +mainView.footer.xmrInfo.initializing=连接至比特币网络 +mainView.footer.xmrInfo.synchronizingWith=正在通过{0}同步区块:{1}/{2} +mainView.footer.xmrInfo.synchronizedWith=已通过{0}同步至区块{1} +mainView.footer.xmrInfo.connectingTo=连接至 +mainView.footer.xmrInfo.connectionFailed=连接失败: mainView.footer.xmrPeers=Monero网络节点:{0} mainView.footer.p2pPeers=Haveno 网络节点:{0} diff --git a/core/src/main/resources/i18n/displayStrings_zh-hant.properties b/core/src/main/resources/i18n/displayStrings_zh-hant.properties index 2cc4b0fa..6dd97b9f 100644 --- a/core/src/main/resources/i18n/displayStrings_zh-hant.properties +++ b/core/src/main/resources/i18n/displayStrings_zh-hant.properties @@ -246,13 +246,13 @@ mainView.balance.pending.short=凍結 mainView.footer.usingTor=(via Tor) mainView.footer.localhostBitcoinNode=(本地主機) -mainView.footer.btcInfo={0} {1} +mainView.footer.xmrInfo={0} {1} mainView.footer.btcFeeRate=/ Fee rate: {0} sat/vB -mainView.footer.btcInfo.initializing=連接至比特幣網絡 -mainView.footer.btcInfo.synchronizingWith=Synchronizing with {0} at block: {1} / {2} -mainView.footer.btcInfo.synchronizedWith=Synced with {0} at block {1} -mainView.footer.btcInfo.connectingTo=連接至 -mainView.footer.btcInfo.connectionFailed=連接失敗: +mainView.footer.xmrInfo.initializing=連接至比特幣網絡 +mainView.footer.xmrInfo.synchronizingWith=Synchronizing with {0} at block: {1} / {2} +mainView.footer.xmrInfo.synchronizedWith=Synced with {0} at block {1} +mainView.footer.xmrInfo.connectingTo=連接至 +mainView.footer.xmrInfo.connectionFailed=連接失敗: mainView.footer.xmrPeers=Monero網絡節點:{0} mainView.footer.p2pPeers=Haveno 網絡節點:{0} diff --git a/desktop/src/main/java/haveno/desktop/main/MainView.java b/desktop/src/main/java/haveno/desktop/main/MainView.java index 3be68ccd..5c0ce6be 100644 --- a/desktop/src/main/java/haveno/desktop/main/MainView.java +++ b/desktop/src/main/java/haveno/desktop/main/MainView.java @@ -117,15 +117,15 @@ public class MainView extends InitializableView<StackPane, MainViewModel> { private final Navigation navigation; private final ToggleGroup navButtons = new ToggleGroup(); private ChangeListener<String> walletServiceErrorMsgListener; - private ChangeListener<String> btcSyncIconIdListener; + private ChangeListener<String> xmrSyncIconIdListener; private ChangeListener<String> splashP2PNetworkErrorMsgListener; private ChangeListener<String> splashP2PNetworkIconIdListener; private ChangeListener<Boolean> splashP2PNetworkVisibleListener; private BusyAnimation splashP2PNetworkBusyAnimation; private Label splashP2PNetworkLabel; - private ProgressBar btcSyncIndicator, p2pNetworkProgressBar; - private Label btcSplashInfo; - private Popup p2PNetworkWarnMsgPopup, btcNetworkWarnMsgPopup; + private ProgressBar xmrSyncIndicator, p2pNetworkProgressBar; + private Label xmrSplashInfo; + private Popup p2PNetworkWarnMsgPopup, xmrNetworkWarnMsgPopup; private final TorNetworkSettingsWindow torNetworkSettingsWindow; public static StackPane getRootContainer() { @@ -515,31 +515,31 @@ public class MainView extends InitializableView<StackPane, MainViewModel> { logo.setId(Config.baseCurrencyNetwork() == BaseCurrencyNetwork.XMR_MAINNET ? "image-splash-logo" : "image-splash-testnet-logo"); // createBitcoinInfoBox - btcSplashInfo = new AutoTooltipLabel(); - btcSplashInfo.textProperty().bind(model.getBtcInfo()); + xmrSplashInfo = new AutoTooltipLabel(); + xmrSplashInfo.textProperty().bind(model.getXmrInfo()); walletServiceErrorMsgListener = (ov, oldValue, newValue) -> { - btcSplashInfo.setId("splash-error-state-msg"); - btcSplashInfo.getStyleClass().add("error-text"); + xmrSplashInfo.setId("splash-error-state-msg"); + xmrSplashInfo.getStyleClass().add("error-text"); }; model.getWalletServiceErrorMsg().addListener(walletServiceErrorMsgListener); - btcSyncIndicator = new JFXProgressBar(); - btcSyncIndicator.setPrefWidth(305); - btcSyncIndicator.progressProperty().bind(model.getCombinedSyncProgress()); + xmrSyncIndicator = new JFXProgressBar(); + xmrSyncIndicator.setPrefWidth(305); + xmrSyncIndicator.progressProperty().bind(model.getCombinedSyncProgress()); - ImageView btcSyncIcon = new ImageView(); - btcSyncIcon.setVisible(false); - btcSyncIcon.setManaged(false); + ImageView xmrSyncIcon = new ImageView(); + xmrSyncIcon.setVisible(false); + xmrSyncIcon.setManaged(false); - btcSyncIconIdListener = (ov, oldValue, newValue) -> { - btcSyncIcon.setId(newValue); - btcSyncIcon.setVisible(true); - btcSyncIcon.setManaged(true); + xmrSyncIconIdListener = (ov, oldValue, newValue) -> { + xmrSyncIcon.setId(newValue); + xmrSyncIcon.setVisible(true); + xmrSyncIcon.setManaged(true); - btcSyncIndicator.setVisible(false); - btcSyncIndicator.setManaged(false); + xmrSyncIndicator.setVisible(false); + xmrSyncIndicator.setManaged(false); }; - model.getBtcSplashSyncIconId().addListener(btcSyncIconIdListener); + model.getXmrSplashSyncIconId().addListener(xmrSyncIconIdListener); HBox blockchainSyncBox = new HBox(); @@ -547,7 +547,7 @@ public class MainView extends InitializableView<StackPane, MainViewModel> { blockchainSyncBox.setAlignment(Pos.CENTER); blockchainSyncBox.setPadding(new Insets(40, 0, 0, 0)); blockchainSyncBox.setPrefHeight(50); - blockchainSyncBox.getChildren().addAll(btcSplashInfo, btcSyncIcon); + blockchainSyncBox.getChildren().addAll(xmrSplashInfo, xmrSyncIcon); // create P2PNetworkBox @@ -574,10 +574,10 @@ public class MainView extends InitializableView<StackPane, MainViewModel> { splashP2PNetworkBusyAnimation.stop(); showTorNetworkSettingsButton.setVisible(true); showTorNetworkSettingsButton.setManaged(true); - if (model.getUseTorForBTC().get()) { - // If using tor for BTC, hide the BTC status since tor is not working - btcSyncIndicator.setVisible(false); - btcSplashInfo.setVisible(false); + if (model.getUseTorForXMR().get()) { + // If using tor for XMR, hide the XMR status since tor is not working + xmrSyncIndicator.setVisible(false); + xmrSplashInfo.setVisible(false); } } else if (model.getSplashP2PNetworkAnimationVisible().get()) { splashP2PNetworkBusyAnimation.setDisable(false); @@ -623,20 +623,20 @@ public class MainView extends InitializableView<StackPane, MainViewModel> { splashP2PNetworkBox.setPrefHeight(40); splashP2PNetworkBox.getChildren().addAll(splashP2PNetworkLabel, splashP2PNetworkBusyAnimation, splashP2PNetworkIcon, showTorNetworkSettingsButton); - vBox.getChildren().addAll(logo, blockchainSyncBox, btcSyncIndicator, splashP2PNetworkBox); + vBox.getChildren().addAll(logo, blockchainSyncBox, xmrSyncIndicator, splashP2PNetworkBox); return vBox; } private void disposeSplashScreen() { model.getWalletServiceErrorMsg().removeListener(walletServiceErrorMsgListener); - model.getBtcSplashSyncIconId().removeListener(btcSyncIconIdListener); + model.getXmrSplashSyncIconId().removeListener(xmrSyncIconIdListener); model.getP2pNetworkWarnMsg().removeListener(splashP2PNetworkErrorMsgListener); model.getP2PNetworkIconId().removeListener(splashP2PNetworkIconIdListener); model.getSplashP2PNetworkAnimationVisible().removeListener(splashP2PNetworkVisibleListener); - btcSplashInfo.textProperty().unbind(); - btcSyncIndicator.progressProperty().unbind(); + xmrSplashInfo.textProperty().unbind(); + xmrSyncIndicator.progressProperty().unbind(); splashP2PNetworkLabel.textProperty().unbind(); @@ -653,12 +653,12 @@ public class MainView extends InitializableView<StackPane, MainViewModel> { setRightAnchor(separator, 0d); setTopAnchor(separator, 0d); - // BTC - Label btcInfoLabel = new AutoTooltipLabel(); - btcInfoLabel.setId("footer-pane"); - btcInfoLabel.textProperty().bind(model.getBtcInfo()); - setLeftAnchor(btcInfoLabel, 10d); - setBottomAnchor(btcInfoLabel, 7d); + // XMR + Label xmrInfoLabel = new AutoTooltipLabel(); + xmrInfoLabel.setId("footer-pane"); + xmrInfoLabel.textProperty().bind(model.getXmrInfo()); + setLeftAnchor(xmrInfoLabel, 10d); + setBottomAnchor(xmrInfoLabel, 7d); // temporarily disabled due to high CPU usage (per issue #4649) //ProgressBar blockchainSyncIndicator = new JFXProgressBar(-1); @@ -668,16 +668,16 @@ public class MainView extends InitializableView<StackPane, MainViewModel> { model.getWalletServiceErrorMsg().addListener((ov, oldValue, newValue) -> { if (newValue != null) { - btcInfoLabel.setId("splash-error-state-msg"); - btcInfoLabel.getStyleClass().add("error-text"); - if (btcNetworkWarnMsgPopup == null) { - btcNetworkWarnMsgPopup = new Popup().warning(newValue); - btcNetworkWarnMsgPopup.show(); - } + xmrInfoLabel.setId("splash-error-state-msg"); + xmrInfoLabel.getStyleClass().add("error-text"); + // if (xmrNetworkWarnMsgPopup == null) { + // xmrNetworkWarnMsgPopup = new Popup().warning(newValue); + // xmrNetworkWarnMsgPopup.show(); + // } } else { - btcInfoLabel.setId("footer-pane"); - if (btcNetworkWarnMsgPopup != null) - btcNetworkWarnMsgPopup.hide(); + xmrInfoLabel.setId("footer-pane"); + // if (xmrNetworkWarnMsgPopup != null) + // xmrNetworkWarnMsgPopup.hide(); } }); @@ -787,7 +787,7 @@ public class MainView extends InitializableView<StackPane, MainViewModel> { setRightAnchor(vBox, 53d); setBottomAnchor(vBox, 5d); - return new AnchorPane(separator, btcInfoLabel, versionBox, vBox, p2PNetworkStatusIcon, p2PNetworkIcon) {{ + return new AnchorPane(separator, xmrInfoLabel, versionBox, vBox, p2PNetworkStatusIcon, p2PNetworkIcon) {{ setId("footer-pane"); setMinHeight(30); setMaxHeight(30); diff --git a/desktop/src/main/java/haveno/desktop/main/MainViewModel.java b/desktop/src/main/java/haveno/desktop/main/MainViewModel.java index 86ed1a25..2bed9752 100644 --- a/desktop/src/main/java/haveno/desktop/main/MainViewModel.java +++ b/desktop/src/main/java/haveno/desktop/main/MainViewModel.java @@ -260,7 +260,6 @@ public class MainViewModel implements ViewModel, HavenoSetup.HavenoSetupListener }); setupP2PNumPeersWatcher(); - setupXmrNumPeersWatcher(); marketPricePresentation.setup(); accountPresentation.setup(); @@ -421,7 +420,7 @@ public class MainViewModel implements ViewModel, HavenoSetup.HavenoSetupListener .warning(Res.get("popup.error.takeOfferRequestFailed", errorMessage)) .show()); - havenoSetup.getBtcSyncProgress().addListener((observable, oldValue, newValue) -> updateBtcSyncProgress()); + havenoSetup.getXmrSyncProgress().addListener((observable, oldValue, newValue) -> updateXmrSyncProgress()); havenoSetup.setFilterWarningHandler(warning -> new Popup().warning(warning).show()); @@ -496,36 +495,6 @@ public class MainViewModel implements ViewModel, HavenoSetup.HavenoSetupListener }); } - private void setupXmrNumPeersWatcher() { - connectionService.numPeersProperty().addListener((observable, oldValue, newValue) -> { - int numPeers = (int) newValue; - if ((int) oldValue > 0 && numPeers == 0) { - if (checkNumberOfXmrPeersTimer != null) - checkNumberOfXmrPeersTimer.stop(); - - checkNumberOfXmrPeersTimer = UserThread.runAfter(() -> { - // check again numPeers - if (connectionService.numPeersProperty().get() == 0) { - if (localBitcoinNode.shouldBeUsed()) - getWalletServiceErrorMsg().set( - Res.get("mainView.networkWarning.localhostBitcoinLost", // TODO: update error message for XMR - Res.getBaseCurrencyName().toLowerCase())); - else - getWalletServiceErrorMsg().set( - Res.get("mainView.networkWarning.allConnectionsLost", - Res.getBaseCurrencyName().toLowerCase())); - } else { - getWalletServiceErrorMsg().set(null); - } - }, 5); - } else if ((int) oldValue == 0 && numPeers > 0) { - if (checkNumberOfXmrPeersTimer != null) - checkNumberOfXmrPeersTimer.stop(); - getWalletServiceErrorMsg().set(null); - } - }); - } - private void showPopupIfInvalidBtcConfig() { preferences.setMoneroNodesOptionOrdinal(0); new Popup().warning(Res.get("settings.net.warn.invalidBtcConfig")) @@ -564,10 +533,10 @@ public class MainViewModel implements ViewModel, HavenoSetup.HavenoSetupListener } } - private void updateBtcSyncProgress() { - final DoubleProperty btcSyncProgress = havenoSetup.getBtcSyncProgress(); + private void updateXmrSyncProgress() { + final DoubleProperty xmrSyncProgress = havenoSetup.getXmrSyncProgress(); - combinedSyncProgress.set(btcSyncProgress.doubleValue()); + combinedSyncProgress.set(xmrSyncProgress.doubleValue()); } private void setupInvalidOpenOffersHandler() { @@ -637,9 +606,9 @@ public class MainViewModel implements ViewModel, HavenoSetup.HavenoSetupListener // Wallet - StringProperty getBtcInfo() { + StringProperty getXmrInfo() { final StringProperty combinedInfo = new SimpleStringProperty(); - combinedInfo.bind(havenoSetup.getBtcInfo()); + combinedInfo.bind(havenoSetup.getXmrInfo()); return combinedInfo; } @@ -657,12 +626,12 @@ public class MainViewModel implements ViewModel, HavenoSetup.HavenoSetupListener return havenoSetup.getWalletServiceErrorMsg(); } - StringProperty getBtcSplashSyncIconId() { - return havenoSetup.getBtcSplashSyncIconId(); + StringProperty getXmrSplashSyncIconId() { + return havenoSetup.getXmrSplashSyncIconId(); } - BooleanProperty getUseTorForBTC() { - return havenoSetup.getUseTorForBTC(); + BooleanProperty getUseTorForXMR() { + return havenoSetup.getUseTorForXMR(); } // P2P