synchronize access to pending trades data model
Co-authored-by: XMRZombie <monerozombie@proton.me>
This commit is contained in:
parent
cd71bcdde7
commit
b72159fcf8
2 changed files with 38 additions and 26 deletions
|
@ -332,15 +332,17 @@ public class PendingTradesDataModel extends ActivatableDataModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
// add shown trades to list
|
// add shown trades to list
|
||||||
list.clear();
|
synchronized (list) {
|
||||||
list.addAll(tradeManager.getObservableList().stream()
|
list.clear();
|
||||||
.filter(trade -> isTradeShown(trade))
|
list.addAll(tradeManager.getObservableList().stream()
|
||||||
.map(trade -> new PendingTradesListItem(trade, btcFormatter))
|
.filter(trade -> isTradeShown(trade))
|
||||||
.collect(Collectors.toList()));
|
.map(trade -> new PendingTradesListItem(trade, btcFormatter))
|
||||||
}
|
.collect(Collectors.toList()));
|
||||||
|
|
||||||
// we sort by date, earliest first
|
// we sort by date, earliest first
|
||||||
list.sort((o1, o2) -> o2.getTrade().getDate().compareTo(o1.getTrade().getDate()));
|
list.sort((o1, o2) -> o2.getTrade().getDate().compareTo(o1.getTrade().getDate()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
selectBestItem();
|
selectBestItem();
|
||||||
}
|
}
|
||||||
|
@ -350,17 +352,21 @@ public class PendingTradesDataModel extends ActivatableDataModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void selectBestItem() {
|
private void selectBestItem() {
|
||||||
if (list.size() == 1)
|
synchronized (list) {
|
||||||
doSelectItem(list.get(0));
|
if (list.size() == 1)
|
||||||
else if (list.size() > 1 && (selectedItemProperty.get() == null || !list.contains(selectedItemProperty.get())))
|
doSelectItem(list.get(0));
|
||||||
doSelectItem(list.get(0));
|
else if (list.size() > 1 && (selectedItemProperty.get() == null || !list.contains(selectedItemProperty.get())))
|
||||||
else if (list.size() == 0)
|
doSelectItem(list.get(0));
|
||||||
doSelectItem(null);
|
else if (list.size() == 0)
|
||||||
|
doSelectItem(null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void selectItemByTradeId(String tradeId) {
|
private void selectItemByTradeId(String tradeId) {
|
||||||
if (activated) {
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -363,7 +363,11 @@ public class PendingTradesView extends ActivatableViewAndModel<VBox, PendingTrad
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateMoveTradeToFailedColumnState() {
|
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) {
|
private boolean isMaybeInvalidTrade(Trade trade) {
|
||||||
|
@ -420,16 +424,18 @@ public class PendingTradesView extends ActivatableViewAndModel<VBox, PendingTrad
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
private void updateNewChatMessagesByTradeMap() {
|
private void updateNewChatMessagesByTradeMap() {
|
||||||
model.dataModel.list.forEach(t -> {
|
synchronized (model.dataModel.list) {
|
||||||
Trade trade = t.getTrade();
|
model.dataModel.list.forEach(t -> {
|
||||||
synchronized (trade.getChatMessages()) {
|
Trade trade = t.getTrade();
|
||||||
newChatMessagesByTradeMap.put(trade.getId(),
|
synchronized (trade.getChatMessages()) {
|
||||||
trade.getChatMessages().stream()
|
newChatMessagesByTradeMap.put(trade.getId(),
|
||||||
.filter(m -> !m.isWasDisplayed())
|
trade.getChatMessages().stream()
|
||||||
.filter(m -> !m.isSystemMessage())
|
.filter(m -> !m.isWasDisplayed())
|
||||||
.count());
|
.filter(m -> !m.isSystemMessage())
|
||||||
}
|
.count());
|
||||||
});
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void openChat(Trade trade) {
|
private void openChat(Trade trade) {
|
||||||
|
|
Loading…
Reference in a new issue