diff --git a/src/java/com/threerings/crowd/chat/client/ChatDirector.java b/src/java/com/threerings/crowd/chat/client/ChatDirector.java index 8fd758249..4f375888d 100644 --- a/src/java/com/threerings/crowd/chat/client/ChatDirector.java +++ b/src/java/com/threerings/crowd/chat/client/ChatDirector.java @@ -60,6 +60,7 @@ import com.threerings.crowd.chat.data.ChatMessage; import com.threerings.crowd.chat.data.SystemMessage; import com.threerings.crowd.chat.data.TellFeedbackMessage; import com.threerings.crowd.chat.data.UserMessage; +import com.threerings.crowd.chat.data.UserSystemMessage; /** * The chat director is the client side coordinator of all chat related @@ -656,17 +657,27 @@ public class ChatDirector extends BasicDirector String localtype = getLocalType(event.getTargetOid()); String message = msg.message; String autoResponse = null; + Name speaker = null; + byte mode = (byte) -1; - // if the message came from a user, make sure we want to hear it + // figure out if the message was triggered by another user if (msg instanceof UserMessage) { UserMessage umsg = (UserMessage)msg; - Name speaker = umsg.speaker; + speaker = umsg.speaker; + mode = umsg.mode; + + } else if (msg instanceof UserSystemMessage) { + speaker = ((UserSystemMessage) msg).speaker; + } + + // if there was an originating speaker, see if we want to hear it + if (speaker != null) { if ((message = filter(message, speaker, false)) == null) { return; } if (USER_CHAT_TYPE.equals(localtype) && - umsg.mode == ChatCodes.DEFAULT_MODE) { + mode == ChatCodes.DEFAULT_MODE) { // if it was a tell, add the speaker as a chatter addChatter(speaker); @@ -687,9 +698,8 @@ public class ChatDirector extends BasicDirector // if we auto-responded, report as much if (autoResponse != null) { - Name teller = ((UserMessage) msg).speaker; String amsg = MessageBundle.tcompose( - "m.auto_responded", teller, autoResponse); + "m.auto_responded", speaker, autoResponse); displayFeedback(_bundle, amsg); } } diff --git a/src/java/com/threerings/crowd/chat/data/UserSystemMessage.java b/src/java/com/threerings/crowd/chat/data/UserSystemMessage.java new file mode 100644 index 000000000..9e90c6cd3 --- /dev/null +++ b/src/java/com/threerings/crowd/chat/data/UserSystemMessage.java @@ -0,0 +1,41 @@ +// +// $Id$ + +package com.threerings.crowd.chat.data; + +import com.threerings.util.Name; + +/** + * A system message triggered by the activity of another user. + * If the user is muted we can suppress this message, unlike a normal + * system message. + */ +public class UserSystemMessage extends SystemMessage +{ + /** The "speaker" of this message, the user that triggered that this + * message be sent to us. */ + public Name speaker; + + /** Suitable for unserialization. */ + public UserSystemMessage () + { + } + + /** + * Construct a INFO-level UserSystemMessage. + */ + public UserSystemMessage (Name sender, String message, String bundle) + { + this(sender, message, bundle, INFO); + } + + /** + * Construct a UserSystemMessage. + */ + public UserSystemMessage (Name sender, String message, String bundle, + byte attentionLevel) + { + super(message, bundle, attentionLevel); + this.speaker = sender; + } +}