From 20d3f07059d04d4857026dcebb1abf066e360df1 Mon Sep 17 00:00:00 2001 From: Craig Raw Date: Sat, 8 Feb 2025 11:43:59 +0200 Subject: [PATCH] draft implementation of optional bip329 fields --- .../sparrowwallet/sparrow/AppController.java | 2 +- .../sparrow/control/WalletExportDialog.java | 8 +- .../sparrow/io/WalletLabels.java | 203 +++++++++++++++--- .../sparrow/wallet/SettingsController.java | 2 +- 4 files changed, 180 insertions(+), 35 deletions(-) diff --git a/src/main/java/com/sparrowwallet/sparrow/AppController.java b/src/main/java/com/sparrowwallet/sparrow/AppController.java index 53c8cc8f..557df14c 100644 --- a/src/main/java/com/sparrowwallet/sparrow/AppController.java +++ b/src/main/java/com/sparrowwallet/sparrow/AppController.java @@ -1369,7 +1369,7 @@ public class AppController implements Initializable { public void exportWallet(ActionEvent event) { WalletForm selectedWalletForm = getSelectedWalletForm(); if(selectedWalletForm != null) { - WalletExportDialog dlg = new WalletExportDialog(selectedWalletForm); + WalletExportDialog dlg = new WalletExportDialog(selectedWalletForm, getSelectedWalletForms()); dlg.initOwner(rootStack.getScene().getWindow()); Optional wallet = dlg.showAndWait(); if(wallet.isPresent()) { diff --git a/src/main/java/com/sparrowwallet/sparrow/control/WalletExportDialog.java b/src/main/java/com/sparrowwallet/sparrow/control/WalletExportDialog.java index bbabd108..dc96f8be 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/WalletExportDialog.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/WalletExportDialog.java @@ -18,8 +18,8 @@ import java.util.List; public class WalletExportDialog extends Dialog { private Wallet wallet; - public WalletExportDialog(WalletForm walletForm) { - this.wallet = walletForm.getWallet(); + public WalletExportDialog(WalletForm selectedWalletForm, List allWalletForms) { + this.wallet = selectedWalletForm.getWallet(); EventManager.get().register(this); setOnCloseRequest(event -> { @@ -45,10 +45,10 @@ public class WalletExportDialog extends Dialog { List exporters; if(wallet.getPolicyType() == PolicyType.SINGLE) { - exporters = List.of(new Electrum(), new ElectrumPersonalServer(), new Descriptor(), new SpecterDesktop(), new Sparrow(), new WalletLabels(), new WalletTransactions(walletForm)); + exporters = List.of(new Electrum(), new ElectrumPersonalServer(), new Descriptor(), new SpecterDesktop(), new Sparrow(), new WalletLabels(allWalletForms), new WalletTransactions(selectedWalletForm)); } else if(wallet.getPolicyType() == PolicyType.MULTI) { exporters = List.of(new Bip129(), new CaravanMultisig(), new ColdcardMultisig(), new CoboVaultMultisig(), new Electrum(), new ElectrumPersonalServer(), new KeystoneMultisig(), - new Descriptor(), new JadeMultisig(), new PassportMultisig(), new SpecterDesktop(), new BlueWalletMultisig(), new SpecterDIY(), new Sparrow(), new WalletLabels(), new WalletTransactions(walletForm)); + new Descriptor(), new JadeMultisig(), new PassportMultisig(), new SpecterDesktop(), new BlueWalletMultisig(), new SpecterDIY(), new Sparrow(), new WalletLabels(allWalletForms), new WalletTransactions(selectedWalletForm)); } else { throw new UnsupportedOperationException("Cannot export wallet with policy type " + wallet.getPolicyType()); } diff --git a/src/main/java/com/sparrowwallet/sparrow/io/WalletLabels.java b/src/main/java/com/sparrowwallet/sparrow/io/WalletLabels.java index 0789da2e..db792ae5 100644 --- a/src/main/java/com/sparrowwallet/sparrow/io/WalletLabels.java +++ b/src/main/java/com/sparrowwallet/sparrow/io/WalletLabels.java @@ -1,33 +1,40 @@ package com.sparrowwallet.sparrow.io; import com.csvreader.CsvReader; -import com.google.gson.Gson; +import com.google.gson.*; import com.sparrowwallet.drongo.KeyPurpose; import com.sparrowwallet.drongo.OutputDescriptor; import com.sparrowwallet.drongo.Utils; +import com.sparrowwallet.drongo.protocol.Transaction; import com.sparrowwallet.drongo.wallet.*; import com.sparrowwallet.sparrow.AppServices; import com.sparrowwallet.sparrow.EventManager; import com.sparrowwallet.sparrow.event.KeystoreLabelsChangedEvent; import com.sparrowwallet.sparrow.event.WalletEntryLabelsChangedEvent; import com.sparrowwallet.sparrow.event.WalletUtxoStatusChangedEvent; +import com.sparrowwallet.sparrow.net.ExchangeSource; import com.sparrowwallet.sparrow.wallet.*; +import org.apache.commons.lang3.time.DateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.*; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.nio.charset.StandardCharsets; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; public class WalletLabels implements WalletImport, WalletExport { private static final Logger log = LoggerFactory.getLogger(WalletLabels.class); + private static final long ONE_DAY = 24*60*60*1000L; private final List walletForms; - public WalletLabels() { - this.walletForms = Collections.emptyList(); - } - public WalletLabels(List walletForms) { this.walletForms = walletForms; } @@ -50,8 +57,9 @@ public class WalletLabels implements WalletImport, WalletExport { @Override public void exportWallet(Wallet wallet, OutputStream outputStream, String password) throws ExportException { List