From 05c97c494bf1b5c122c2ef0a7cfdb60a8f3ff828 Mon Sep 17 00:00:00 2001 From: meisterfuu Date: Mon, 16 Mar 2015 10:06:16 +0100 Subject: [PATCH] Add roomDestroyed callback to MUC UserStatusListener Fixes SMACK-619 --- .../smackx/muc/DefaultUserStatusListener.java | 3 +++ .../org/jivesoftware/smackx/muc/MultiUserChat.java | 12 ++++++++++++ .../jivesoftware/smackx/muc/UserStatusListener.java | 10 +++++++++- 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/DefaultUserStatusListener.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/DefaultUserStatusListener.java index 9d9757465..021f16d8e 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/DefaultUserStatusListener.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/DefaultUserStatusListener.java @@ -66,4 +66,7 @@ public class DefaultUserStatusListener implements UserStatusListener { public void adminRevoked() { } + public void roomDestroyed(MultiUserChat alternateMUC, String reason) { + } + } 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 0be33da50..62bda84ed 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 @@ -2179,6 +2179,18 @@ 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()); + } + + // Reset occupant information. + occupantsMap.clear(); + nickname = null; + userHasLeft(); + } } @Override diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/UserStatusListener.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/UserStatusListener.java index 4fe0329e8..b9f874425 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/UserStatusListener.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/UserStatusListener.java @@ -21,7 +21,7 @@ import org.jxmpp.jid.Jid; /** * A listener that is fired anytime your participant's status in a room is changed, such as the - * user being kicked, banned, or granted admin permissions. + * user being kicked, banned, or granted admin permissions or the room is destroyed. * * @author Gaston Dombiak */ @@ -123,4 +123,12 @@ public interface UserStatusListener { */ public abstract void adminRevoked(); + /** + * Called when the room is destroyed. + * + * @param alternateMUC an alternate MultiUserChat, may be null. + * @param reason the reason why the room was closed, may be null. + */ + public abstract void roomDestroyed(MultiUserChat alternateMUC, String reason); + }