bug fixing on walletsettingsupdated

This commit is contained in:
Craig Raw 2020-06-23 16:22:01 +02:00
parent a8f16c15e0
commit d4d61b8d41
5 changed files with 38 additions and 21 deletions

View file

@ -5,6 +5,7 @@ import com.sparrowwallet.sparrow.wallet.Entry;
import com.sparrowwallet.sparrow.wallet.TransactionEntry; import com.sparrowwallet.sparrow.wallet.TransactionEntry;
import com.sparrowwallet.sparrow.wallet.WalletTransactionsEntry; import com.sparrowwallet.sparrow.wallet.WalletTransactionsEntry;
import javafx.beans.property.ReadOnlyObjectWrapper; import javafx.beans.property.ReadOnlyObjectWrapper;
import javafx.scene.control.Label;
import javafx.scene.control.TreeTableColumn; import javafx.scene.control.TreeTableColumn;
import javafx.scene.control.TreeTableView; import javafx.scene.control.TreeTableView;
@ -49,6 +50,7 @@ public class TransactionsTreeTable extends TreeTableView<Entry> {
balanceCol.setSortable(true); balanceCol.setSortable(true);
getColumns().add(balanceCol); getColumns().add(balanceCol);
setPlaceholder(new Label("No transactions"));
setEditable(true); setEditable(true);
setColumnResizePolicy(TreeTableView.CONSTRAINED_RESIZE_POLICY); setColumnResizePolicy(TreeTableView.CONSTRAINED_RESIZE_POLICY);
dateCol.setSortType(TreeTableColumn.SortType.DESCENDING); dateCol.setSortType(TreeTableColumn.SortType.DESCENDING);
@ -59,6 +61,12 @@ public class TransactionsTreeTable extends TreeTableView<Entry> {
RecursiveTreeItem<Entry> rootItem = new RecursiveTreeItem<>(rootEntry, Entry::getChildren); RecursiveTreeItem<Entry> rootItem = new RecursiveTreeItem<>(rootEntry, Entry::getChildren);
setRoot(rootItem); setRoot(rootItem);
rootItem.setExpanded(true); rootItem.setExpanded(true);
if(getColumns().size() > 0) {
TreeTableColumn<Entry, ?> dateCol = getColumns().get(0);
getSortOrder().add(dateCol);
dateCol.setSortType(TreeTableColumn.SortType.DESCENDING);
}
} }
public void updateHistory(List<WalletNode> updatedNodes) { public void updateHistory(List<WalletNode> updatedNodes) {

View file

@ -274,12 +274,15 @@ public class ElectrumServer {
references.addAll(nodeReferences); references.addAll(nodeReferences);
} }
Map<Integer, BlockHeader> blockHeaderMap = getBlockHeaders(references); Map<Sha256Hash, BlockTransaction> transactionMap = new HashMap<>();
Map<Sha256Hash, BlockTransaction> transactionMap = getTransactions(references, blockHeaderMap); if(!references.isEmpty()) {
Map<Integer, BlockHeader> blockHeaderMap = getBlockHeaders(references);
transactionMap = getTransactions(references, blockHeaderMap);
}
if(!transactionMap.equals(wallet.getTransactions())) { if(!transactionMap.equals(wallet.getTransactions())) {
for(BlockTransaction blockTx : transactionMap.values()) { for(BlockTransaction blockTx : transactionMap.values()) {
Optional<String> optionalLabel = wallet.getTransactions().values().stream().filter(oldBlTx -> oldBlTx.getHash().equals(blockTx.getHash())).map(BlockTransaction::getLabel).findFirst(); Optional<String> optionalLabel = wallet.getTransactions().values().stream().filter(oldBlTx -> oldBlTx.getHash().equals(blockTx.getHash())).map(BlockTransaction::getLabel).filter(Objects::nonNull).findFirst();
optionalLabel.ifPresent(blockTx::setLabel); optionalLabel.ifPresent(blockTx::setLabel);
} }

View file

@ -32,6 +32,5 @@ public class SettingsWalletForm extends WalletForm {
wallet = walletCopy.copy(); wallet = walletCopy.copy();
save(); save();
EventManager.get().post(new WalletSettingsChangedEvent(wallet, getWalletFile())); EventManager.get().post(new WalletSettingsChangedEvent(wallet, getWalletFile()));
refreshHistory(wallet.getStoredBlockHeight());
} }
} }

View file

