From 39e22ca44e67ad1570b733b359cb808c682c2656 Mon Sep 17 00:00:00 2001 From: chimp1984 Date: Sat, 31 Aug 2019 01:14:43 +0200 Subject: [PATCH] Fix bug with not showing system msg at peer who receives msg - We only added the system msg when one opens the chat but not when one received a message. --- .../messages/DisputeCommunicationMessage.java | 25 +++++++++++++++++ .../bisq/core/trade/TradeChatSession.java | 27 ++++++++++++++++--- .../pendingtrades/PendingTradesView.java | 16 ++++------- 3 files changed, 54 insertions(+), 14 deletions(-) diff --git a/core/src/main/java/bisq/core/arbitration/messages/DisputeCommunicationMessage.java b/core/src/main/java/bisq/core/arbitration/messages/DisputeCommunicationMessage.java index 996dc128357..18a4cca3c83 100644 --- a/core/src/main/java/bisq/core/arbitration/messages/DisputeCommunicationMessage.java +++ b/core/src/main/java/bisq/core/arbitration/messages/DisputeCommunicationMessage.java @@ -128,6 +128,31 @@ public DisputeCommunicationMessage(DisputeCommunicationMessage.Type type, false); } + public DisputeCommunicationMessage(DisputeCommunicationMessage.Type type, + String tradeId, + int traderId, + boolean senderIsTrader, + String message, + NodeAddress senderNodeAddress, + long date) { + this(type, + tradeId, + traderId, + senderIsTrader, + message, + null, + senderNodeAddress, + date, + false, + false, + UUID.randomUUID().toString(), + Version.getP2PMessageVersion(), + false, + null, + null, + false); + } + /////////////////////////////////////////////////////////////////////////////////////////// // PROTO BUFFER diff --git a/core/src/main/java/bisq/core/trade/TradeChatSession.java b/core/src/main/java/bisq/core/trade/TradeChatSession.java index 862e817827b..c26f9bc73b2 100644 --- a/core/src/main/java/bisq/core/trade/TradeChatSession.java +++ b/core/src/main/java/bisq/core/trade/TradeChatSession.java @@ -22,6 +22,7 @@ import bisq.core.arbitration.messages.DisputeResultMessage; import bisq.core.chat.ChatManager; import bisq.core.chat.ChatSession; +import bisq.core.locale.Res; import bisq.network.p2p.NodeAddress; @@ -181,13 +182,33 @@ public boolean channelOpen(DisputeCommunicationMessage message) { public void storeDisputeCommunicationMessage(DisputeCommunicationMessage message) { Optional tradeOptional = tradeManager.getTradeById(message.getTradeId()); if (tradeOptional.isPresent()) { - if (tradeOptional.get().getCommunicationMessages().stream() - .noneMatch(m -> m.getUid().equals(message.getUid()))) { - tradeOptional.get().addCommunicationMessage(message); + Trade trade = tradeOptional.get(); + ObservableList communicationMessages = trade.getCommunicationMessages(); + if (communicationMessages.stream().noneMatch(m -> m.getUid().equals(message.getUid()))) { + if (communicationMessages.isEmpty()) { + addSystemMsg(trade); + } + trade.addCommunicationMessage(message); } else { log.warn("Trade got a disputeCommunicationMessage what we have already stored. UId = {} TradeId = {}", message.getUid(), message.getTradeId()); } } } + + public void addSystemMsg(Trade trade) { + // We need to use the trade date as otherwise our system msg would not be displayed first as the list is sorted + // by date. + DisputeCommunicationMessage disputeCommunicationMessage = new DisputeCommunicationMessage( + DisputeCommunicationMessage.Type.TRADE, + trade.getId(), + 0, + false, + Res.get("tradeChat.rules"), + new NodeAddress("null:0000"), + trade.getDate().getTime() + ); + disputeCommunicationMessage.setSystemMessage(true); + trade.getCommunicationMessages().add(disputeCommunicationMessage); + } } diff --git a/desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesView.java b/desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesView.java index 4ea08ec2cef..fcb995b266a 100644 --- a/desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesView.java +++ b/desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesView.java @@ -317,7 +317,10 @@ private void updateNewChatMessagesByTradeMap() { model.dataModel.list.forEach(t -> { Trade trade = t.getTrade(); newChatMessagesByTradeMap.put(trade.getId(), - trade.getCommunicationMessages().stream().filter(m -> !m.isWasDisplayed()).count()); + trade.getCommunicationMessages().stream() + .filter(m -> !m.isWasDisplayed()) + .filter(m -> !m.isSystemMessage()) + .count()); }); } @@ -326,16 +329,7 @@ private void openChat(Trade trade) { chatPopupStage.close(); if (trade.getCommunicationMessages().isEmpty()) { - DisputeCommunicationMessage disputeCommunicationMessage = new DisputeCommunicationMessage( - DisputeCommunicationMessage.Type.TRADE, - trade.getId(), - 0, - false, - Res.get("tradeChat.rules"), - new NodeAddress("null:0000") - ); - disputeCommunicationMessage.setSystemMessage(true); - trade.getCommunicationMessages().add(disputeCommunicationMessage); + ((TradeChatSession) model.dataModel.tradeManager.getChatManager().getChatSession()).addSystemMsg(trade); } trade.getCommunicationMessages().forEach(m -> m.setWasDisplayed(true));