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 Loic Kempf
* @author Yana Stamcheva
* @author Danny van Heumen
*/
public class ChatRoomIrcImpl
extends AbstractChatRoom

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

Loading…
Cancel
Save