mirror of
https://github.com/sparrowwallet/sparrow.git
synced 2025-11-05 11:56:37 +00:00
fix various minor issues around multisig keystore labelling and export button visibility
This commit is contained in:
parent
5c29bf51b7
commit
d0c827c2c7
4 changed files with 46 additions and 23 deletions
2
drongo
2
drongo
|
|
@ -1 +1 @@
|
||||||
Subproject commit f7d5b4fb8fb0cbc2192a0f76fb4a1ef79a35d811
|
Subproject commit 419ed1a6993de6e400de9ddc6e942f8d97b1522b
|
||||||
2
lark
2
lark
|
|
@ -1 +1 @@
|
||||||
Subproject commit c4c7ca8da3a26e97c181a456eff5401b1bb7c1cc
|
Subproject commit fd7d0b7fa58c0667e2eab2f7833591dadb19c684
|
||||||
|
|
@ -3,6 +3,7 @@ package com.sparrowwallet.sparrow.keystoreimport;
|
||||||
import com.google.common.eventbus.Subscribe;
|
import com.google.common.eventbus.Subscribe;
|
||||||
import com.sparrowwallet.drongo.KeyDerivation;
|
import com.sparrowwallet.drongo.KeyDerivation;
|
||||||
import com.sparrowwallet.drongo.Network;
|
import com.sparrowwallet.drongo.Network;
|
||||||
|
import com.sparrowwallet.drongo.protocol.ScriptType;
|
||||||
import com.sparrowwallet.drongo.wallet.Keystore;
|
import com.sparrowwallet.drongo.wallet.Keystore;
|
||||||
import com.sparrowwallet.drongo.wallet.KeystoreSource;
|
import com.sparrowwallet.drongo.wallet.KeystoreSource;
|
||||||
import com.sparrowwallet.drongo.wallet.Wallet;
|
import com.sparrowwallet.drongo.wallet.Wallet;
|
||||||
|
|
@ -10,6 +11,7 @@ import com.sparrowwallet.drongo.wallet.WalletModel;
|
||||||
import com.sparrowwallet.sparrow.AppServices;
|
import com.sparrowwallet.sparrow.AppServices;
|
||||||
import com.sparrowwallet.sparrow.EventManager;
|
import com.sparrowwallet.sparrow.EventManager;
|
||||||
import com.sparrowwallet.sparrow.event.KeystoreImportEvent;
|
import com.sparrowwallet.sparrow.event.KeystoreImportEvent;
|
||||||
|
import com.sparrowwallet.sparrow.wallet.KeystoreController;
|
||||||
import javafx.fxml.FXMLLoader;
|
import javafx.fxml.FXMLLoader;
|
||||||
import javafx.scene.control.*;
|
import javafx.scene.control.*;
|
||||||
import org.controlsfx.tools.Borders;
|
import org.controlsfx.tools.Borders;
|
||||||
|
|
@ -20,16 +22,18 @@ import java.util.List;
|
||||||
public class KeystoreImportDialog extends Dialog<Keystore> {
|
public class KeystoreImportDialog extends Dialog<Keystore> {
|
||||||
private final KeystoreImportController keystoreImportController;
|
private final KeystoreImportController keystoreImportController;
|
||||||
private Keystore keystore;
|
private Keystore keystore;
|
||||||
|
private final ScriptType scriptType;
|
||||||
|
private final String existingLabel;
|
||||||
|
|
||||||
public KeystoreImportDialog(Wallet wallet) {
|
public KeystoreImportDialog(Wallet wallet) {
|
||||||
this(wallet, KeystoreSource.HW_USB);
|
this(wallet, KeystoreSource.HW_USB);
|
||||||
}
|
}
|
||||||
|
|
||||||
public KeystoreImportDialog(Wallet wallet, KeystoreSource initialSource) {
|
public KeystoreImportDialog(Wallet wallet, KeystoreSource initialSource) {
|
||||||
this(wallet, initialSource, null, null, false);
|
this(wallet, initialSource, null, null, Keystore.DEFAULT_LABEL, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public KeystoreImportDialog(Wallet wallet, KeystoreSource initialSource, KeyDerivation currentDerivation, WalletModel currentModel, boolean restrictImport) {
|
public KeystoreImportDialog(Wallet wallet, KeystoreSource initialSource, KeyDerivation currentDerivation, WalletModel currentModel, String currentLabel, boolean restrictImport) {
|
||||||
EventManager.get().register(this);
|
EventManager.get().register(this);
|
||||||
setOnCloseRequest(event -> {
|
setOnCloseRequest(event -> {
|
||||||
EventManager.get().unregister(this);
|
EventManager.get().unregister(this);
|
||||||
|
|
@ -37,6 +41,8 @@ public class KeystoreImportDialog extends Dialog<Keystore> {
|
||||||
|
|
||||||
final DialogPane dialogPane = getDialogPane();
|
final DialogPane dialogPane = getDialogPane();
|
||||||
AppServices.setStageIcon(dialogPane.getScene().getWindow());
|
AppServices.setStageIcon(dialogPane.getScene().getWindow());
|
||||||
|
scriptType = wallet.getScriptType();
|
||||||
|
existingLabel = currentLabel;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
FXMLLoader ksiLoader = new FXMLLoader(AppServices.class.getResource("keystoreimport/keystoreimport.fxml"));
|
FXMLLoader ksiLoader = new FXMLLoader(AppServices.class.getResource("keystoreimport/keystoreimport.fxml"));
|
||||||
|
|
@ -73,9 +79,10 @@ public class KeystoreImportDialog extends Dialog<Keystore> {
|
||||||
|
|
||||||
private Keystore getWatchOnlyKeystore() {
|
private Keystore getWatchOnlyKeystore() {
|
||||||
this.keystore = new Keystore();
|
this.keystore = new Keystore();
|
||||||
|
keystore.setLabel(existingLabel);
|
||||||
keystore.setSource(KeystoreSource.SW_WATCH);
|
keystore.setSource(KeystoreSource.SW_WATCH);
|
||||||
keystore.setWalletModel(WalletModel.SPARROW);
|
keystore.setWalletModel(WalletModel.SPARROW);
|
||||||
keystore.setKeyDerivation(new KeyDerivation("",""));
|
keystore.setKeyDerivation(new KeyDerivation(KeystoreController.DEFAULT_WATCH_ONLY_FINGERPRINT, scriptType.getDefaultDerivationPath()));
|
||||||
return keystore;
|
return keystore;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -36,10 +36,7 @@ import tornadofx.control.Field;
|
||||||
|
|
||||||
import javax.smartcardio.CardException;
|
import javax.smartcardio.CardException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.Base64;
|
import java.util.*;
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.ResourceBundle;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static com.sparrowwallet.sparrow.io.CardApi.isReaderAvailable;
|
import static com.sparrowwallet.sparrow.io.CardApi.isReaderAvailable;
|
||||||
|
|
@ -371,7 +368,8 @@ public class KeystoreController extends WalletFormController implements Initiali
|
||||||
boolean restrictImport = keystore.getSource() != KeystoreSource.SW_WATCH && keystoreSourceToggleGroup.getToggles().stream().anyMatch(toggle -> ((ToggleButton)toggle).isDisabled());
|
boolean restrictImport = keystore.getSource() != KeystoreSource.SW_WATCH && keystoreSourceToggleGroup.getToggles().stream().anyMatch(toggle -> ((ToggleButton)toggle).isDisabled());
|
||||||
KeyDerivation currentDerivation = keystore.getKeyDerivation();
|
KeyDerivation currentDerivation = keystore.getKeyDerivation();
|
||||||
WalletModel currentModel = keystore.getWalletModel();
|
WalletModel currentModel = keystore.getWalletModel();
|
||||||
KeystoreImportDialog dlg = new KeystoreImportDialog(getWalletForm().getWallet(), initialSource, currentDerivation, currentModel, restrictImport);
|
String currentLabel = keystore.getLabel();
|
||||||
|
KeystoreImportDialog dlg = new KeystoreImportDialog(getWalletForm().getWallet(), initialSource, currentDerivation, currentModel, currentLabel, restrictImport);
|
||||||
dlg.initOwner(selectSourcePane.getScene().getWindow());
|
dlg.initOwner(selectSourcePane.getScene().getWindow());
|
||||||
Optional<Keystore> result = dlg.showAndWait();
|
Optional<Keystore> result = dlg.showAndWait();
|
||||||
if(result.isPresent()) {
|
if(result.isPresent()) {
|
||||||
|
|
@ -386,7 +384,12 @@ public class KeystoreController extends WalletFormController implements Initiali
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
walletForm.getWallet().makeLabelsUnique(importedKeystore);
|
if(!keystore.getLabel().equals(importedKeystore.getLabel())) {
|
||||||
|
List<Keystore> changedKeystores = walletForm.getWallet().makeLabelsUnique(importedKeystore);
|
||||||
|
if(!changedKeystores.isEmpty()) {
|
||||||
|
EventManager.get().post(new SettingsChangedEvent(walletForm.getWallet(), SettingsChangedEvent.Type.KEYSTORE_LABEL));
|
||||||
|
}
|
||||||
|
}
|
||||||
keystore.setSource(importedKeystore.getSource());
|
keystore.setSource(importedKeystore.getSource());
|
||||||
keystore.setWalletModel(importedKeystore.getWalletModel());
|
keystore.setWalletModel(importedKeystore.getWalletModel());
|
||||||
keystore.setLabel(importedKeystore.getLabel());
|
keystore.setLabel(importedKeystore.getLabel());
|
||||||
|
|
@ -396,7 +399,7 @@ public class KeystoreController extends WalletFormController implements Initiali
|
||||||
keystore.setSeed(importedKeystore.getSeed());
|
keystore.setSeed(importedKeystore.getSeed());
|
||||||
keystore.setBip47ExtendedPrivateKey(importedKeystore.getBip47ExtendedPrivateKey());
|
keystore.setBip47ExtendedPrivateKey(importedKeystore.getBip47ExtendedPrivateKey());
|
||||||
|
|
||||||
updateType(true);
|
updateType(keystore.isValid());
|
||||||
label.setText(keystore.getLabel());
|
label.setText(keystore.getLabel());
|
||||||
fingerprint.setText(keystore.getKeyDerivation().getMasterFingerprint());
|
fingerprint.setText(keystore.getKeyDerivation().getMasterFingerprint());
|
||||||
derivation.setText(keystore.getKeyDerivation().getDerivationPath());
|
derivation.setText(keystore.getKeyDerivation().getDerivationPath());
|
||||||
|
|
@ -653,18 +656,31 @@ public class KeystoreController extends WalletFormController implements Initiali
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void update(SettingsChangedEvent event) {
|
public void update(SettingsChangedEvent event) {
|
||||||
if(walletForm.getWallet().equals(event.getWallet()) && event.getType().equals(SettingsChangedEvent.Type.SCRIPT_TYPE)) {
|
if(walletForm.getWallet().equals(event.getWallet())) {
|
||||||
if(keystore.getSource() == KeystoreSource.SW_WATCH && derivation.getPromptText().equals(derivation.getText())) {
|
if(event.getType().equals(SettingsChangedEvent.Type.SCRIPT_TYPE)) {
|
||||||
derivation.setText(event.getWallet().getScriptType().getDefaultDerivationPath());
|
if(keystore.getSource() == KeystoreSource.SW_WATCH && derivation.getPromptText().equals(derivation.getText())) {
|
||||||
|
derivation.setText(event.getWallet().getScriptType().getDefaultDerivationPath());
|
||||||
|
}
|
||||||
|
derivation.setPromptText(event.getWallet().getScriptType().getDefaultDerivationPath());
|
||||||
|
if(derivation.getText() != null && !derivation.getText().isEmpty()) {
|
||||||
|
String derivationPath = derivation.getText();
|
||||||
|
derivation.setText(derivationPath + " ");
|
||||||
|
derivation.setText(derivationPath);
|
||||||
|
}
|
||||||
|
if(keystore.getExtendedPublicKey() != null) {
|
||||||
|
setXpubContext(keystore.getExtendedPublicKey());
|
||||||
|
}
|
||||||
|
} else if(event.getType().equals(SettingsChangedEvent.Type.KEYSTORE_LABEL)) {
|
||||||
|
if(!keystore.getLabel().equals(label.getText())) {
|
||||||
|
label.setText(keystore.getLabel());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
derivation.setPromptText(event.getWallet().getScriptType().getDefaultDerivationPath());
|
|
||||||
if(derivation.getText() != null && !derivation.getText().isEmpty()) {
|
if(event.getType().equals(SettingsChangedEvent.Type.KEYSTORE_LABEL) || event.getType().equals(SettingsChangedEvent.Type.KEYSTORE_FINGERPRINT) ||
|
||||||
String derivationPath = derivation.getText();
|
event.getType().equals(SettingsChangedEvent.Type.KEYSTORE_DERIVATION) || event.getType().equals(SettingsChangedEvent.Type.KEYSTORE_XPUB)) {
|
||||||
derivation.setText(derivationPath + " ");
|
if(keystore.getSource() == KeystoreSource.SW_WATCH) {
|
||||||
derivation.setText(derivationPath);
|
exportButton.setVisible(keystore.isValid() && getWalletForm().getWallet().getPolicyType() == PolicyType.MULTI);
|
||||||
}
|
}
|
||||||
if(keystore.getExtendedPublicKey() != null) {
|
|
||||||
setXpubContext(keystore.getExtendedPublicKey());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue