From 6d8d06cc2b221161ac4ac609d82e6db2ab6663cc Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Fri, 4 Oct 2024 22:52:55 -0500 Subject: [PATCH] Notify for reactions --- .../conversations/parser/MessageParser.java | 8 +++++++ .../services/NotificationService.java | 22 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/main/java/eu/siacs/conversations/parser/MessageParser.java b/src/main/java/eu/siacs/conversations/parser/MessageParser.java index 820d61b8da258b015deb5a9cf834cf5c79ae3618..99f28f20ceb12510143b295ff6f3cb7211f67b73 100644 --- a/src/main/java/eu/siacs/conversations/parser/MessageParser.java +++ b/src/main/java/eu/siacs/conversations/parser/MessageParser.java @@ -16,6 +16,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Date; +import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Locale; @@ -23,6 +24,7 @@ import java.util.Map; import java.util.Set; import java.util.UUID; import java.util.function.Consumer; +import java.util.stream.Collectors; import io.ipfs.cid.Cid; @@ -1303,6 +1305,8 @@ public class MessageParser extends AbstractParser implements Consumer(reactions.getReactions()); + newReactions.removeAll(message.getReactions().stream().filter(r -> occupantId.equals(r.occupantId)).map(r -> r.reaction).collect(Collectors.toList())); final var combinedReactions = Reaction.withOccupantId( message.getReactions(), @@ -1314,6 +1318,7 @@ public class MessageParser extends AbstractParser implements Consumer(reactions.getReactions()); + newReactions.removeAll(message.getReactions().stream().filter(r -> reactionFrom.equals(r.from)).map(r -> r.reaction).collect(Collectors.toList())); final var combinedReactions = Reaction.withFrom( message.getReactions(), @@ -1339,6 +1346,7 @@ public class MessageParser extends AbstractParser implements Consumer newReactions) { + if (newReactions.isEmpty()) return; + + final var message = reactingTo.reply(); + message.appendBody(String.join(" ", newReactions)); + message.setCounterpart(counterpart); + message.setOccupantId(occupantId); + message.setStatus(Message.STATUS_RECEIVED); + synchronized (CATCHUP_LOCK) { + final XmppConnection connection = + message.getConversation().getAccount().getXmppConnection(); + if (connection != null && connection.isWaitingForSmCatchup()) { + connection.incrementSmCatchupMessageCounter(); + pushFromBacklog(message); + } else { + pushNow(message); + } + } + } + public void pushFailedDelivery(final Message message) { final Conversation conversation = (Conversation) message.getConversation(); final boolean isScreenLocked = !mXmppConnectionService.isScreenLocked();