diff --git a/src/as/com/threerings/crowd/chat/client/ChatDirector.as b/src/as/com/threerings/crowd/chat/client/ChatDirector.as index abbdb9677..313a3fe3a 100644 --- a/src/as/com/threerings/crowd/chat/client/ChatDirector.as +++ b/src/as/com/threerings/crowd/chat/client/ChatDirector.as @@ -302,14 +302,10 @@ public class ChatDirector extends BasicDirector /** * Dispatches the provided message to our chat displays. */ - public function dispatchMessage (message :ChatMessage) :void + public function dispatchMessage (message :ChatMessage, localType :String) :void { - var displayed :Boolean = false; - _displays.apply(function (disp :ChatDisplay) :void { - if (disp.displayMessage(message, displayed)) { - displayed = true; - } - }); + message.setClientInfo(xlate(message.bundle, message.message), localType); + dispatchPreparedMessage(message); } /** @@ -447,13 +443,15 @@ public class ChatDirector extends BasicDirector var failure :Function = function (reason :String) :void { var msg :String = MessageBundle.compose( "m.tell_failed", MessageBundle.taint(target), reason); - dispatchMessage(new TellFeedbackMessage(target, xlate(_bundle, msg), true)); + var tfm :TellFeedbackMessage = new TellFeedbackMessage(target, msg, true); + tfm.bundle = _bundle; + dispatchMessage(tfm, ChatCodes.PLACE_CHAT_TYPE); if (rl != null) { rl.requestFailed(null); } }; var success :Function = function (idleTime :Long, awayMessage :String) :void { - dispatchMessage(new TellFeedbackMessage(target, message)); + dispatchMessage(new TellFeedbackMessage(target, message), ChatCodes.PLACE_CHAT_TYPE); addChatter(target); if (rl != null) { rl.requestCompleted(target); @@ -579,7 +577,6 @@ public class ChatDirector extends BasicDirector if (ChatCodes.CHAT_NOTIFICATION === event.getName()) { var msg :ChatMessage = (event.getArgs()[0] as ChatMessage); var localtype :String = getLocalType(event.getTargetOid()); - var message :String = msg.message; var autoResponse :String = null; var speaker :Name = null; var mode :int = -1; @@ -596,7 +593,7 @@ public class ChatDirector extends BasicDirector // if there was an originating speaker, see if we want to hear it if (speaker != null) { - if ((message = filter(message, speaker, false)) == null) { + if ((msg.message = filter(msg.message, speaker, false)) == null) { return; } @@ -612,11 +609,8 @@ public class ChatDirector extends BasicDirector } } - // initialize the client-specific fields of the message - msg.setClientInfo(xlate(msg.bundle, message), localtype); - // and send it off! - dispatchMessage(msg); + dispatchMessage(msg, localtype); // if we auto-responded, report as much if (autoResponse != null) { @@ -674,6 +668,19 @@ public class ChatDirector extends BasicDirector _cservice = null; } + /** + * Dispatch a message to chat displays once it is fully prepared with the clientinfo. + */ + protected function dispatchPreparedMessage (message :ChatMessage) :void + { + var displayed :Boolean = false; + _displays.apply(function (disp :ChatDisplay) :void { + if (disp.displayMessage(message, displayed)) { + displayed = true; + } + }); + } + /** * Called to determine whether we are permitted to post the supplied chat message. Derived * classes may wish to throttle chat or restrict certain types in certain circumstances for @@ -913,10 +920,8 @@ public class ChatDirector extends BasicDirector if (bundle == null) { bundle = _bundle; } - var msg :SystemMessage = new SystemMessage(); - msg.attentionLevel = attLevel; - msg.setClientInfo(xlate(bundle, message), localtype); - dispatchMessage(msg); + var msg :SystemMessage = new SystemMessage(message, bundle, attLevel); + dispatchMessage(msg, localtype); } /** diff --git a/src/as/com/threerings/crowd/chat/data/TellFeedbackMessage.as b/src/as/com/threerings/crowd/chat/data/TellFeedbackMessage.as index fd80be990..f2c075f6d 100644 --- a/src/as/com/threerings/crowd/chat/data/TellFeedbackMessage.as +++ b/src/as/com/threerings/crowd/chat/data/TellFeedbackMessage.as @@ -34,7 +34,6 @@ public class TellFeedbackMessage extends UserMessage public function TellFeedbackMessage (target :Name, message :String, failed :Boolean = false) { super(target, null, message); - setClientInfo(message, ChatCodes.PLACE_CHAT_TYPE); _failed = failed; } diff --git a/src/java/com/threerings/crowd/chat/client/ChatDirector.java b/src/java/com/threerings/crowd/chat/client/ChatDirector.java index 5597c10c7..bff74819b 100644 --- a/src/java/com/threerings/crowd/chat/client/ChatDirector.java +++ b/src/java/com/threerings/crowd/chat/client/ChatDirector.java @@ -353,10 +353,10 @@ public class ChatDirector extends BasicDirector /** * Dispatches the provided message to our chat displays. */ - public void dispatchMessage (ChatMessage message) + public void dispatchMessage (ChatMessage message, String localType) { - _displayMessageOp.setMessage(message); - _displays.apply(_displayMessageOp); + message.setClientInfo(xlate(message.bundle, message.message), localType); + dispatchPreparedMessage(message); } /** @@ -526,7 +526,7 @@ public class ChatDirector extends BasicDirector } protected void success () { - dispatchMessage(new TellFeedbackMessage(target, message, false)); + dispatchMessage(new TellFeedbackMessage(target, message, false), ChatCodes.PLACE_CHAT_TYPE); addChatter(target); if (rl != null) { rl.requestCompleted(target); @@ -536,7 +536,9 @@ public class ChatDirector extends BasicDirector public void requestFailed (String reason) { String msg = MessageBundle.compose( "m.tell_failed", MessageBundle.taint(target), reason); - dispatchMessage(new TellFeedbackMessage(target, xlate(_bundle, msg), true)); + TellFeedbackMessage tfm = new TellFeedbackMessage(target, msg, true); + tfm.bundle = _bundle; + dispatchMessage(tfm, ChatCodes.PLACE_CHAT_TYPE); if (rl != null) { rl.requestFailed(null); } @@ -638,7 +640,6 @@ public class ChatDirector extends BasicDirector if (CHAT_NOTIFICATION.equals(event.getName())) { ChatMessage msg = (ChatMessage) event.getArgs()[0]; String localtype = getLocalType(event.getTargetOid()); - String message = msg.message; String autoResponse = null; Name speaker = null; Name speakerDisplay = null; @@ -658,7 +659,7 @@ public class ChatDirector extends BasicDirector // if there was an originating speaker, see if we want to hear it if (speaker != null) { - if ((message = filter(message, speaker, false)) == null) { + if ((msg.message = filter(msg.message, speaker, false)) == null) { return; } @@ -675,11 +676,8 @@ public class ChatDirector extends BasicDirector } } - // initialize the client-specific fields of the message - msg.setClientInfo(xlate(msg.bundle, message), localtype); - // and send it off! - dispatchMessage(msg); + dispatchMessage(msg, localtype); // if we auto-responded, report as much if (autoResponse != null) { @@ -737,6 +735,15 @@ public class ChatDirector extends BasicDirector _cservice = null; } + /** + * Dispatch a message to chat displays once it is fully prepared with the clientinfo. + */ + protected void dispatchPreparedMessage (ChatMessage message) + { + _displayMessageOp.setMessage(message); + _displays.apply(_displayMessageOp); + } + /** * Called to determine whether we are permitted to post the supplied chat message. Derived * classes may wish to throttle chat or restrict certain types in certain circumstances for @@ -996,10 +1003,8 @@ public class ChatDirector extends BasicDirector if (bundle == null) { bundle = _bundle; } - SystemMessage msg = new SystemMessage(); - msg.attentionLevel = attLevel; - msg.setClientInfo(xlate(bundle, message), localtype); - dispatchMessage(msg); + SystemMessage msg = new SystemMessage(message, bundle, attLevel); + dispatchMessage(msg, localtype); } /** diff --git a/src/java/com/threerings/crowd/chat/data/TellFeedbackMessage.java b/src/java/com/threerings/crowd/chat/data/TellFeedbackMessage.java index 014bd4d96..fa4e8e613 100644 --- a/src/java/com/threerings/crowd/chat/data/TellFeedbackMessage.java +++ b/src/java/com/threerings/crowd/chat/data/TellFeedbackMessage.java @@ -34,7 +34,6 @@ public class TellFeedbackMessage extends UserMessage public TellFeedbackMessage (Name target, String message, boolean failure) { super(target, null, message, ChatCodes.DEFAULT_MODE); - setClientInfo(message, ChatCodes.PLACE_CHAT_TYPE); _failure = failure; }