Fire message received upon receiving RPL_AWAY message from server.

cefexperiments
Danny van Heumen 11 years ago
parent 1e61963e58
commit e6c4a4d9f2

@ -1167,6 +1167,23 @@ private static ChatRoomMemberRole convertMemberMode(final char modeSymbol)
private final class ServerListener
extends VariousMessageListenerAdapter
{
/**
* IRC reply code for automatic reply containing away message.
*/
private static final int RPL_AWAY = 301;
/**
* IRC error code for case of non-existing nick or channel name.
*/
private static final int ERR_NO_SUCH_NICK_CHANNEL =
IRCServerNumerics.NO_SUCH_NICK_CHANNEL;
/**
* IRC reply code for end of list.
*/
private static final int RPL_LISTEND =
IRCServerNumerics.CHANNEL_NICKS_END_OF_LIST;
/**
* IRCApi instance.
*/
@ -1229,13 +1246,13 @@ public void onServerNumericMessage(final ServerNumericMessage msg)
switch (code.intValue())
{
case IRCServerNumerics.CHANNEL_NICKS_END_OF_LIST:
// CHANNEL_NICKS_END_OF_LIST indicates the end of a nick list as
// you will receive when joining a channel. This is used as the
// indicator that we have joined a channel. Now we have to
// determine whether or not we already know about this
// particular join attempt. If not, we continue to inform Jitsi
// and to create a listener for this new chat room.
case RPL_LISTEND:
// This indicates the end of a nick list as you will receive
// when joining a channel. This is used as the indicator that we
// have joined a channel. Now we have to determine whether or
// not we already know about this particular join attempt. If
// not, we continue to inform Jitsi and to create a listener
// for this new chat room.
final String text = msg.getText();
final String channelName = text.substring(0, text.indexOf(' '));
final ChatRoomIrcImpl chatRoom;
@ -1285,7 +1302,7 @@ public void onServerNumericMessage(final ServerNumericMessage msg)
+ "' completed.");
break;
case IRCServerNumerics.NO_SUCH_NICK_CHANNEL:
case ERR_NO_SUCH_NICK_CHANNEL:
// TODO Check if target is Contact, then update contact presence
// status to off-line since the nick apparently does not exist
// anymore.
@ -1325,6 +1342,21 @@ public void onServerNumericMessage(final ServerNumericMessage msg)
.OFFLINE_MESSAGES_NOT_SUPPORTED);
break;
case RPL_AWAY:
final String rawAwayText = msg.getText();
final String awayUserNick =
rawAwayText.substring(0, rawAwayText.indexOf(' '));
final String awayText =
rawAwayText.substring(rawAwayText.indexOf(' ') + 2);
final MessageIrcImpl awayMessage =
MessageIrcImpl.newAwayMessageFromIRC(awayText);
final Contact awayUser =
IrcStack.this.provider.getPersistentPresence()
.findOrCreateContactByID(awayUserNick);
IrcStack.this.provider.getBasicInstantMessaging()
.fireMessageReceived(awayMessage, awayUser);
break;
default:
if (LOGGER.isTraceEnabled())
{

@ -144,6 +144,20 @@ private static MessageIrcImpl newActionFromIRC(final String user,
null);
}
/**
* Construct the new away message.
*
* @param message the IRC away message
* @return returns a new message instance
*/
public static MessageIrcImpl newAwayMessageFromIRC(final String message)
{
String text = Utils.parseIrcMessage(message);
text = Utils.styleAsAwayMessage(text);
return new MessageIrcImpl(text, HTML_MIME_TYPE, DEFAULT_MIME_ENCODING,
null);
}
/**
* Creates a message instance according to the specified parameters.
*

@ -222,4 +222,15 @@ public static String styleAsAction(final String message, final String user)
{
return "<b>*" + user + "</b> " + message;
}
/**
* Format message as HTML-formatted away message.
*
* @param text away message
* @return returns HTML-formatted message
*/
public static String styleAsAwayMessage(final String text)
{
return "<i>Away: " + text + "</i>";
}
}

Loading…
Cancel
Save