Working on mode change support and listen to kick channel messages.

fix-message-formatting
Danny van Heumen 12 years ago
parent 57d5a993cb
commit 913949a54e

@ -34,6 +34,7 @@
import com.ircclouds.irc.api.domain.IRCUserStatus;
import com.ircclouds.irc.api.domain.messages.ChanJoinMessage;
import com.ircclouds.irc.api.domain.messages.ChanPartMessage;
import com.ircclouds.irc.api.domain.messages.ChannelKick;
import com.ircclouds.irc.api.domain.messages.ChannelModeMessage;
import com.ircclouds.irc.api.domain.messages.ChannelPrivMsg;
import com.ircclouds.irc.api.domain.messages.QuitMessage;
@ -458,6 +459,23 @@ public void onChannelPart(ChanPartMessage msg)
}
}
}
@Override
public void onChannelKick(ChannelKick msg)
{
// TODO Danny: Do we get kicked out ourselves via this way too?
if (isThisChatRoom(msg.getChannelName()))
{
String user = msg.getSource().getNick();
ChatRoomMember member = this.chatroom.getChatRoomMember(user);
if (member != null)
{
this.chatroom.fireMemberPresenceEvent(member, null,
ChatRoomMemberPresenceChangeEvent.MEMBER_KICKED,
msg.getText());
}
}
}
@Override
public void onUserQuit(QuitMessage msg)
@ -498,49 +516,83 @@ private void processModeMessage(ChannelModeMessage msg)
switch (mode.getMode())
{
case 'O':
ChatRoomMember owner =
this.chatroom.getChatRoomMember(mode.getParams()[0]);
if (mode.isAdded())
String ownerUserName = mode.getParams()[0];
if (isMe(ownerUserName))
{
this.chatroom.fireMemberRoleEvent(owner,
ChatRoomMemberRole.OWNER);
System.out.println("Local user owner change! "
+ mode.isAdded());
// TODO Do something on local user owner change.
}
else
{
this.chatroom.fireMemberRoleEvent(owner,
ChatRoomMemberRole.SILENT_MEMBER);
ChatRoomMember owner =
this.chatroom
.getChatRoomMember(mode.getParams()[0]);
if (mode.isAdded())
{
this.chatroom.fireMemberRoleEvent(owner,
ChatRoomMemberRole.OWNER);
}
else
{
this.chatroom.fireMemberRoleEvent(owner,
ChatRoomMemberRole.SILENT_MEMBER);
}
}
break;
case 'o':
ChatRoomMember op =
this.chatroom.getChatRoomMember(mode.getParams()[0]);
if (mode.isAdded())
String opUserName = mode.getParams()[0];
if (isMe(opUserName))
{
this.chatroom.fireMemberRoleEvent(op,
ChatRoomMemberRole.ADMINISTRATOR);
System.out.println("Local user op change! "
+ mode.isAdded());
// TODO How to fire a local user role change event?
// TODO Do something in case the local user is affected,
// hence the member cannot be found using
// getChatRoomMember.
}
else
{
this.chatroom.fireMemberRoleEvent(op,
ChatRoomMemberRole.SILENT_MEMBER);
ChatRoomMember op =
this.chatroom.getChatRoomMember(opUserName);
if (mode.isAdded())
{
this.chatroom.fireMemberRoleEvent(op,
ChatRoomMemberRole.ADMINISTRATOR);
}
else
{
this.chatroom.fireMemberRoleEvent(op,
ChatRoomMemberRole.SILENT_MEMBER);
}
}
break;
case 'v':
ChatRoomMember voice =
this.chatroom.getChatRoomMember(mode.getParams()[0]);
if (mode.isAdded())
String voiceUserName = mode.getParams()[0];
if (isMe(voiceUserName))
{
this.chatroom.fireMemberRoleEvent(voice,
ChatRoomMemberRole.MEMBER);
System.out.println("Local user voice change! "+mode.isAdded());
// TODO Do something when local user is affected.
}
else
{
this.chatroom.fireMemberRoleEvent(voice,
ChatRoomMemberRole.SILENT_MEMBER);
ChatRoomMember voice =
this.chatroom.getChatRoomMember(voiceUserName);
if (mode.isAdded())
{
this.chatroom.fireMemberRoleEvent(voice,
ChatRoomMemberRole.MEMBER);
}
else
{
this.chatroom.fireMemberRoleEvent(voice,
ChatRoomMemberRole.SILENT_MEMBER);
}
}
break;
default:
System.out.println("Unsupported mode '" + mode.getMode()
System.out.println("Unsupported mode '"
+ (mode.isAdded() ? "+" : "-") + mode.getMode()
+ "' (from modestring '" + msg.getModeStr() + "')");
break;
}
@ -557,6 +609,11 @@ private boolean isMe(IRCUser user)
return IrcStack.this.connectionState.getNickname().equals(
user.getNick());
}
private boolean isMe(String name)
{
return IrcStack.this.connectionState.getNickname().equals(name);
}
}
private static class ServerParameters

@ -76,6 +76,7 @@ public List<Mode> getModes()
public static class Mode
{
private final boolean added;
//TODO Danny: Use enums for modes instead of characters.
private final char mode;
private final String[] params;

Loading…
Cancel
Save