From 0f7b7df1f0cd6a3d2f75a983143d02fda8990111 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Thu, 16 Apr 2020 21:59:19 +0200 Subject: [PATCH] muc: fix roomDestroyed() callback The previous site where the callback was invoked was only reached if there was also a user status on the unvailable presence. But those are not part of unavilable presences upon room destruction. Fixes SMACK-888. --- .../smackx/muc/MultiUserChat.java | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/MultiUserChat.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/MultiUserChat.java index 9cc409c38..7c2d0950b 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/MultiUserChat.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/MultiUserChat.java @@ -248,6 +248,22 @@ public class MultiUserChat { listener.left(from); } } + + Destroy destroy = mucUser.getDestroy(); + // The room has been destroyed. + if (destroy != null) { + EntityBareJid alternateMucJid = destroy.getJid(); + final MultiUserChat alternateMuc; + if (alternateMucJid == null) { + alternateMuc = null; + } else { + alternateMuc = multiUserChatManager.getMultiUserChat(alternateMucJid); + } + + for (UserStatusListener listener : userStatusListeners) { + listener.roomDestroyed(alternateMuc, destroy.getReason()); + } + } } break; default: @@ -2471,13 +2487,6 @@ public class MultiUserChat { listener.nicknameChanged(from, mucUser.getItem().getNick()); } } - // The room has been destroyed. - if (mucUser.getDestroy() != null) { - MultiUserChat alternateMUC = multiUserChatManager.getMultiUserChat(mucUser.getDestroy().getJid()); - for (UserStatusListener listener : userStatusListeners) { - listener.roomDestroyed(alternateMUC, mucUser.getDestroy().getReason()); - } - } } /**