Removes unnecessary disco info sent before joinning the room.

cusax-fix
hristoterezov 12 years ago
parent c515624c49
commit 6ef4e97131

@ -504,6 +504,13 @@ public void joinAs(String nickname, byte[] password)
} }
else else
{ {
this.provider.getConnection().addPacketListener(
new PresenceListeners(this),
new AndFilter(
new FromMatchesFilter(
multiUserChat.getRoom() + "/" + this.nickname),
new PacketTypeFilter(
org.jivesoftware.smack.packet.Presence.class)));
if(password == null) if(password == null)
multiUserChat.join(nickname); multiUserChat.join(nickname);
else else
@ -2324,6 +2331,62 @@ MultiUserChat getMultiUserChat()
{ {
return multiUserChat; return multiUserChat;
} }
/**
* Listens for presence packets.
*/
private class PresenceListeners
implements PacketListener
{
/**
* Chat room associated with the listener.
*/
private ChatRoom chatRoom;
/**
* Creates an instance of a listener of presence packets.
*
* @param chatRoom the chat room associated with the listener
*/
public PresenceListeners(ChatRoom chatRoom)
{
super();
this.chatRoom = chatRoom;
}
/**
* Process incoming presence packet, checks if the room is created and
* finishes the creation of the room.
* @param packet the incoming packet.
*/
@Override
public void processPacket(Packet packet)
{
Presence presence = (Presence) packet;
if (presence == null || presence.getError() != null)
return;
MUCUser mucUser = getMUCUserExtension(packet);
if (mucUser != null && mucUser.getStatus() != null) {
if ("201".equals(mucUser.getStatus().getCode())) {
try
{
multiUserChat.sendConfigurationForm(
new Form(Form.TYPE_SUBMIT));
} catch (XMPPException e)
{
logger.error("Failed to send config form.", e);
}
opSetMuc.addSmackInvitationRejectionListener(multiUserChat,
chatRoom);
setLocalUserRole(ChatRoomMemberRole.MODERATOR);
provider.getConnection().removePacketListener(this);
}
}
}
}
/** /**
* Listens for rejection message and delivers system message when received. * Listens for rejection message and delivers system message when received.

@ -74,6 +74,21 @@ public class OperationSetMultiUserChatJabberImpl
presenceOpSet.addSubscriptionListener(this); presenceOpSet.addSubscriptionListener(this);
} }
/**
* Add SmackInvitationRejectionListener to <tt>MultiUserChat</tt> instance
* which will dispatch all rejection events.
*
* @param muc the smack MultiUserChat instance that we're going to wrap our
* chat room around.
* @param chatRoom the associated chat room instance
*/
public void addSmackInvitationRejectionListener(MultiUserChat muc,
ChatRoom chatRoom)
{
muc.addInvitationRejectionListener(
new SmackInvitationRejectionListener(chatRoom));
}
/** /**
* Creates a room with the named <tt>roomName</tt> and according to the * Creates a room with the named <tt>roomName</tt> and according to the
* specified <tt>roomProperties</tt> on the server that this protocol * specified <tt>roomProperties</tt> on the server that this protocol
@ -168,8 +183,7 @@ private ChatRoom createLocalChatRoomInstance(MultiUserChat muc)
// Add the contained in this class SmackInvitationRejectionListener // Add the contained in this class SmackInvitationRejectionListener
// which will dispatch all rejection events to the // which will dispatch all rejection events to the
// ChatRoomInvitationRejectionListener. // ChatRoomInvitationRejectionListener.
muc.addInvitationRejectionListener( addSmackInvitationRejectionListener(muc, chatRoom);
new SmackInvitationRejectionListener(chatRoom));
return chatRoom; return chatRoom;
} }
@ -200,26 +214,12 @@ public synchronized ChatRoom findRoom(String roomName)
if (room != null) if (room != null)
return room; return room;
try MultiUserChat muc
{ = new MultiUserChat(getXmppConnection(), canonicalRoomName);
// throws Exception if room does not exist
// do not use MultiUserChat.getRoomInfo as there is a bug which
// throws NPE
ServiceDiscoveryManager.getInstanceFor(getXmppConnection()).
discoverInfo(canonicalRoomName);
MultiUserChat muc room = new ChatRoomJabberImpl(muc, jabberProvider);
= new MultiUserChat(getXmppConnection(), canonicalRoomName); chatRoomCache.put(canonicalRoomName, room);
return room;
room = new ChatRoomJabberImpl(muc, jabberProvider);
chatRoomCache.put(canonicalRoomName, room);
return room;
}
catch (XMPPException e)
{
// room not found
return null;
}
} }
/** /**
@ -597,11 +597,6 @@ public void invitationReceived(Connection conn,
try try
{ {
chatRoom = (ChatRoomJabberImpl) findRoom(room); chatRoom = (ChatRoomJabberImpl) findRoom(room);
if (chatRoom == null)
{
MultiUserChat muc = new MultiUserChat(conn, room);
chatRoom = new ChatRoomJabberImpl(muc, jabberProvider);
}
if (password != null) if (password != null)
fireInvitationEvent( fireInvitationEvent(
chatRoom, inviter, reason, password.getBytes()); chatRoom, inviter, reason, password.getBytes());

Loading…
Cancel
Save