suggest connecting to broadcast a finalized transaction if offlineand a server is configured

This commit is contained in:
Craig Raw 2025-06-05 09:40:17 +02:00
parent 799cac7b1f
commit 25770c2426
3 changed files with 67 additions and 0 deletions

View file

@ -0,0 +1,39 @@
package com.sparrowwallet.sparrow.control;
import com.sparrowwallet.sparrow.AppServices;
import javafx.geometry.Insets;
import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import static com.sparrowwallet.sparrow.AppServices.getActiveWindow;
import static com.sparrowwallet.sparrow.AppServices.setStageIcon;
public class ConfirmationAlert extends Alert {
private final CheckBox dontAskAgain;
public ConfirmationAlert(String title, String contentText, ButtonType... buttons) {
super(AlertType.CONFIRMATION, contentText, buttons);
initOwner(getActiveWindow());
setStageIcon(getDialogPane().getScene().getWindow());
getDialogPane().getScene().getStylesheets().add(AppServices.class.getResource("general.css").toExternalForm());
setTitle(title);
setHeaderText(title);
VBox contentBox = new VBox(20);
contentBox.setPadding(new Insets(10, 20, 10, 20));
Label contentLabel = new Label(contentText);
contentLabel.setWrapText(true);
dontAskAgain = new CheckBox("Don't ask again");
contentBox.getChildren().addAll(contentLabel, dontAskAgain);
getDialogPane().setContent(contentBox);
}
public boolean isDontAskAgain() {
return dontAskAgain.isSelected();
}
}

View file

@ -52,6 +52,7 @@ public class Config {
private boolean showDeprecatedImportExport = false; private boolean showDeprecatedImportExport = false;
private boolean signBsmsExports = false; private boolean signBsmsExports = false;
private boolean preventSleep = false; private boolean preventSleep = false;
private Boolean connectToBroadcast;
private List<File> recentWalletFiles; private List<File> recentWalletFiles;
private Integer keyDerivationPeriod; private Integer keyDerivationPeriod;
private long dustAttackThreshold = DUST_ATTACK_THRESHOLD_SATS; private long dustAttackThreshold = DUST_ATTACK_THRESHOLD_SATS;
@ -348,6 +349,16 @@ public class Config {
public void setPreventSleep(boolean preventSleep) { public void setPreventSleep(boolean preventSleep) {
this.preventSleep = preventSleep; this.preventSleep = preventSleep;
flush();
}
public Boolean getConnectToBroadcast() {
return connectToBroadcast;
}
public void setConnectToBroadcast(Boolean connectToBroadcast) {
this.connectToBroadcast = connectToBroadcast;
flush();
} }
public List<File> getRecentWalletFiles() { public List<File> getRecentWalletFiles() {

View file

@ -1559,6 +1559,23 @@ public class HeadersController extends TransactionFormController implements Init
signButtonBox.setVisible(false); signButtonBox.setVisible(false);
broadcastButtonBox.setVisible(true); broadcastButtonBox.setVisible(true);
if(Config.get().hasServer() && !AppServices.isConnected() && !AppServices.isConnecting()) {
if(Config.get().getConnectToBroadcast() == null) {
Platform.runLater(() -> {
ConfirmationAlert confirmationAlert = new ConfirmationAlert("Connect to broadcast?", "Connect to the configured server to broadcast the transaction?", ButtonType.NO, ButtonType.YES);
Optional<ButtonType> optType = confirmationAlert.showAndWait();
if(confirmationAlert.isDontAskAgain() && optType.isPresent()) {
Config.get().setConnectToBroadcast(optType.get() == ButtonType.YES);
}
if(optType.isPresent() && optType.get() == ButtonType.YES) {
EventManager.get().post(new RequestConnectEvent());
}
});
} else if(Config.get().getConnectToBroadcast()) {
Platform.runLater(() -> EventManager.get().post(new RequestConnectEvent()));
}
}
} }
} }