From efba293564f259345ac35791720fa183dbd3361f Mon Sep 17 00:00:00 2001 From: Craig Raw Date: Fri, 19 Jun 2020 17:57:07 +0200 Subject: [PATCH] address history updating --- .../sparrow/control/AddressTreeTable.java | 16 ++++++++++++++++ .../sparrow/control/RecursiveTreeItem.java | 3 +-- .../event/WalletHistoryChangedEvent.java | 10 ++++++++++ .../sparrow/wallet/AddressesController.java | 17 +++++++++++++++++ 4 files changed, 44 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/sparrowwallet/sparrow/control/AddressTreeTable.java b/src/main/java/com/sparrowwallet/sparrow/control/AddressTreeTable.java index 86b75f2f..a454e629 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/AddressTreeTable.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/AddressTreeTable.java @@ -3,6 +3,7 @@ package com.sparrowwallet.sparrow.control; import com.sparrowwallet.drongo.Utils; import com.sparrowwallet.drongo.address.Address; import com.sparrowwallet.drongo.protocol.Transaction; +import com.sparrowwallet.drongo.wallet.WalletNode; import com.sparrowwallet.sparrow.EventManager; import com.sparrowwallet.sparrow.event.ReceiveActionEvent; import com.sparrowwallet.sparrow.event.ReceiveToEvent; @@ -27,7 +28,9 @@ import org.controlsfx.glyphfont.FontAwesome; import org.controlsfx.glyphfont.Glyph; import java.lang.reflect.Field; +import java.util.List; import java.util.Locale; +import java.util.Optional; public class AddressTreeTable extends TreeTableView { public void initialize(NodeEntry rootEntry) { @@ -93,6 +96,19 @@ public class AddressTreeTable extends TreeTableView { }); } + public void updateHistory(List updatedNodes) { + NodeEntry rootEntry = (NodeEntry)getRoot().getValue(); + + for(WalletNode updatedNode : updatedNodes) { + Optional optEntry = rootEntry.getChildren().stream().filter(childEntry -> ((NodeEntry)childEntry).getNode().equals(updatedNode)).findFirst(); + if(optEntry.isPresent()) { + int index = rootEntry.getChildren().indexOf(optEntry.get()); + NodeEntry nodeEntry = new NodeEntry(rootEntry.getWallet(), updatedNode); + rootEntry.getChildren().set(index, nodeEntry); + } + } + } + private static void applyRowStyles(TreeTableCell cell, Entry entry) { cell.getStyleClass().remove("node-row"); cell.getStyleClass().remove("hashindex-row"); diff --git a/src/main/java/com/sparrowwallet/sparrow/control/RecursiveTreeItem.java b/src/main/java/com/sparrowwallet/sparrow/control/RecursiveTreeItem.java index ebeb52ca..600cf1b5 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/RecursiveTreeItem.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/RecursiveTreeItem.java @@ -50,8 +50,7 @@ public class RecursiveTreeItem extends TreeItem { while(change.next()){ if(change.wasAdded()){ - change.getAddedSubList().forEach(t-> RecursiveTreeItem.this.getChildren().add( - new RecursiveTreeItem<>(t, this.graphicsFactory, childrenFactory))); + change.getAddedSubList().forEach(t-> RecursiveTreeItem.this.getChildren().add(change.getFrom(), new RecursiveTreeItem<>(t, this.graphicsFactory, childrenFactory))); } if(change.wasRemoved()){ diff --git a/src/main/java/com/sparrowwallet/sparrow/event/WalletHistoryChangedEvent.java b/src/main/java/com/sparrowwallet/sparrow/event/WalletHistoryChangedEvent.java index f2fd8fd0..3a149d5a 100644 --- a/src/main/java/com/sparrowwallet/sparrow/event/WalletHistoryChangedEvent.java +++ b/src/main/java/com/sparrowwallet/sparrow/event/WalletHistoryChangedEvent.java @@ -1,9 +1,11 @@ package com.sparrowwallet.sparrow.event; +import com.sparrowwallet.drongo.KeyPurpose; import com.sparrowwallet.drongo.wallet.Wallet; import com.sparrowwallet.drongo.wallet.WalletNode; import java.util.List; +import java.util.stream.Collectors; public class WalletHistoryChangedEvent extends WalletChangedEvent { private final List historyChangedNodes; @@ -16,4 +18,12 @@ public class WalletHistoryChangedEvent extends WalletChangedEvent { public List getHistoryChangedNodes() { return historyChangedNodes; } + + public List getReceiveNodes() { + return getWallet().getNode(KeyPurpose.RECEIVE).getChildren().stream().filter(historyChangedNodes::contains).collect(Collectors.toList()); + } + + public List getChangeNodes() { + return getWallet().getNode(KeyPurpose.CHANGE).getChildren().stream().filter(historyChangedNodes::contains).collect(Collectors.toList()); + } } diff --git a/src/main/java/com/sparrowwallet/sparrow/wallet/AddressesController.java b/src/main/java/com/sparrowwallet/sparrow/wallet/AddressesController.java index 1e535ebb..b4588da8 100644 --- a/src/main/java/com/sparrowwallet/sparrow/wallet/AddressesController.java +++ b/src/main/java/com/sparrowwallet/sparrow/wallet/AddressesController.java @@ -1,13 +1,17 @@ package com.sparrowwallet.sparrow.wallet; +import com.google.common.eventbus.Subscribe; import com.sparrowwallet.drongo.KeyPurpose; import com.sparrowwallet.drongo.wallet.Wallet; +import com.sparrowwallet.drongo.wallet.WalletNode; import com.sparrowwallet.sparrow.EventManager; import com.sparrowwallet.sparrow.control.AddressTreeTable; +import com.sparrowwallet.sparrow.event.WalletHistoryChangedEvent; import javafx.fxml.FXML; import javafx.fxml.Initializable; import java.net.URL; +import java.util.List; import java.util.ResourceBundle; public class AddressesController extends WalletFormController implements Initializable { @@ -29,4 +33,17 @@ public class AddressesController extends WalletFormController implements Initial receiveTable.initialize(getWalletForm().getNodeEntry(KeyPurpose.RECEIVE)); changeTable.initialize(getWalletForm().getNodeEntry(KeyPurpose.CHANGE)); } + + @Subscribe + public void walletHistoryChanged(WalletHistoryChangedEvent event) { + List receiveNodes = event.getReceiveNodes(); + if(!receiveNodes.isEmpty()) { + receiveTable.updateHistory(receiveNodes); + } + + List changeNodes = event.getChangeNodes(); + if(!changeNodes.isEmpty()) { + changeTable.updateHistory(changeNodes); + } + } }