show a warning dialog before refreshing a passphrase wallet where all the history has changed

This commit is contained in:
Craig Raw 2024-07-17 12:22:55 +02:00
parent fb1e1cefda
commit d894343457
2 changed files with 18 additions and 0 deletions

View file

@ -3051,6 +3051,8 @@ public class AppController implements Initializable {
public void requestWalletOpen(RequestWalletOpenEvent event) {
if(tabs.getScene().getWindow().equals(event.getWindow())) {
if(event.getFile() != null) {
Optional<Tab> optExisting = tabs.getTabs().stream().filter(tab -> tab.getUserData() instanceof WalletTabData walletTabData && walletTabData.getStorage().getWalletFile().equals(event.getFile())).findFirst();
optExisting.ifPresent(tab -> tabs.getTabs().remove(tab));
openWalletFile(event.getFile(), true);
} else {
openWallet(true);

View file

@ -20,6 +20,8 @@ import javafx.beans.property.BooleanProperty;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.scene.control.ButtonBar;
import javafx.scene.control.ButtonType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -164,6 +166,20 @@ public class WalletForm {
});
historyService.setOnFailed(workerStateEvent -> {
if(workerStateEvent.getSource().getException() instanceof AllHistoryChangedException) {
if(getWallet().isMasterWallet() && getWallet().getKeystores().stream().anyMatch(Keystore::needsPassphrase)) {
Optional<ButtonType> optType = AppServices.showWarningDialog("Reopen " + getWallet().getMasterName() + "?",
"It appears that the history of this wallet has changed, which may be caused by an incorrect passphrase. " +
"Note that any typos when entering the passphrase will create an entirely different wallet, with a correspondingly different history.\n\n" +
"You can proceed with a full refresh of this wallet, or you can reopen it to enter the passphrase again.",
new ButtonType("Refresh Wallet", ButtonBar.ButtonData.CANCEL_CLOSE),
new ButtonType("Reopen Wallet", ButtonBar.ButtonData.OK_DONE));
if(optType.isPresent() && optType.get().getButtonData() == ButtonBar.ButtonData.OK_DONE) {
EventManager.get().post(new RequestWalletOpenEvent(AppServices.get().getWindowForWallet(getWalletId()), getStorage().getWalletFile()));
return;
}
}
try {
storage.backupWallet();
} catch(IOException e) {