From f9a3194f4568287c7839cebd33c6a556468dfa21 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Mon, 4 Sep 2023 14:21:29 -0500 Subject: [PATCH] Re-send presence to a MUC if sending custom emoji To try to bump us up in terms of which client gets IQs so the bob queries are more likely to come to us. --- .../siacs/conversations/entities/Message.java | 10 +++++++++ .../services/XmppConnectionService.java | 21 +++++++++++++------ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/entities/Message.java b/src/main/java/eu/siacs/conversations/entities/Message.java index 7c7841e4a2bb18347bee28e5042c1d9da2a747d4..c4f3af23e949810b34018d8c65d7992ab72d1abf 100644 --- a/src/main/java/eu/siacs/conversations/entities/Message.java +++ b/src/main/java/eu/siacs/conversations/entities/Message.java @@ -1233,6 +1233,16 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable return treatAsDownloadable; } + public synchronized boolean hasCustomEmoji() { + if (getHtml() != null) { + SpannableStringBuilder spannable = getSpannableBody(null, null); + ImageSpan[] imageSpans = spannable.getSpans(0, spannable.length(), ImageSpan.class); + return imageSpans.length > 0; + } + + return false; + } + public synchronized boolean bodyIsOnlyEmojis() { if (isEmojisOnly == null) { isEmojisOnly = Emoticons.isOnlyEmoji(getBody().replaceAll("\\s", "")); diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index f23614d211700e1c41868116bacaafdd54ef65d7..4fa21fb26e459d910693f1a8083497fe017dd480 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -1964,6 +1964,9 @@ public class XmppConnectionService extends Service { } } sendMessagePacket(account, packet); + if (message.getConversation().getMode() == Conversation.MODE_MULTI && message.hasCustomEmoji()) { + if (message.getConversation() instanceof Conversation) presenceToMuc((Conversation) message.getConversation()); + } } } @@ -3526,6 +3529,17 @@ public class XmppConnectionService extends Service { } } + public void presenceToMuc(final Conversation conversation) { + final MucOptions options = conversation.getMucOptions(); + if (options.online()) { + Account account = conversation.getAccount(); + final Jid joinJid = options.getSelf().getFullJid(); + final PresencePacket packet = mPresenceGenerator.selfPresence(account, Presence.Status.ONLINE, options.nonanonymous(), options.getSelf().getNick()); + packet.setTo(joinJid); + sendPresencePacket(account, packet); + } + } + public boolean renameInMuc(final Conversation conversation, final String nick, final UiCallback callback) { final MucOptions options = conversation.getMucOptions(); final Jid joinJid = options.createJoinJid(nick); @@ -4397,12 +4411,7 @@ public class XmppConnectionService extends Service { Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": avatar changed. resending presence to online group chats"); for (Conversation conversation : conversations) { if (conversation.getAccount() == account && conversation.getMode() == Conversational.MODE_MULTI) { - final MucOptions mucOptions = conversation.getMucOptions(); - if (mucOptions.online()) { - PresencePacket packet = mPresenceGenerator.selfPresence(account, Presence.Status.ONLINE, mucOptions.nonanonymous(), mucOptions.getSelf().getNick()); - packet.setTo(mucOptions.getSelf().getFullJid()); - connection.sendPresencePacket(packet); - } + presenceToMuc(conversation); } } }