refactor monero connection initialization

re-prioritize default connections
monero network status turns red on connection error
remove popup on connection error
remove popup on 0 monero peers which aren't reported
increase main wallet max sync attempts on startup
renames from btc to xmr
This commit is contained in:
woodser 2023-07-30 09:14:22 -04:00
parent 12b6585779
commit 473100620e
23 changed files with 283 additions and 325 deletions

View file

@ -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);

View file

@ -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