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.IRCUserStatus;
import com.ircclouds.irc.api.domain.messages.ChanJoinMessage; import com.ircclouds.irc.api.domain.messages.ChanJoinMessage;
import com.ircclouds.irc.api.domain.messages.ChanPartMessage; 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.ChannelModeMessage;
import com.ircclouds.irc.api.domain.messages.ChannelPrivMsg; import com.ircclouds.irc.api.domain.messages.ChannelPrivMsg;
import com.ircclouds.irc.api.domain.messages.QuitMessage; import com.ircclouds.irc.api.domain.messages.QuitMessage;
@ -459,6 +460,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 @Override
public void onUserQuit(QuitMessage msg) public void onUserQuit(QuitMessage msg)
{ {
@ -498,8 +516,18 @@ private void processModeMessage(ChannelModeMessage msg)
switch (mode.getMode()) switch (mode.getMode())
{ {
case 'O': case 'O':
String ownerUserName = mode.getParams()[0];
if (isMe(ownerUserName))
{
System.out.println("Local user owner change! "
+ mode.isAdded());
// TODO Do something on local user owner change.
}
else
{
ChatRoomMember owner = ChatRoomMember owner =
this.chatroom.getChatRoomMember(mode.getParams()[0]); this.chatroom
.getChatRoomMember(mode.getParams()[0]);
if (mode.isAdded()) if (mode.isAdded())
{ {
this.chatroom.fireMemberRoleEvent(owner, this.chatroom.fireMemberRoleEvent(owner,
@ -510,10 +538,23 @@ private void processModeMessage(ChannelModeMessage msg)
this.chatroom.fireMemberRoleEvent(owner, this.chatroom.fireMemberRoleEvent(owner,
ChatRoomMemberRole.SILENT_MEMBER); ChatRoomMemberRole.SILENT_MEMBER);
} }
}
break; break;
case 'o': case 'o':
String opUserName = mode.getParams()[0];
if (isMe(opUserName))
{
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
{
ChatRoomMember op = ChatRoomMember op =
this.chatroom.getChatRoomMember(mode.getParams()[0]); this.chatroom.getChatRoomMember(opUserName);
if (mode.isAdded()) if (mode.isAdded())
{ {
this.chatroom.fireMemberRoleEvent(op, this.chatroom.fireMemberRoleEvent(op,
@ -524,10 +565,19 @@ private void processModeMessage(ChannelModeMessage msg)
this.chatroom.fireMemberRoleEvent(op, this.chatroom.fireMemberRoleEvent(op,
ChatRoomMemberRole.SILENT_MEMBER); ChatRoomMemberRole.SILENT_MEMBER);
} }
}
break; break;
case 'v': case 'v':
String voiceUserName = mode.getParams()[0];
if (isMe(voiceUserName))
{
System.out.println("Local user voice change! "+mode.isAdded());
// TODO Do something when local user is affected.
}
else
{
ChatRoomMember voice = ChatRoomMember voice =
this.chatroom.getChatRoomMember(mode.getParams()[0]); this.chatroom.getChatRoomMember(voiceUserName);
if (mode.isAdded()) if (mode.isAdded())
{ {
this.chatroom.fireMemberRoleEvent(voice, this.chatroom.fireMemberRoleEvent(voice,
@ -538,9 +588,11 @@ private void processModeMessage(ChannelModeMessage msg)
this.chatroom.fireMemberRoleEvent(voice, this.chatroom.fireMemberRoleEvent(voice,
ChatRoomMemberRole.SILENT_MEMBER); ChatRoomMemberRole.SILENT_MEMBER);
} }
}
break; break;
default: default:
System.out.println("Unsupported mode '" + mode.getMode() System.out.println("Unsupported mode '"
+ (mode.isAdded() ? "+" : "-") + mode.getMode()
+ "' (from modestring '" + msg.getModeStr() + "')"); + "' (from modestring '" + msg.getModeStr() + "')");
break; break;
} }
@ -557,6 +609,11 @@ private boolean isMe(IRCUser user)
return IrcStack.this.connectionState.getNickname().equals( return IrcStack.this.connectionState.getNickname().equals(
user.getNick()); user.getNick());
} }
private boolean isMe(String name)
{
return IrcStack.this.connectionState.getNickname().equals(name);
}
} }
private static class ServerParameters private static class ServerParameters

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

Loading…
Cancel
Save