Handle CAP away-notify events.

maven
Danny van Heumen 11 years ago
parent 0e810a59a3
commit 074983969c

@ -795,8 +795,6 @@ public void onServerNumericMessage(final ServerNumericMessage msg)
* chat room listener updates chat room data and fires events based on IRC
* messages that report state changes for the specified channel.
*
* FIXME handle AWAY messages (from away-notify) for fellow channel members
*
* @author Danny van Heumen
*/
private final class ChatRoomListener
@ -1063,19 +1061,7 @@ public void onServerNumericMessage(final ServerNumericMessage msg)
{
final IrcStatusEnum status =
determineStatus(messageComponents[5]);
final IrcStatusEnum previous =
member.setPresenceStatus(status);
if (previous == status) {
// if there is no change in status, do not fire member
// property change event
return;
}
final ChatRoomMemberPropertyChangeEvent presenceEvent =
new ChatRoomMemberPropertyChangeEvent(member,
this.chatroom,
ChatRoomMemberPropertyChangeEvent.MEMBER_PRESENCE,
previous, status);
this.chatroom.fireMemberPropertyChangeEvent(presenceEvent);
updateMemberPresence(member, status);
}
break;
@ -1299,6 +1285,48 @@ public void onChannelNotice(final ChannelNotice msg)
ChatRoomMessageReceivedEvent.CONVERSATION_MESSAGE_RECEIVED);
}
/**
* Event in case of user away message (CAP away-notify)
*
* @param aMsg away message
*/
@Override
public void onUserAway(AwayMessage msg)
{
final ChatRoomMemberIrcImpl member =
(ChatRoomMemberIrcImpl) this.chatroom.getChatRoomMember(msg
.getSource().getNick());
if (member != null)
{
final IrcStatusEnum status =
msg.isAway() ? IrcStatusEnum.AWAY : IrcStatusEnum.ONLINE;
updateMemberPresence(member, status);
}
}
/**
* Update member presence status.
*
* @param member the member
* @param newStatus the new presence status
*/
private void updateMemberPresence(ChatRoomMemberIrcImpl member,
IrcStatusEnum newStatus)
{
final IrcStatusEnum previous = member.setPresenceStatus(newStatus);
if (previous == newStatus) {
// if there is no change in status, do not fire member
// property change event
return;
}
final ChatRoomMemberPropertyChangeEvent presenceEvent =
new ChatRoomMemberPropertyChangeEvent(member,
this.chatroom,
ChatRoomMemberPropertyChangeEvent.MEMBER_PRESENCE,
previous, newStatus);
this.chatroom.fireMemberPropertyChangeEvent(presenceEvent);
}
/**
* Leave this chat room.
*/

Loading…
Cancel
Save