@ -25,7 +25,7 @@ public class WalletForm {
public WalletForm(Storage storage, Wallet currentWallet) { public WalletForm(Storage storage, Wallet currentWallet) {
this.storage = storage; this.storage = storage;
this.wallet = currentWallet; this.wallet = currentWallet;
refreshHistory(wallet.getStoredBlockHeight()); refreshHistory(AppController.getCurrentBlockHeight());
} }
public Wallet getWallet() { public Wallet getWallet() {
@ -51,7 +51,7 @@ public class WalletForm {
public void saveAndRefresh() throws IOException { public void saveAndRefresh() throws IOException {
wallet.clearHistory(); wallet.clearHistory();
save(); save();
refreshHistory(wallet.getStoredBlockHeight()); refreshHistory(AppController.getCurrentBlockHeight());
} }
public void refreshHistory(Integer blockHeight) { public void refreshHistory(Integer blockHeight) {
@ -136,31 +136,36 @@ public class WalletForm {
@Subscribe @Subscribe
public void walletLabelChanged(WalletEntryLabelChangedEvent event) { public void walletLabelChanged(WalletEntryLabelChangedEvent event) {
backgroundSaveWallet(event); if(event.getWallet().equals(wallet)) {
backgroundSaveWallet(event);
}
} }
@Subscribe @Subscribe
public void walletBlockHeightChanged(WalletBlockHeightChangedEvent event) { public void walletBlockHeightChanged(WalletBlockHeightChangedEvent event) {
backgroundSaveWallet(event); if(event.getWallet().equals(wallet)) {
backgroundSaveWallet(event);
}
} }
private void backgroundSaveWallet(WalletChangedEvent event) { private void backgroundSaveWallet(WalletChangedEvent event) {
if(event.getWallet().equals(wallet)) { try {
try { save();
save(); } catch (IOException e) {
} catch (IOException e) { //Background save failed
//Background save failed e.printStackTrace();
e.printStackTrace();
}
} }
} }
@Subscribe @Subscribe
public void walletSettingsChanged(WalletSettingsChangedEvent event) { public void walletSettingsChanged(WalletSettingsChangedEvent event) {
walletTransactionsEntry = null; if(event.getWalletFile().equals(storage.getWalletFile())) {
accountEntries.clear(); wallet = event.getWallet();
walletTransactionsEntry = null;
EventManager.get().post(new WalletNodesChangedEvent(wallet)); accountEntries.clear();
EventManager.get().post(new WalletNodesChangedEvent(wallet));
refreshHistory(AppController.getCurrentBlockHeight());
}
} }
@Subscribe @Subscribe

View file

@ -37,7 +37,7 @@ public class WalletTransactionsEntry extends Entry {
} }
public void updateTransactions() { public void updateTransactions() {
List<Entry> current = getWalletTransactions(wallet).stream().map(WalletTransaction::getTransactionEntry).collect(Collectors.toList()); List<Entry> current = getWalletTransactions(wallet).stream().map(WalletTransaction::getTransactionEntry).peek(entry -> entry.setParent(this)).collect(Collectors.toList());
List<Entry> previous = new ArrayList<>(getChildren()); List<Entry> previous = new ArrayList<>(getChildren());
for(Entry currentEntry : current) { for(Entry currentEntry : current) {
int index = previous.indexOf(currentEntry); int index = previous.indexOf(currentEntry);
@ -57,7 +57,9 @@ public class WalletTransactionsEntry extends Entry {
getWalletTransactions(wallet, walletTransactionMap, wallet.getNode(KeyPurpose.RECEIVE)); getWalletTransactions(wallet, walletTransactionMap, wallet.getNode(KeyPurpose.RECEIVE));
getWalletTransactions(wallet, walletTransactionMap, wallet.getNode(KeyPurpose.CHANGE)); getWalletTransactions(wallet, walletTransactionMap, wallet.getNode(KeyPurpose.CHANGE));
return walletTransactionMap.values(); List<WalletTransaction> walletTxList = new ArrayList<>(walletTransactionMap.values());
Collections.reverse(walletTxList);
return walletTxList;
} }
private static void getWalletTransactions(Wallet wallet, Map<BlockTransaction, WalletTransaction> walletTransactionMap, WalletNode purposeNode) { private static void getWalletTransactions(Wallet wallet, Map<BlockTransaction, WalletTransaction> walletTransactionMap, WalletNode purposeNode) {