Include local user in chat room member list operations.

fix-message-formatting
Danny van Heumen 12 years ago
parent 672dcb500d
commit a6b354ce83

@ -20,6 +20,7 @@
* @author Stephane Remy * @author Stephane Remy
* @author Loic Kempf * @author Loic Kempf
* @author Yana Stamcheva * @author Yana Stamcheva
* @author Danny van Heumen
*/ */
public class ChatRoomIrcImpl public class ChatRoomIrcImpl
extends AbstractChatRoom extends AbstractChatRoom

@ -527,8 +527,9 @@ public void onSuccess(IRCChannel channel)
+ "of channel '" + chatroom.getIdentifier() + "of channel '" + chatroom.getIdentifier()
+ "'."); + "'.");
} }
String chatRoomId = chatroom.getIdentifier();
boolean isRequestedChatRoom = channel.getName() boolean isRequestedChatRoom = channel.getName()
.equalsIgnoreCase(chatroom.getIdentifier()); .equalsIgnoreCase(chatRoomId);
synchronized (joinSignal) synchronized (joinSignal)
{ {
if (!isRequestedChatRoom) if (!isRequestedChatRoom)
@ -541,7 +542,7 @@ public void onSuccess(IRCChannel channel)
.trace("Callback for successful join " .trace("Callback for successful join "
+ "finished prematurely since we " + "finished prematurely since we "
+ "got forwarded from '" + "got forwarded from '"
+ chatroom.getIdentifier() + chatRoomId
+ "' to '" + "' to '"
+ channel.getName() + channel.getName()
+ "'. Joining of forwarded channel " + "'. Joining of forwarded channel "
@ -549,8 +550,7 @@ public void onSuccess(IRCChannel channel)
+ "since that channel was not " + "since that channel was not "
+ "announced."); + "announced.");
} }
IrcStack.this.joining.remove(chatroom IrcStack.this.joining.remove(chatRoomId);
.getIdentifier());
IrcStack.this.provider IrcStack.this.provider
.getMUC() .getMUC()
.fireLocalUserPresenceEvent( .fireLocalUserPresenceEvent(
@ -570,10 +570,8 @@ public void onSuccess(IRCChannel channel)
try try
{ {
IrcStack.this.joined.put( IrcStack.this.joined.put(chatRoomId, chatroom);
chatroom.getIdentifier(), chatroom); IrcStack.this.joining.remove(chatRoomId);
IrcStack.this.joining.remove(chatroom
.getIdentifier());
IrcStack.this.irc IrcStack.this.irc
.addListener(new ChatRoomListener( .addListener(new ChatRoomListener(
chatroom)); chatroom));
@ -599,7 +597,7 @@ public void onSuccess(IRCChannel channel)
LOGGER LOGGER
.trace("Finished successful join " .trace("Finished successful join "
+ "callback for channel '" + "callback for channel '"
+ chatroom.getIdentifier() + chatRoomId
+ "'. Waking up original thread."); + "'. Waking up original thread.");
} }
// Notify waiting threads of finished // Notify waiting threads of finished
@ -616,12 +614,12 @@ public void onFailure(Exception e)
LOGGER.trace("Started callback for failed attempt to " LOGGER.trace("Started callback for failed attempt to "
+ "join channel '" + chatroom.getIdentifier() + "join channel '" + chatroom.getIdentifier()
+ "'."); + "'.");
String chatRoomId = chatroom.getIdentifier();
synchronized (joinSignal) synchronized (joinSignal)
{ {
try try
{ {
IrcStack.this.joining.remove(chatroom IrcStack.this.joining.remove(chatRoomId);
.getIdentifier());
IrcStack.this.provider IrcStack.this.provider
.getMUC() .getMUC()
.fireLocalUserPresenceEvent( .fireLocalUserPresenceEvent(
@ -637,7 +635,7 @@ public void onFailure(Exception e)
LOGGER LOGGER
.trace("Finished callback for failed " .trace("Finished callback for failed "
+ "attempt to join channel '" + "attempt to join channel '"
+ chatroom.getIdentifier() + chatRoomId
+ "'. Waking up original thread."); + "'. Waking up original thread.");
} }
// Notify waiting threads of finished // Notify waiting threads of finished
@ -806,13 +804,10 @@ private void prepareChatRoom(final ChatRoomIrcImpl chatRoom,
{ {
chatRoom.prepUserRole(role); chatRoom.prepUserRole(role);
} }
else ChatRoomMemberIrcImpl member =
{ new ChatRoomMemberIrcImpl(this.provider, chatRoom,
ChatRoomMemberIrcImpl member = user.getNick(), role);
new ChatRoomMemberIrcImpl(this.provider, chatRoom, chatRoom.addChatRoomMember(member.getContactAddress(), member);
user.getNick(), role);
chatRoom.addChatRoomMember(member.getContactAddress(), member);
}
} }
} }
@ -1018,18 +1013,22 @@ private void deliverReceivedMessageToPrivateChat(
/** /**
* Create a private chat room if one does not exist yet. * Create a private chat room if one does not exist yet.
* *
* @param user private chat room for this user * @param userName private chat room for this user
* @return returns the private chat room * @return returns the private chat room
*/ */
private ChatRoomIrcImpl initiatePrivateChatRoom(String user) private ChatRoomIrcImpl initiatePrivateChatRoom(String userName)
{ {
OperationSetMultiUserChatIrcImpl muc = OperationSetMultiUserChatIrcImpl muc =
IrcStack.this.provider.getMUC(); IrcStack.this.provider.getMUC();
ChatRoomIrcImpl chatroom = muc.findOrCreateRoom(user); ChatRoomIrcImpl chatroom = muc.findOrCreateRoom(userName);
IrcStack.this.joined.put(chatroom.getIdentifier(), chatroom); IrcStack.this.joined.put(chatroom.getIdentifier(), chatroom);
ChatRoomMemberIrcImpl member = final ChatRoomMemberIrcImpl user =
new ChatRoomMemberIrcImpl(IrcStack.this.provider, chatroom, new ChatRoomMemberIrcImpl(IrcStack.this.provider, chatroom,
user, ChatRoomMemberRole.MEMBER); IrcStack.this.getNick(), ChatRoomMemberRole.MEMBER);
chatroom.addChatRoomMember(user.getContactAddress(), user);
final ChatRoomMemberIrcImpl member =
new ChatRoomMemberIrcImpl(IrcStack.this.provider, chatroom,
userName, ChatRoomMemberRole.MEMBER);
chatroom.addChatRoomMember(member.getContactAddress(), member); chatroom.addChatRoomMember(member.getContactAddress(), member);
IrcStack.this.provider.getMUC().fireLocalUserPresenceEvent( IrcStack.this.provider.getMUC().fireLocalUserPresenceEvent(
chatroom, chatroom,
@ -1046,13 +1045,17 @@ private ChatRoomIrcImpl initiatePrivateChatRoom(String user)
* chat room listener updates chat room data and fires events based on IRC * chat room listener updates chat room data and fires events based on IRC
* messages that report state changes for the specified channel. * messages that report state changes for the specified channel.
* *
* @author danny * @author Danny van Heumen
* *
*/ */
private class ChatRoomListener private class ChatRoomListener
extends VariousMessageListenerAdapter extends VariousMessageListenerAdapter
{ {
/**
* IRC error code for case where user is not joined to that channel.
*/
private static final int IRC_ERR_NOTONCHANNEL = 442; private static final int IRC_ERR_NOTONCHANNEL = 442;
/** /**
* Chat room for which this listener is working. * Chat room for which this listener is working.
*/ */
@ -1104,19 +1107,12 @@ public void onChannelJoin(ChanJoinMessage msg)
if (!isThisChatRoom(msg.getChannelName())) if (!isThisChatRoom(msg.getChannelName()))
return; return;
if (isMe(msg.getSource())) String user = msg.getSource().getNick();
{ ChatRoomMemberIrcImpl member =
// I think that this should not happen. new ChatRoomMemberIrcImpl(IrcStack.this.provider,
} this.chatroom, user, ChatRoomMemberRole.SILENT_MEMBER);
else this.chatroom.fireMemberPresenceEvent(member, null,
{ ChatRoomMemberPresenceChangeEvent.MEMBER_JOINED, null);
String user = msg.getSource().getNick();
ChatRoomMemberIrcImpl member =
new ChatRoomMemberIrcImpl(IrcStack.this.provider,
this.chatroom, user, ChatRoomMemberRole.SILENT_MEMBER);
this.chatroom.fireMemberPresenceEvent(member, null,
ChatRoomMemberPresenceChangeEvent.MEMBER_JOINED, null);
}
} }
/** /**
@ -1128,28 +1124,28 @@ public void onChannelPart(ChanPartMessage msg)
if (!isThisChatRoom(msg.getChannelName())) if (!isThisChatRoom(msg.getChannelName()))
return; return;
if (isMe(msg.getSource())) IRCUser user = msg.getSource();
if (isMe(user))
{ {
leaveChatRoom(); leaveChatRoom();
return;
} }
else
String userNick = msg.getSource().getNick();
ChatRoomMember member = this.chatroom.getChatRoomMember(userNick);
try
{ {
String user = msg.getSource().getNick(); // Possibility that 'member' is null (should be fixed now
ChatRoomMember member = this.chatroom.getChatRoomMember(user); // that race condition in irc-api is fixed)
try this.chatroom.fireMemberPresenceEvent(member, null,
{ ChatRoomMemberPresenceChangeEvent.MEMBER_LEFT,
// Possibility that 'member' is null (should be fixed now msg.getPartMsg());
// that race condition in irc-api is fixed) }
this.chatroom.fireMemberPresenceEvent(member, null, catch (NullPointerException e)
ChatRoomMemberPresenceChangeEvent.MEMBER_LEFT, {
msg.getPartMsg()); LOGGER.warn(
} "This should not have happened. Please report this "
catch (NullPointerException e) + "as it is a bug.", e);
{
LOGGER.warn(
"This should not have happened. Please report this "
+ "as it is a bug.", e);
}
} }
} }
@ -1196,6 +1192,17 @@ public void onChannelKick(ChannelKick msg)
return; return;
String kickedUser = msg.getKickedNickname(); String kickedUser = msg.getKickedNickname();
ChatRoomMember kickedMember =
this.chatroom.getChatRoomMember(kickedUser);
String user = msg.getSource().getNick();
if (kickedMember != null)
{
ChatRoomMember kicker = this.chatroom.getChatRoomMember(user);
this.chatroom.fireMemberPresenceEvent(kickedMember, kicker,
ChatRoomMemberPresenceChangeEvent.MEMBER_KICKED,
msg.getText());
}
if (isMe(kickedUser)) if (isMe(kickedUser))
{ {
IrcStack.this.irc.deleteListener(this); IrcStack.this.irc.deleteListener(this);
@ -1205,20 +1212,6 @@ public void onChannelKick(ChannelKick msg)
LocalUserChatRoomPresenceChangeEvent.LOCAL_USER_KICKED, LocalUserChatRoomPresenceChangeEvent.LOCAL_USER_KICKED,
msg.getText()); msg.getText());
} }
else
{
ChatRoomMember kickedMember =
this.chatroom.getChatRoomMember(kickedUser);
String user = msg.getSource().getNick();
if (kickedMember != null)
{
ChatRoomMember kicker =
this.chatroom.getChatRoomMember(user);
this.chatroom.fireMemberPresenceEvent(kickedMember, kicker,
ChatRoomMemberPresenceChangeEvent.MEMBER_KICKED,
msg.getText());
}
}
} }
/** /**
@ -1333,23 +1326,19 @@ private void processModeMessage(ChannelModeMessage msg)
} }
this.chatroom.fireLocalUserRoleChangedEvent(event); this.chatroom.fireLocalUserRoleChangedEvent(event);
} }
else ChatRoomMember owner =
this.chatroom.getChatRoomMember(mode.getParams()[0]);
if (owner != null)
{ {
ChatRoomMember owner = if (mode.isAdded())
this.chatroom
.getChatRoomMember(mode.getParams()[0]);
if (owner != null)
{ {
if (mode.isAdded()) this.chatroom.fireMemberRoleEvent(owner,
{ ChatRoomMemberRole.OWNER);
this.chatroom.fireMemberRoleEvent(owner, }
ChatRoomMemberRole.OWNER); else
} {
else this.chatroom.fireMemberRoleEvent(owner,
{ ChatRoomMemberRole.SILENT_MEMBER);
this.chatroom.fireMemberRoleEvent(owner,
ChatRoomMemberRole.SILENT_MEMBER);
}
} }
} }
break; break;
@ -1376,22 +1365,19 @@ private void processModeMessage(ChannelModeMessage msg)
} }
this.chatroom.fireLocalUserRoleChangedEvent(event); this.chatroom.fireLocalUserRoleChangedEvent(event);
} }
else ChatRoomMember op =
this.chatroom.getChatRoomMember(opUserName);
if (op != null)
{ {
ChatRoomMember op = if (mode.isAdded())
this.chatroom.getChatRoomMember(opUserName);
if (op != null)
{ {
if (mode.isAdded()) this.chatroom.fireMemberRoleEvent(op,
{ ChatRoomMemberRole.ADMINISTRATOR);
this.chatroom.fireMemberRoleEvent(op, }
ChatRoomMemberRole.ADMINISTRATOR); else
} {
else this.chatroom.fireMemberRoleEvent(op,
{ ChatRoomMemberRole.SILENT_MEMBER);
this.chatroom.fireMemberRoleEvent(op,
ChatRoomMemberRole.SILENT_MEMBER);
}
} }
} }
break; break;
@ -1417,22 +1403,19 @@ private void processModeMessage(ChannelModeMessage msg)
} }
this.chatroom.fireLocalUserRoleChangedEvent(event); this.chatroom.fireLocalUserRoleChangedEvent(event);
} }
else ChatRoomMember voice =
this.chatroom.getChatRoomMember(voiceUserName);
if (voice != null)
{ {
ChatRoomMember voice = if (mode.isAdded())
this.chatroom.getChatRoomMember(voiceUserName);
if (voice != null)
{ {
if (mode.isAdded()) this.chatroom.fireMemberRoleEvent(voice,
{ ChatRoomMemberRole.MEMBER);
this.chatroom.fireMemberRoleEvent(voice, }
ChatRoomMemberRole.MEMBER); else
} {
else this.chatroom.fireMemberRoleEvent(voice,
{ ChatRoomMemberRole.SILENT_MEMBER);
this.chatroom.fireMemberRoleEvent(voice,
ChatRoomMemberRole.SILENT_MEMBER);
}
} }
} }
break; break;

Loading…
Cancel
Save