Added dummy ChatRoomMember in case the source is an IRCServer instance.

fix-message-formatting
Danny van Heumen 12 years ago
parent cce45a5590
commit f716f9a8cd

@ -15,6 +15,7 @@
import com.ircclouds.irc.api.*;
import com.ircclouds.irc.api.domain.*;
import com.ircclouds.irc.api.domain.messages.*;
import com.ircclouds.irc.api.domain.messages.interfaces.*;
import com.ircclouds.irc.api.listeners.*;
import com.ircclouds.irc.api.state.*;
@ -870,11 +871,8 @@ private void processModeMessage(ChannelModeMessage msg)
{
// TODO Handle or ignore ban channel mode (MODE STRING: +b
// *!*@some-ip.dynamicIP.provider.net)
// TODO msg.getSource() can also be an IRCServer instance.
String sourceNick = ((IRCUser) msg.getSource()).getNick();
ChatRoomMemberIrcImpl sourceMember =
(ChatRoomMemberIrcImpl) this.chatroom
.getChatRoomMember(sourceNick);
ChatRoomMemberIrcImpl sourceMember = extractChatRoomMember(msg);
ModeParser parser = new ModeParser(msg);
for (ModeEntry mode : parser.getModes())
{
@ -1032,6 +1030,11 @@ private void processModeMessage(ChannelModeMessage msg)
sourceMember, new Date(),
ChatRoomMessageReceivedEvent.SYSTEM_MESSAGE_RECEIVED);
break;
case UNKNOWN:
System.out.println("Unknown mode: "
+ (mode.isAdded() ? "+" : "-") + mode.getParams()[0]
+ ". Original mode string: '" + msg.getModeStr() + "'");
break;
default:
System.out.println("Unsupported mode '"
+ (mode.isAdded() ? "+" : "-") + mode.getMode()
@ -1041,6 +1044,36 @@ sourceMember, new Date(),
}
}
private ChatRoomMemberIrcImpl extractChatRoomMember(
ChannelModeMessage msg)
{
ChatRoomMemberIrcImpl member;
ISource source = msg.getSource();
if (source instanceof IRCServer)
{
// TODO Created chat room member with creepy empty contact ID.
// Interacting with this contact might screw up other sections
// of code which is not good. Is there a better way to represent
// an IRC server as a chat room member?
member =
new ChatRoomMemberIrcImpl(IrcStack.this.provider,
this.chatroom, "", ChatRoomMemberRole.ADMINISTRATOR);
}
else if (source instanceof IRCUser)
{
String nick = ((IRCUser) source).getNick();
member =
(ChatRoomMemberIrcImpl) this.chatroom
.getChatRoomMember(nick);
}
else
{
throw new IllegalArgumentException("Unknown source type: "
+ source.getClass().getName());
}
return member;
}
private boolean isThisChatRoom(String chatRoomName)
{
return this.chatroom.getIdentifier().equals(chatRoomName);

@ -9,6 +9,7 @@
*/
public enum Mode
{
UNKNOWN('?', null),
OWNER('O', ChatRoomMemberRole.OWNER),
OPERATOR('o', ChatRoomMemberRole.ADMINISTRATOR),
VOICE('v', ChatRoomMemberRole.MEMBER),

@ -65,16 +65,8 @@ private void parse(String modestring)
adding = false;
break;
default:
try
{
ModeEntry entry = process(adding, c);
modes.add(entry);
}
catch (IllegalArgumentException e)
{
System.out.println("Unknown mode encountered: '" + c
+ "' (mode string '" + modestring + "')");
}
ModeEntry entry = process(adding, c);
modes.add(entry);
break;
}
}
@ -93,20 +85,17 @@ private ModeEntry process(boolean add, char mode)
switch (mode)
{
case 'O':
return new ModeEntry(add, Mode.bySymbol(mode),
this.params[this.index++]);
return new ModeEntry(add, Mode.OWNER, this.params[this.index++]);
case 'o':
return new ModeEntry(add, Mode.bySymbol(mode),
this.params[this.index++]);
return new ModeEntry(add, Mode.OPERATOR, this.params[this.index++]);
case 'v':
return new ModeEntry(add, Mode.bySymbol(mode),
this.params[this.index++]);
return new ModeEntry(add, Mode.VOICE, this.params[this.index++]);
case 'l':
String[] params = (add ? new String[]
{ this.params[this.index++] } : new String[] {});
return new ModeEntry(add, Mode.bySymbol(mode), params);
return new ModeEntry(add, Mode.LIMIT, params);
default:
throw new IllegalArgumentException("" + mode);
return new ModeEntry(add, Mode.UNKNOWN, ""+mode);
}
}

Loading…
Cancel
Save