diff --git a/src/main/java/com/sparrowwallet/drongo/wallet/Keystore.java b/src/main/java/com/sparrowwallet/drongo/wallet/Keystore.java index af82aa0..a1e1280 100644 --- a/src/main/java/com/sparrowwallet/drongo/wallet/Keystore.java +++ b/src/main/java/com/sparrowwallet/drongo/wallet/Keystore.java @@ -51,6 +51,9 @@ public class Keystore extends Persistable { } public String getBaseLabel() { + if(walletModel != null && label.startsWith(walletModel.toDisplayString()) && label.substring(walletModel.toDisplayString().length()).matches("( \\d*)?$")) { + return walletModel.toDisplayString(); + } return label.replaceAll(" \\d*$", ""); } diff --git a/src/main/java/com/sparrowwallet/drongo/wallet/Wallet.java b/src/main/java/com/sparrowwallet/drongo/wallet/Wallet.java index ee61aec..182e824 100644 --- a/src/main/java/com/sparrowwallet/drongo/wallet/Wallet.java +++ b/src/main/java/com/sparrowwallet/drongo/wallet/Wallet.java @@ -1851,22 +1851,28 @@ public class Wallet extends Persistable implements Comparable { return !keystores.stream().map(Keystore::getExtendedPublicKey).allMatch(new HashSet<>()::add); } - public void makeLabelsUnique(Keystore newKeystore) { + public List makeLabelsUnique(Keystore newKeystore) { + List changedKeystores = new ArrayList<>(); Set labels = getKeystores().stream().map(Keystore::getBaseLabel).collect(Collectors.toSet()); if(!labels.add(newKeystore.getBaseLabel())) { - makeLabelsUnique(newKeystore, false); + makeLabelsUnique(newKeystore, false, changedKeystores); } + return changedKeystores; } - private int makeLabelsUnique(Keystore newKeystore, boolean duplicateFound) { + private int makeLabelsUnique(Keystore newKeystore, boolean duplicateFound, List changedKeystores) { int max = 0; for(Keystore keystore : getKeystores()) { String newKeystoreLabel = newKeystore.getLabel().equals(Keystore.DEFAULT_LABEL) ? Keystore.DEFAULT_LABEL.substring(0, Keystore.DEFAULT_LABEL.length() - 2) : newKeystore.getLabel(); if(newKeystore != keystore && keystore.getLabel().startsWith(newKeystoreLabel)) { duplicateFound = true; String remainder = keystore.getLabel().substring(newKeystoreLabel.length()); - if(remainder.length() == 0) { - max = makeLabelsUnique(keystore, true); + if(remainder.isEmpty()) { + String existingLabel = keystore.getLabel(); + max = makeLabelsUnique(keystore, true, changedKeystores); + if(!keystore.getLabel().equals(existingLabel)) { + changedKeystores.add(keystore); + } } else { try { int count = Integer.parseInt(remainder.trim());