manage monero connections from ui #623

use tor for all monero connections by default
renames from btc to xmr
updated translations
This commit is contained in:
woodser 2023-06-05 12:55:32 -04:00
parent 1faedc8121
commit 06be2a4829
45 changed files with 681 additions and 663 deletions

View file

@ -554,7 +554,7 @@ public class MainViewModel implements ViewModel, HavenoSetup.HavenoSetupListener
}
private void showPopupIfInvalidBtcConfig() {
preferences.setBitcoinNodesOptionOrdinal(0);
preferences.setMoneroNodesOptionOrdinal(0);
new Popup().warning(Res.get("settings.net.warn.invalidBtcConfig"))
.hideCloseButton()
.useShutDownButton()

View file

@ -95,7 +95,7 @@ class DepositListItem {
}
private void updateUsage(int subaddressIndex, List<MoneroTxWallet> cachedTxs) {
numTxsWithOutputs = XmrWalletService.getTxsWithIncomingOutputs(cachedTxs, addressEntry.getSubaddressIndex()).size();
numTxsWithOutputs = XmrWalletService.getTxsWithIncomingOutputs(addressEntry.getSubaddressIndex(), cachedTxs).size();
usage = subaddressIndex == 0 ? "Base address" : numTxsWithOutputs == 0 ? Res.get("funds.deposit.unused") : Res.get("funds.deposit.usedInTx", numTxsWithOutputs);
}
@ -143,7 +143,7 @@ class DepositListItem {
private MoneroTxWallet getTxWithFewestConfirmations(List<MoneroTxWallet> allIncomingTxs) {
// get txs with incoming outputs to subaddress index
List<MoneroTxWallet> txs = XmrWalletService.getTxsWithIncomingOutputs(allIncomingTxs, addressEntry.getSubaddressIndex());
List<MoneroTxWallet> txs = XmrWalletService.getTxsWithIncomingOutputs(addressEntry.getSubaddressIndex(), allIncomingTxs);
// get tx with fewest confirmations
MoneroTxWallet highestTx = null;

View file

@ -145,8 +145,8 @@ public class FilterWindow extends Overlay<FilterWindow> {
Res.get("filterWindow.seedNode"));
InputTextField priceRelayNodesTF = addInputTextField(gridPane, ++rowIndex,
Res.get("filterWindow.priceRelayNode"));
InputTextField btcNodesTF = addInputTextField(gridPane, ++rowIndex,
Res.get("filterWindow.btcNode"));
InputTextField xmrNodesTF = addInputTextField(gridPane, ++rowIndex,
Res.get("filterWindow.xmrNode"));
CheckBox preventPublicBtcNetworkCheckBox = addLabelCheckBox(gridPane, ++rowIndex,
Res.get("filterWindow.preventPublicBtcNetwork"));
CheckBox disableAutoConfCheckBox = addLabelCheckBox(gridPane, ++rowIndex,
@ -177,7 +177,7 @@ public class FilterWindow extends Overlay<FilterWindow> {
setupFieldFromList(btcFeeReceiverAddressesTF, filter.getBtcFeeReceiverAddresses());
setupFieldFromList(seedNodesTF, filter.getSeedNodes());
setupFieldFromList(priceRelayNodesTF, filter.getPriceRelayNodes());
setupFieldFromList(btcNodesTF, filter.getBtcNodes());
setupFieldFromList(xmrNodesTF, filter.getXmrNodes());
setupFieldFromList(bannedPrivilegedDevPubKeysTF, filter.getBannedPrivilegedDevPubKeys());
setupFieldFromList(autoConfExplorersTF, filter.getBannedAutoConfExplorers());
@ -206,7 +206,7 @@ public class FilterWindow extends Overlay<FilterWindow> {
readAsList(seedNodesTF),
readAsList(priceRelayNodesTF),
preventPublicBtcNetworkCheckBox.isSelected(),
readAsList(btcNodesTF),
readAsList(xmrNodesTF),
disableTradeBelowVersionTF.getText(),
readAsList(mediatorsTF),
readAsList(refundAgentsTF),

View file

@ -45,7 +45,7 @@
<TitledGroupBg fx:id="btcHeader" GridPane.rowSpan="5"/>
<VBox GridPane.rowIndex="0" GridPane.hgrow="ALWAYS" GridPane.vgrow="SOMETIMES">
<AutoTooltipLabel fx:id="bitcoinPeersLabel" styleClass="small-text"/>
<AutoTooltipLabel fx:id="moneroPeersLabel" styleClass="small-text"/>
<TableView fx:id="moneroPeersTableView">
<columns>
<TableColumn fx:id="moneroPeerAddressColumn" minWidth="220">
@ -70,13 +70,13 @@
</TableColumn>
</columns>
</TableView>
<AutoTooltipLabel fx:id="localhostBtcNodeInfoLabel" styleClass="small-text"/>
<AutoTooltipLabel fx:id="localhostXmrNodeInfoLabel" styleClass="small-text"/>
</VBox>
<AutoTooltipCheckBox fx:id="useTorForBtcJCheckBox" GridPane.rowIndex="1"/>
<AutoTooltipCheckBox fx:id="useTorForXmrJCheckBox" GridPane.rowIndex="1"/>
<VBox GridPane.rowIndex="2">
<AutoTooltipLabel fx:id="bitcoinNodesLabel" styleClass="small-text"/>
<AutoTooltipLabel fx:id="moneroNodesLabel" styleClass="small-text"/>
<HBox spacing="10">
<AutoTooltipRadioButton fx:id="useProvidedNodesRadio"/>
<AutoTooltipRadioButton fx:id="useCustomNodesRadio"/>
@ -85,8 +85,8 @@
</VBox>
<VBox GridPane.rowIndex="3">
<AutoTooltipLabel fx:id="btcNodesLabel" styleClass="small-text"/>
<InputTextField fx:id="btcNodesInputTextField"/>
<AutoTooltipLabel fx:id="xmrNodesLabel" styleClass="small-text"/>
<InputTextField fx:id="xmrNodesInputTextField"/>
</VBox>
<VBox GridPane.rowIndex="4">

View file

@ -27,7 +27,7 @@ import haveno.core.user.Preferences;
import haveno.core.util.FormattingUtils;
import haveno.core.util.validation.RegexValidator;
import haveno.core.util.validation.RegexValidatorFactory;
import haveno.core.xmr.nodes.BtcNodes;
import haveno.core.xmr.nodes.XmrNodes;
import haveno.core.xmr.nodes.LocalBitcoinNode;
import haveno.core.xmr.setup.WalletsSetup;
import haveno.desktop.app.HavenoApp;
@ -75,15 +75,15 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
@FXML
TitledGroupBg p2pHeader, btcHeader;
@FXML
Label btcNodesLabel, bitcoinNodesLabel, localhostBtcNodeInfoLabel;
Label xmrNodesLabel, moneroNodesLabel, localhostXmrNodeInfoLabel;
@FXML
InputTextField btcNodesInputTextField;
InputTextField xmrNodesInputTextField;
@FXML
TextField onionAddress, sentDataTextField, receivedDataTextField, chainHeightTextField;
@FXML
Label p2PPeersLabel, bitcoinPeersLabel;
Label p2PPeersLabel, moneroPeersLabel;
@FXML
CheckBox useTorForBtcJCheckBox;
CheckBox useTorForXmrJCheckBox;
@FXML
RadioButton useProvidedNodesRadio, useCustomNodesRadio, usePublicNodesRadio;
@FXML
@ -102,7 +102,7 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
AutoTooltipButton reSyncSPVChainButton, openTorSettingsButton;
private final Preferences preferences;
private final BtcNodes btcNodes;
private final XmrNodes xmrNodes;
private final FilterManager filterManager;
private final LocalBitcoinNode localBitcoinNode;
private final TorNetworkSettingsWindow torNetworkSettingsWindow;
@ -121,10 +121,10 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
private Subscription moneroPeersSubscription;
private Subscription moneroBlockHeightSubscription;
private Subscription nodeAddressSubscription;
private ChangeListener<Boolean> btcNodesInputTextFieldFocusListener;
private ToggleGroup bitcoinPeersToggleGroup;
private BtcNodes.BitcoinNodesOption selectedBitcoinNodesOption;
private ChangeListener<Toggle> bitcoinPeersToggleGroupListener;
private ChangeListener<Boolean> xmrNodesInputTextFieldFocusListener;
private ToggleGroup moneroPeersToggleGroup;
private XmrNodes.MoneroNodesOption selectedMoneroNodesOption;
private ChangeListener<Toggle> moneroPeersToggleGroupListener;
private ChangeListener<Filter> filterPropertyListener;
@Inject
@ -132,7 +132,7 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
P2PService p2PService,
CoreMoneroConnectionsService connectionManager,
Preferences preferences,
BtcNodes btcNodes,
XmrNodes xmrNodes,
FilterManager filterManager,
LocalBitcoinNode localBitcoinNode,
TorNetworkSettingsWindow torNetworkSettingsWindow,
@ -142,7 +142,7 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
this.p2PService = p2PService;
this.connectionManager = connectionManager;
this.preferences = preferences;
this.btcNodes = btcNodes;
this.xmrNodes = xmrNodes;
this.filterManager = filterManager;
this.localBitcoinNode = localBitcoinNode;
this.torNetworkSettingsWindow = torNetworkSettingsWindow;
@ -154,16 +154,16 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
btcHeader.setText(Res.get("settings.net.btcHeader"));
p2pHeader.setText(Res.get("settings.net.p2pHeader"));
onionAddress.setPromptText(Res.get("settings.net.onionAddressLabel"));
btcNodesLabel.setText(Res.get("settings.net.btcNodesLabel"));
bitcoinPeersLabel.setText(Res.get("settings.net.bitcoinPeersLabel"));
useTorForBtcJCheckBox.setText(Res.get("settings.net.useTorForBtcJLabel"));
bitcoinNodesLabel.setText(Res.get("settings.net.bitcoinNodesLabel"));
xmrNodesLabel.setText(Res.get("settings.net.xmrNodesLabel"));
moneroPeersLabel.setText(Res.get("settings.net.moneroPeersLabel"));
useTorForXmrJCheckBox.setText(Res.get("settings.net.useTorForXmrJLabel"));
moneroNodesLabel.setText(Res.get("settings.net.moneroNodesLabel"));
moneroPeerAddressColumn.setGraphic(new AutoTooltipLabel(Res.get("settings.net.onionAddressColumn")));
moneroPeerAddressColumn.getStyleClass().add("first-column");
moneroPeerVersionColumn.setGraphic(new AutoTooltipLabel(Res.get("settings.net.versionColumn")));
moneroPeerSubVersionColumn.setGraphic(new AutoTooltipLabel(Res.get("settings.net.subVersionColumn")));
moneroPeerHeightColumn.setGraphic(new AutoTooltipLabel(Res.get("settings.net.heightColumn")));
localhostBtcNodeInfoLabel.setText(Res.get("settings.net.localhostBtcNodeInfo"));
localhostXmrNodeInfoLabel.setText(Res.get("settings.net.localhostXmrNodeInfo"));
useProvidedNodesRadio.setText(Res.get("settings.net.useProvidedNodesRadio"));
useCustomNodesRadio.setText(Res.get("settings.net.useCustomNodesRadio"));
usePublicNodesRadio.setText(Res.get("settings.net.usePublicNodesRadio"));
@ -184,8 +184,8 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
peerTypeColumn.getStyleClass().add("last-column");
openTorSettingsButton.updateText(Res.get("settings.net.openTorSettingsButton"));
GridPane.setMargin(bitcoinPeersLabel, new Insets(4, 0, 0, 0));
GridPane.setValignment(bitcoinPeersLabel, VPos.TOP);
GridPane.setMargin(moneroPeersLabel, new Insets(4, 0, 0, 0));
GridPane.setValignment(moneroPeersLabel, VPos.TOP);
GridPane.setMargin(p2PPeersLabel, new Insets(4, 0, 0, 0));
GridPane.setValignment(p2PPeersLabel, VPos.TOP);
@ -205,44 +205,45 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
p2pPeersTableView.getSortOrder().add(creationDateColumn);
creationDateColumn.setSortType(TableColumn.SortType.ASCENDING);
bitcoinPeersToggleGroup = new ToggleGroup();
useProvidedNodesRadio.setToggleGroup(bitcoinPeersToggleGroup);
useCustomNodesRadio.setToggleGroup(bitcoinPeersToggleGroup);
usePublicNodesRadio.setToggleGroup(bitcoinPeersToggleGroup);
moneroPeersToggleGroup = new ToggleGroup();
useProvidedNodesRadio.setToggleGroup(moneroPeersToggleGroup);
useCustomNodesRadio.setToggleGroup(moneroPeersToggleGroup);
usePublicNodesRadio.setToggleGroup(moneroPeersToggleGroup);
useProvidedNodesRadio.setUserData(BtcNodes.BitcoinNodesOption.PROVIDED);
useCustomNodesRadio.setUserData(BtcNodes.BitcoinNodesOption.CUSTOM);
usePublicNodesRadio.setUserData(BtcNodes.BitcoinNodesOption.PUBLIC);
useProvidedNodesRadio.setUserData(XmrNodes.MoneroNodesOption.PROVIDED);
useCustomNodesRadio.setUserData(XmrNodes.MoneroNodesOption.CUSTOM);
usePublicNodesRadio.setUserData(XmrNodes.MoneroNodesOption.PUBLIC);
selectedBitcoinNodesOption = BtcNodes.BitcoinNodesOption.values()[preferences.getBitcoinNodesOptionOrdinal()];
selectedMoneroNodesOption = XmrNodes.MoneroNodesOption.values()[preferences.getMoneroNodesOptionOrdinal()];
// In case CUSTOM is selected but no custom nodes are set or
// in case PUBLIC is selected but we blocked it (B2X risk) we revert to provided nodes
if ((selectedBitcoinNodesOption == BtcNodes.BitcoinNodesOption.CUSTOM &&
(preferences.getBitcoinNodes() == null || preferences.getBitcoinNodes().isEmpty())) ||
(selectedBitcoinNodesOption == BtcNodes.BitcoinNodesOption.PUBLIC && isPreventPublicBtcNetwork())) {
selectedBitcoinNodesOption = BtcNodes.BitcoinNodesOption.PROVIDED;
preferences.setBitcoinNodesOptionOrdinal(selectedBitcoinNodesOption.ordinal());
if ((selectedMoneroNodesOption == XmrNodes.MoneroNodesOption.CUSTOM &&
(preferences.getMoneroNodes() == null || preferences.getMoneroNodes().isEmpty())) ||
(selectedMoneroNodesOption == XmrNodes.MoneroNodesOption.PUBLIC && isPreventPublicXmrNetwork())) {
selectedMoneroNodesOption = XmrNodes.MoneroNodesOption.PROVIDED;
preferences.setMoneroNodesOptionOrdinal(selectedMoneroNodesOption.ordinal());
}
selectBitcoinPeersToggle();
onBitcoinPeersToggleSelected(false);
selectMoneroPeersToggle();
onMoneroPeersToggleSelected(false);
bitcoinPeersToggleGroupListener = (observable, oldValue, newValue) -> {
moneroPeersToggleGroupListener = (observable, oldValue, newValue) -> {
if (newValue != null) {
selectedBitcoinNodesOption = (BtcNodes.BitcoinNodesOption) newValue.getUserData();
onBitcoinPeersToggleSelected(true);
selectedMoneroNodesOption = (XmrNodes.MoneroNodesOption) newValue.getUserData();
onMoneroPeersToggleSelected(true);
}
};
btcNodesInputTextField.setPromptText(Res.get("settings.net.ips"));
xmrNodesInputTextField.setPromptText(Res.get("settings.net.ips"));
RegexValidator regexValidator = RegexValidatorFactory.addressRegexValidator();
btcNodesInputTextField.setValidator(regexValidator);
btcNodesInputTextField.setErrorMessage(Res.get("validation.invalidAddressList"));
btcNodesInputTextFieldFocusListener = (observable, oldValue, newValue) -> {
xmrNodesInputTextField.setValidator(regexValidator);
xmrNodesInputTextField.setErrorMessage(Res.get("validation.invalidAddressList"));
xmrNodesInputTextFieldFocusListener = (observable, oldValue, newValue) -> {
if (oldValue && !newValue
&& !btcNodesInputTextField.getText().equals(preferences.getBitcoinNodes())
&& btcNodesInputTextField.validate()) {
preferences.setBitcoinNodes(btcNodesInputTextField.getText());
&& !xmrNodesInputTextField.getText().equals(preferences.getMoneroNodes())
&& xmrNodesInputTextField.validate()) {
preferences.setMoneroNodes(xmrNodesInputTextField.getText());
preferences.setMoneroNodesOptionOrdinal(selectedMoneroNodesOption.ordinal());
showShutDownPopup();
}
};
@ -259,25 +260,25 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
@Override
public void activate() {
bitcoinPeersToggleGroup.selectedToggleProperty().addListener(bitcoinPeersToggleGroupListener);
moneroPeersToggleGroup.selectedToggleProperty().addListener(moneroPeersToggleGroupListener);
if (filterManager.getFilter() != null)
applyPreventPublicBtcNetwork();
filterManager.filterProperty().addListener(filterPropertyListener);
useTorForBtcJCheckBox.setSelected(preferences.getUseTorForBitcoinJ());
useTorForBtcJCheckBox.setOnAction(event -> {
boolean selected = useTorForBtcJCheckBox.isSelected();
if (selected != preferences.getUseTorForBitcoinJ()) {
useTorForXmrJCheckBox.setSelected(preferences.getUseTorForMonero());
useTorForXmrJCheckBox.setOnAction(event -> {
boolean selected = useTorForXmrJCheckBox.isSelected();
if (selected != preferences.getUseTorForMonero()) {
new Popup().information(Res.get("settings.net.needRestart"))
.actionButtonText(Res.get("shared.applyAndShutDown"))
.onAction(() -> {
preferences.setUseTorForBitcoinJ(selected);
preferences.setUseTorForMonero(selected);
UserThread.runAfter(HavenoApp.getShutDownHandler(), 500, TimeUnit.MILLISECONDS);
})
.closeButtonText(Res.get("shared.cancel"))
.onClose(() -> useTorForBtcJCheckBox.setSelected(!selected))
.onClose(() -> useTorForXmrJCheckBox.setSelected(!selected))
.show();
}
});
@ -314,19 +315,19 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
p2pSortedList.comparatorProperty().bind(p2pPeersTableView.comparatorProperty());
p2pPeersTableView.setItems(p2pSortedList);
btcNodesInputTextField.setText(preferences.getBitcoinNodes());
xmrNodesInputTextField.setText(preferences.getMoneroNodes());
btcNodesInputTextField.focusedProperty().addListener(btcNodesInputTextFieldFocusListener);
xmrNodesInputTextField.focusedProperty().addListener(xmrNodesInputTextFieldFocusListener);
openTorSettingsButton.setOnAction(e -> torNetworkSettingsWindow.show());
}
@Override
public void deactivate() {
bitcoinPeersToggleGroup.selectedToggleProperty().removeListener(bitcoinPeersToggleGroupListener);
moneroPeersToggleGroup.selectedToggleProperty().removeListener(moneroPeersToggleGroupListener);
filterManager.filterProperty().removeListener(filterPropertyListener);
useTorForBtcJCheckBox.setOnAction(null);
useTorForXmrJCheckBox.setOnAction(null);
if (nodeAddressSubscription != null)
nodeAddressSubscription.unsubscribe();
@ -346,29 +347,27 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
moneroSortedList.comparatorProperty().unbind();
p2pSortedList.comparatorProperty().unbind();
p2pPeersTableView.getItems().forEach(P2pNetworkListItem::cleanup);
btcNodesInputTextField.focusedProperty().removeListener(btcNodesInputTextFieldFocusListener);
xmrNodesInputTextField.focusedProperty().removeListener(xmrNodesInputTextFieldFocusListener);
openTorSettingsButton.setOnAction(null);
}
private boolean isPreventPublicBtcNetwork() {
return true;
//TODO: re-enable it if we are able to check for core nodes that have the correct configuration
// return filterManager.getFilter() != null &&
// filterManager.getFilter().isPreventPublicBtcNetwork();
private boolean isPreventPublicXmrNetwork() {
return filterManager.getFilter() != null &&
filterManager.getFilter().isPreventPublicBtcNetwork();
}
private void selectBitcoinPeersToggle() {
switch (selectedBitcoinNodesOption) {
private void selectMoneroPeersToggle() {
switch (selectedMoneroNodesOption) {
case CUSTOM:
bitcoinPeersToggleGroup.selectToggle(useCustomNodesRadio);
moneroPeersToggleGroup.selectToggle(useCustomNodesRadio);
break;
case PUBLIC:
bitcoinPeersToggleGroup.selectToggle(usePublicNodesRadio);
moneroPeersToggleGroup.selectToggle(usePublicNodesRadio);
break;
default:
case PROVIDED:
bitcoinPeersToggleGroup.selectToggle(useProvidedNodesRadio);
moneroPeersToggleGroup.selectToggle(useProvidedNodesRadio);
break;
}
}
@ -381,28 +380,28 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
.show();
}
private void onBitcoinPeersToggleSelected(boolean calledFromUser) {
private void onMoneroPeersToggleSelected(boolean calledFromUser) {
boolean localBitcoinNodeShouldBeUsed = localBitcoinNode.shouldBeUsed();
useTorForBtcJCheckBox.setDisable(localBitcoinNodeShouldBeUsed);
bitcoinNodesLabel.setDisable(localBitcoinNodeShouldBeUsed);
btcNodesLabel.setDisable(localBitcoinNodeShouldBeUsed);
btcNodesInputTextField.setDisable(localBitcoinNodeShouldBeUsed);
useProvidedNodesRadio.setDisable(localBitcoinNodeShouldBeUsed || !btcNodes.useProvidedBtcNodes());
useTorForXmrJCheckBox.setDisable(localBitcoinNodeShouldBeUsed);
moneroNodesLabel.setDisable(localBitcoinNodeShouldBeUsed);
xmrNodesLabel.setDisable(localBitcoinNodeShouldBeUsed);
xmrNodesInputTextField.setDisable(localBitcoinNodeShouldBeUsed);
useProvidedNodesRadio.setDisable(localBitcoinNodeShouldBeUsed);
useCustomNodesRadio.setDisable(localBitcoinNodeShouldBeUsed);
usePublicNodesRadio.setDisable(localBitcoinNodeShouldBeUsed || isPreventPublicBtcNetwork());
usePublicNodesRadio.setDisable(localBitcoinNodeShouldBeUsed || isPreventPublicXmrNetwork());
BtcNodes.BitcoinNodesOption currentBitcoinNodesOption = BtcNodes.BitcoinNodesOption.values()[preferences.getBitcoinNodesOptionOrdinal()];
XmrNodes.MoneroNodesOption currentBitcoinNodesOption = XmrNodes.MoneroNodesOption.values()[preferences.getMoneroNodesOptionOrdinal()];
switch (selectedBitcoinNodesOption) {
switch (selectedMoneroNodesOption) {
case CUSTOM:
btcNodesInputTextField.setDisable(false);
btcNodesLabel.setDisable(false);
if (!btcNodesInputTextField.getText().isEmpty()
&& btcNodesInputTextField.validate()
&& currentBitcoinNodesOption != BtcNodes.BitcoinNodesOption.CUSTOM) {
preferences.setBitcoinNodesOptionOrdinal(selectedBitcoinNodesOption.ordinal());
xmrNodesInputTextField.setDisable(false);
xmrNodesLabel.setDisable(false);
if (!xmrNodesInputTextField.getText().isEmpty()
&& xmrNodesInputTextField.validate()
&& currentBitcoinNodesOption != XmrNodes.MoneroNodesOption.CUSTOM) {
preferences.setMoneroNodesOptionOrdinal(selectedMoneroNodesOption.ordinal());
if (calledFromUser) {
if (isPreventPublicBtcNetwork()) {
if (isPreventPublicXmrNetwork()) {
new Popup().warning(Res.get("settings.net.warn.useCustomNodes.B2XWarning"))
.onAction(() -> UserThread.runAfter(this::showShutDownPopup, 300, TimeUnit.MILLISECONDS)).show();
} else {
@ -412,19 +411,19 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
}
break;
case PUBLIC:
btcNodesInputTextField.setDisable(true);
btcNodesLabel.setDisable(true);
if (currentBitcoinNodesOption != BtcNodes.BitcoinNodesOption.PUBLIC) {
preferences.setBitcoinNodesOptionOrdinal(selectedBitcoinNodesOption.ordinal());
xmrNodesInputTextField.setDisable(true);
xmrNodesLabel.setDisable(true);
if (currentBitcoinNodesOption != XmrNodes.MoneroNodesOption.PUBLIC) {
preferences.setMoneroNodesOptionOrdinal(selectedMoneroNodesOption.ordinal());
if (calledFromUser) {
new Popup()
.warning(Res.get("settings.net.warn.usePublicNodes"))
.actionButtonText(Res.get("settings.net.warn.usePublicNodes.useProvided"))
.onAction(() -> UserThread.runAfter(() -> {
selectedBitcoinNodesOption = BtcNodes.BitcoinNodesOption.PROVIDED;
preferences.setBitcoinNodesOptionOrdinal(selectedBitcoinNodesOption.ordinal());
selectBitcoinPeersToggle();
onBitcoinPeersToggleSelected(false);
selectedMoneroNodesOption = XmrNodes.MoneroNodesOption.PROVIDED;
preferences.setMoneroNodesOptionOrdinal(selectedMoneroNodesOption.ordinal());
selectMoneroPeersToggle();
onMoneroPeersToggleSelected(false);
}, 300, TimeUnit.MILLISECONDS))
.closeButtonText(Res.get("settings.net.warn.usePublicNodes.usePublic"))
.onClose(() -> UserThread.runAfter(this::showShutDownPopup, 300, TimeUnit.MILLISECONDS))
@ -434,20 +433,13 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
break;
default:
case PROVIDED:
if (btcNodes.useProvidedBtcNodes()) {
btcNodesInputTextField.setDisable(true);
btcNodesLabel.setDisable(true);
if (currentBitcoinNodesOption != BtcNodes.BitcoinNodesOption.PROVIDED) {
preferences.setBitcoinNodesOptionOrdinal(selectedBitcoinNodesOption.ordinal());
if (calledFromUser) {
showShutDownPopup();
}
xmrNodesInputTextField.setDisable(true);
xmrNodesLabel.setDisable(true);
if (currentBitcoinNodesOption != XmrNodes.MoneroNodesOption.PROVIDED) {
preferences.setMoneroNodesOptionOrdinal(selectedMoneroNodesOption.ordinal());
if (calledFromUser) {
showShutDownPopup();
}
} else {
selectedBitcoinNodesOption = BtcNodes.BitcoinNodesOption.PUBLIC;
preferences.setBitcoinNodesOptionOrdinal(selectedBitcoinNodesOption.ordinal());
selectBitcoinPeersToggle();
onBitcoinPeersToggleSelected(false);
}
break;
}
@ -455,13 +447,13 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
private void applyPreventPublicBtcNetwork() {
final boolean preventPublicBtcNetwork = isPreventPublicBtcNetwork();
final boolean preventPublicBtcNetwork = isPreventPublicXmrNetwork();
usePublicNodesRadio.setDisable(localBitcoinNode.shouldBeUsed() || preventPublicBtcNetwork);
if (preventPublicBtcNetwork && selectedBitcoinNodesOption == BtcNodes.BitcoinNodesOption.PUBLIC) {
selectedBitcoinNodesOption = BtcNodes.BitcoinNodesOption.PROVIDED;
preferences.setBitcoinNodesOptionOrdinal(selectedBitcoinNodesOption.ordinal());
selectBitcoinPeersToggle();
onBitcoinPeersToggleSelected(false);
if (preventPublicBtcNetwork && selectedMoneroNodesOption == XmrNodes.MoneroNodesOption.PUBLIC) {
selectedMoneroNodesOption = XmrNodes.MoneroNodesOption.PROVIDED;
preferences.setMoneroNodesOptionOrdinal(selectedMoneroNodesOption.ordinal());
selectMoneroPeersToggle();
onMoneroPeersToggleSelected(false);
}
}
@ -475,9 +467,11 @@ public class NetworkSettingsView extends ActivatableView<GridPane, Void> {
private void updateMoneroPeersTable(List<MoneroPeer> peers) {
moneroNetworkListItems.clear();
moneroNetworkListItems.setAll(peers.stream()
.map(MoneroNetworkListItem::new)
.collect(Collectors.toList()));
if (peers != null) {
moneroNetworkListItems.setAll(peers.stream()
.map(MoneroNetworkListItem::new)
.collect(Collectors.toList()));
}
}
private void updateChainHeightTextField(Number chainHeight) {