Skip to content

Commit

Permalink
synchronize access to pending trades data model
Browse files Browse the repository at this point in the history
Co-authored-by: XMRZombie <monerozombie@proton.me>
  • Loading branch information
woodser and XMRZombie committed Feb 13, 2025
1 parent cd71bcd commit b72159f
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -332,16 +332,18 @@ private void onListChanged() {
}

// add shown trades to list
list.clear();
list.addAll(tradeManager.getObservableList().stream()
.filter(trade -> isTradeShown(trade))
.map(trade -> new PendingTradesListItem(trade, btcFormatter))
.collect(Collectors.toList()));
synchronized (list) {
list.clear();
list.addAll(tradeManager.getObservableList().stream()
.filter(trade -> isTradeShown(trade))
.map(trade -> new PendingTradesListItem(trade, btcFormatter))
.collect(Collectors.toList()));

// we sort by date, earliest first
list.sort((o1, o2) -> o2.getTrade().getDate().compareTo(o1.getTrade().getDate()));
}
}

// we sort by date, earliest first
list.sort((o1, o2) -> o2.getTrade().getDate().compareTo(o1.getTrade().getDate()));

selectBestItem();
}

Expand All @@ -350,17 +352,21 @@ private boolean isTradeShown(Trade trade) {
}

private void selectBestItem() {
if (list.size() == 1)
doSelectItem(list.get(0));
else if (list.size() > 1 && (selectedItemProperty.get() == null || !list.contains(selectedItemProperty.get())))
doSelectItem(list.get(0));
else if (list.size() == 0)
doSelectItem(null);
synchronized (list) {
if (list.size() == 1)
doSelectItem(list.get(0));
else if (list.size() > 1 && (selectedItemProperty.get() == null || !list.contains(selectedItemProperty.get())))
doSelectItem(list.get(0));
else if (list.size() == 0)
doSelectItem(null);
}
}

private void selectItemByTradeId(String tradeId) {
if (activated) {
list.stream().filter(e -> e.getTrade().getId().equals(tradeId)).findAny().ifPresent(this::doSelectItem);
synchronized (list) {
list.stream().filter(e -> e.getTrade().getId().equals(tradeId)).findAny().ifPresent(this::doSelectItem);
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,11 @@ private void removeSelectedSubView() {
}

private void updateMoveTradeToFailedColumnState() {
UserThread.execute(() -> moveTradeToFailedColumn.setVisible(model.dataModel.list.stream().anyMatch(item -> isMaybeInvalidTrade(item.getTrade()))));
UserThread.execute(() -> {
synchronized (model.dataModel.list) {
moveTradeToFailedColumn.setVisible(model.dataModel.list.stream().anyMatch(item -> isMaybeInvalidTrade(item.getTrade())));
}
});
}

private boolean isMaybeInvalidTrade(Trade trade) {
Expand Down Expand Up @@ -420,16 +424,18 @@ private String getInvalidTradeDetails(Trade trade) {
///////////////////////////////////////////////////////////////////////////////////////////

private void updateNewChatMessagesByTradeMap() {
model.dataModel.list.forEach(t -> {
Trade trade = t.getTrade();
synchronized (trade.getChatMessages()) {
newChatMessagesByTradeMap.put(trade.getId(),
trade.getChatMessages().stream()
.filter(m -> !m.isWasDisplayed())
.filter(m -> !m.isSystemMessage())
.count());
}
});
synchronized (model.dataModel.list) {
model.dataModel.list.forEach(t -> {
Trade trade = t.getTrade();
synchronized (trade.getChatMessages()) {
newChatMessagesByTradeMap.put(trade.getId(),
trade.getChatMessages().stream()
.filter(m -> !m.isWasDisplayed())
.filter(m -> !m.isSystemMessage())
.count());
}
});
}
}

private void openChat(Trade trade) {
Expand Down

0 comments on commit b72159f

Please sign in to comment.