From e721c7f61be51dbdfc939319288f4251842309d4 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Mon, 20 Jan 2025 10:50:23 -0500 Subject: [PATCH] Fix or disable reactions on MUC PM The new data model from upstream broke them and they're not very useful anyway. --- .../java/eu/siacs/conversations/entities/Conversation.java | 2 +- src/main/java/eu/siacs/conversations/entities/Message.java | 2 +- .../siacs/conversations/services/XmppConnectionService.java | 1 + .../java/eu/siacs/conversations/ui/ConversationFragment.java | 4 ++-- .../eu/siacs/conversations/ui/adapter/MessageAdapter.java | 2 +- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index 90c62064566f4188bd36152b357992b2bea5f1c9..52b5f0c2941d75ef984825ad5d7487ba7a4b4000 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -785,7 +785,7 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl public Reaction.Aggregated aggregatedReactionsFor(Message m, Function thumbnailer) { Set result = new HashSet<>(); - if (getMode() == MODE_MULTI) { + if (getMode() == MODE_MULTI && !m.isPrivateMessage()) { result.addAll(reactions.get(m.getServerMsgId())); } else if (m.getStatus() > Message.STATUS_RECEIVED) { result.addAll(reactions.get(m.getUuid())); diff --git a/src/main/java/eu/siacs/conversations/entities/Message.java b/src/main/java/eu/siacs/conversations/entities/Message.java index abda7b8de141b1c5ad3a14c9c1a5db11e075f652..8eab5831ba29479ccad30acc66934292a9ca8b69 100644 --- a/src/main/java/eu/siacs/conversations/entities/Message.java +++ b/src/main/java/eu/siacs/conversations/entities/Message.java @@ -424,7 +424,7 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable } public String replyId() { - if (conversation.getMode() == Conversation.MODE_MULTI) return getServerMsgId(); + if (conversation.getMode() == Conversation.MODE_MULTI && !isPrivateMessage()) return getServerMsgId(); final String remote = getRemoteMsgId(); if (remote == null && getStatus() > STATUS_RECEIVED) return getUuid(); return remote; diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 54b2daaa5dd90742481561986fa9e267949367cb..fdd9e709123c5f37b6108df32c519dab9d012da0 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -5315,6 +5315,7 @@ public class XmppConnectionService extends Service { } public boolean sendReactions(final Message message, final Collection reactions) { + if (message.isPrivateMessage()) throw new IllegalArgumentException("Reactions to PM not implemented"); if (message.getConversation() instanceof Conversation conversation) { final String reactToId; final Collection combinedReactions; diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index 32cf40e7aee3646a9e64c4f739d0895fe56a6f40..3b378ae04ec21ae03049db950d180b3b2f5482af 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -996,7 +996,7 @@ public class ConversationFragment extends XmppFragment while (body.length() > 0 && Character.isWhitespace(body.charAt(0))) body.delete(0, 1); } if (conversation.getReplyTo() != null) { - if (Emoticons.isEmoji(body.toString().replaceAll("\\s", ""))) { + if (Emoticons.isEmoji(body.toString().replaceAll("\\s", "")) && conversation.getNextCounterpart() == null && !conversation.getReplyTo().isPrivateMessage()) { final var aggregated = conversation.getReplyTo().getAggregatedReactions(); final ImmutableSet.Builder reactionBuilder = new ImmutableSet.Builder<>(); reactionBuilder.addAll(aggregated.ourReactions); @@ -1912,7 +1912,7 @@ public class ConversationFragment extends XmppFragment reportAndBlock.setVisible(true); } } - if (!encrypted) { + if (!encrypted && !m.isPrivateMessage()) { addReaction.setVisible(!showError && !m.isDeleted()); } if (!m.isFileOrImage() diff --git a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java index ec3c0195c4c6ee4fdbb55de5acc72a2056345b14..25bc9fa630ce61023612606f52f0a0c32e427277 100644 --- a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java +++ b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java @@ -1644,7 +1644,7 @@ public class MessageAdapter extends ArrayAdapter { } private void sendReactions(final Message message, final Collection reactions) { - if (activity.xmppConnectionService.sendReactions(message, reactions)) { + if (!message.isPrivateMessage() && activity.xmppConnectionService.sendReactions(message, reactions)) { return; } Toast.makeText(activity, R.string.could_not_add_reaction, Toast.LENGTH_LONG).show();