Fixed a case where the chat room members are cleaned out because the

account is already disabled, but a handler is still acting on its final
messages.
fix-message-formatting
Danny van Heumen 11 years ago
parent f6c4a76dbf
commit 1e3325adaa

@ -1514,19 +1514,22 @@ public void onChannelPart(final ChanPartMessage msg)
String userNick = msg.getSource().getNick(); String userNick = msg.getSource().getNick();
ChatRoomMember member = this.chatroom.getChatRoomMember(userNick); ChatRoomMember member = this.chatroom.getChatRoomMember(userNick);
try if (member != null)
{
// 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( // When the account has been disabled, the chat room may return
"This should not have happened. Please report this " // null. If that is NOT the case, continue handling.
+ "as it is a bug.", e); try
{
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);
}
} }
} }
@ -1738,12 +1741,11 @@ public void onChannelNotice(final ChannelNotice msg)
*/ */
private void leaveChatRoom() private void leaveChatRoom()
{ {
if (!IrcStack.this.isConnected()) final IRCApi irc = IrcStack.this.session.get();
if (irc != null)
{ {
return; irc.deleteListener(this);
} }
final IRCApi irc = IrcStack.this.session.get();
irc.deleteListener(this);
IrcStack.this.joined.remove(this.chatroom.getIdentifier()); IrcStack.this.joined.remove(this.chatroom.getIdentifier());
IrcStack.this.provider.getMUC().fireLocalUserPresenceEvent( IrcStack.this.provider.getMUC().fireLocalUserPresenceEvent(
this.chatroom, this.chatroom,
@ -1954,10 +1956,7 @@ private boolean isThisChatRoom(final String chatRoomName)
*/ */
private boolean isMe(final IRCUser user) private boolean isMe(final IRCUser user)
{ {
// FIXME in case of disconnected, connectionState == null, so return isMe(user.getNick());
// results in NPE.
return IrcStack.this.connectionState.getNickname().equals(
user.getNick());
} }
/** /**
@ -1968,9 +1967,12 @@ private boolean isMe(final IRCUser user)
*/ */
private boolean isMe(final String name) private boolean isMe(final String name)
{ {
// FIXME in case of disconnected, connectionState == null, so String userNick = IrcStack.this.getActiveNick();
// results in NPE. if (userNick == null)
return IrcStack.this.connectionState.getNickname().equals(name); {
return false;
}
return userNick.equals(name);
} }
} }

Loading…
Cancel
Save