From 65408bb56067c10e69821cb99e0d69340584fc42 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Mon, 30 Sep 2024 14:20:49 -0500 Subject: [PATCH] Add fallbacks for reactions --- .../generator/MessageGenerator.java | 20 ++++++++++++++++++- .../services/XmppConnectionService.java | 2 +- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/generator/MessageGenerator.java b/src/main/java/eu/siacs/conversations/generator/MessageGenerator.java index 259d5decf81bc2b8b38b5fe3bd64e71989a83e17..ab941516a888af6f4121d49c93442c56d59fd193 100644 --- a/src/main/java/eu/siacs/conversations/generator/MessageGenerator.java +++ b/src/main/java/eu/siacs/conversations/generator/MessageGenerator.java @@ -14,6 +14,8 @@ import eu.siacs.conversations.entities.Account; import eu.siacs.conversations.entities.Conversation; import eu.siacs.conversations.entities.Conversational; import eu.siacs.conversations.entities.Message; +import eu.siacs.conversations.ui.util.QuoteHelper; +import eu.siacs.conversations.utils.MessageUtils; import eu.siacs.conversations.services.XmppConnectionService; import eu.siacs.conversations.xml.Element; import eu.siacs.conversations.xml.Namespace; @@ -200,7 +202,7 @@ public class MessageGenerator extends AbstractGenerator { return packet; } - public im.conversations.android.xmpp.model.stanza.Message reaction(final Conversational conversation, final String reactingTo, final Collection ourReactions) { + public im.conversations.android.xmpp.model.stanza.Message reaction(final Conversational conversation, final Message inReplyTo, final String reactingTo, final Collection ourReactions) { final boolean groupChat = conversation.getMode() == Conversational.MODE_MULTI; final Jid to = conversation.getJid().asBareJid(); final im.conversations.android.xmpp.model.stanza.Message packet = new im.conversations.android.xmpp.model.stanza.Message(); @@ -211,6 +213,22 @@ public class MessageGenerator extends AbstractGenerator { for(final String ourReaction : ourReactions) { reactions.addExtension(new Reaction(ourReaction)); } + + final var quote = QuoteHelper.quote(MessageUtils.prepareQuote(inReplyTo)) + "\n"; + packet.setBody(quote + String.join(" ", ourReactions)); + + packet.addChild("reply", "urn:xmpp:reply:0") + .setAttribute("to", inReplyTo.getCounterpart()) + .setAttribute("id", reactingTo); + final var replyFallback = packet.addChild("fallback", "urn:xmpp:fallback:0").setAttribute("for", "urn:xmpp:reply:0"); + replyFallback.addChild("body", "urn:xmpp:fallback:0") + .setAttribute("start", "0") + .setAttribute("end", "" + quote.codePointCount(0, quote.length())); + + + final var fallback = packet.addChild("fallback", "urn:xmpp:fallback:0").setAttribute("for", "urn:xmpp:reactions:0"); + fallback.addChild("body", "urn:xmpp:fallback:0"); + packet.addChild("store", "urn:xmpp:hints"); return packet; } diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index e218dc74c3ec7727b9c462b4ca3cf0650a53c43e..8f2b7d3296612dffaeda86930a69ea40185a33e8 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -5305,7 +5305,7 @@ public class XmppConnectionService extends Service { return false; } final var reactionMessage = - mMessageGenerator.reaction(conversation, reactToId, reactions); + mMessageGenerator.reaction(conversation, message, reactToId, reactions); sendMessagePacket(conversation.getAccount(), reactionMessage); message.setReactions(combinedReactions); updateMessage(message, false);