From a65f2be1e2389e6c7f36e8195cce22bc150f551a Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Wed, 12 Mar 2025 15:25:46 +0100 Subject: [PATCH] resend muc presence after gaining occupant-id feature --- .../conversations/parser/PresenceParser.java | 7 ++++++ .../services/XmppConnectionService.java | 22 ++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/main/java/eu/siacs/conversations/parser/PresenceParser.java b/src/main/java/eu/siacs/conversations/parser/PresenceParser.java index eef615de358c79ba745f5695913b476d8def213a..038537dfe28d8051b0fd5aa8021553b06178180a 100644 --- a/src/main/java/eu/siacs/conversations/parser/PresenceParser.java +++ b/src/main/java/eu/siacs/conversations/parser/PresenceParser.java @@ -88,6 +88,13 @@ public class PresenceParser extends AbstractParser && jid.equals( Jid.Invalid.getNullForInvalid( item.getAttributeAsJid("jid"))))) { + Log.d( + Config.LOGTAG, + account.getJid().asBareJid() + + ": got self-presence from " + + user.getFullJid() + + ". occupant-id=" + + occupantId); if (mucOptions.setOnline()) { mXmppConnectionService.getAvatarService().clear(mucOptions); } diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 098be18599be98d0010dd783d0daafaff6d32fb2..ce482490e10f26ed49e3ed29aea70d472cb4ef99 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -3615,7 +3615,7 @@ public class XmppConnectionService extends Service { } private void joinMuc( - Conversation conversation, + final Conversation conversation, final OnConferenceJoined onConferenceJoined, final boolean followedInvite) { final Account account = conversation.getAccount(); @@ -4327,6 +4327,7 @@ public class XmppConnectionService extends Service { bookmark == null ? null : bookmark.getBookmarkName(), mucOptions.getName()); + final var hadOccupantId = mucOptions.occupantId(); if (mucOptions.updateConfiguration(new ServiceDiscoveryResult(response))) { Log.d( Config.LOGTAG, @@ -4336,6 +4337,25 @@ public class XmppConnectionService extends Service { updateConversation(conversation); } + final var hasOccupantId = mucOptions.occupantId(); + + if (!hadOccupantId && hasOccupantId && mucOptions.online()) { + final var me = mucOptions.getSelf().getFullJid(); + Log.d( + Config.LOGTAG, + account.getJid().asBareJid() + + ": gained support for occupant-id in " + + me + + ". resending presence"); + final var packet = + mPresenceGenerator.selfPresence( + account, + Presence.Status.ONLINE, + mucOptions.nonanonymous()); + packet.setTo(me); + sendPresencePacket(account, packet); + } + if (bookmark != null && (sameBefore || bookmark.getBookmarkName() == null)) { if (bookmark.setBookmarkName(