[smuxi: 2/8] Engine-XMPP: refactored CreateMessage to get rid of multiple boolean parameters



commit 14b6c8f6378da9d4a3ed66a4f94eeee32bc99ae5
Author: Oliver Schneider <mail oli-obk de>
Date:   Mon Jul 7 18:43:40 2014 +0200

    Engine-XMPP: refactored CreateMessage to get rid of multiple boolean parameters

 .../Protocols/Xmpp/XmppProtocolManager.cs          |   83 ++++++++++++++++++--
 1 files changed, 75 insertions(+), 8 deletions(-)
---
diff --git a/src/Engine-XMPP/Protocols/Xmpp/XmppProtocolManager.cs 
b/src/Engine-XMPP/Protocols/Xmpp/XmppProtocolManager.cs
index 553fa77..a5f1e25 100644
--- a/src/Engine-XMPP/Protocols/Xmpp/XmppProtocolManager.cs
+++ b/src/Engine-XMPP/Protocols/Xmpp/XmppProtocolManager.cs
@@ -2079,8 +2079,12 @@ namespace Smuxi.Engine
             }
 
             // mark highlights only for received messages
-            bool hilight = person.ID != groupChat.OwnNickname;
-            var message = CreateMessage(person, msg, hilight, false);
+            MessageModel message;
+            if (person.ID == groupChat.OwnNickname) {
+                message = CreateEchoGroupChatMessage(groupChat, msg);
+            } else {
+                message = CreateGroupChatMessage(groupChat, person, msg);
+            }
             Session.AddMessageToChat(groupChat, message);
             OnMessageReceived(
                 new MessageEventArgs(groupChat, message, msg.From, groupChat.ID)
@@ -2129,14 +2133,48 @@ namespace Smuxi.Engine
             if (msg.Nickname != null) {
                 ProcessNickname(GetOrCreateContact(msg.From, msg.Nickname.Value), msg.Nickname);
             }
-            var message = CreateMessage(chat.Person, msg, true, true);
+            var message = CreatePrivateChatMessage(chat.Person, msg);
             AddMessageToChatIfNotFiltered(message, chat, isNew);
             OnMessageReceived(
                 new MessageEventArgs(chat, message, msg.From, null)
             );
         }
 
-        MessageModel CreateMessage(PersonModel person, Message msg, bool mark_hilights, bool force_hilight)
+        MessageModel CreateEchoGroupChatMessage(XmppGroupChatModel groupChat, Message msg)
+        {
+            var builder = CreateMessageBuilder();
+            string msgstring;
+            if (msg.Html != null) {
+                msgstring = msg.Html.ToString();
+            } else {
+                msgstring = msg.Body.Trim();
+            }
+            var self = new PersonModel(
+                groupChat.OwnNickname,
+                groupChat.OwnNickname,
+                NetworkID, Protocol, this);
+            if (msgstring.StartsWith("/me ")) {
+                // leave the " " intact
+                msgstring = msgstring.Substring(3);
+                builder.AppendActionPrefix();
+                builder.AppendIdendityName(self);
+            } else {
+                builder.AppendSenderPrefix(self);
+            }
+
+            if (msg.Html != null) {
+                builder.AppendHtmlMessage(msgstring);
+            } else {
+                builder.AppendMessage(msgstring);
+            }
+
+            if (msg.XDelay != null) {
+                builder.TimeStamp = msg.XDelay.Stamp;
+            }
+            return builder.ToMessage();
+        }
+
+        MessageModel CreateGroupChatMessage(XmppGroupChatModel groupChat, PersonModel person, Message msg)
         {
             var builder = CreateMessageBuilder();
             string msgstring;
@@ -2150,9 +2188,9 @@ namespace Smuxi.Engine
                 // leave the " " intact
                 msgstring = msgstring.Substring(3);
                 builder.AppendActionPrefix();
-                builder.AppendIdendityName(person, force_hilight);
+                builder.AppendIdendityName(person);
             } else {
-                builder.AppendSenderPrefix(person, force_hilight);
+                builder.AppendSenderPrefix(person);
             }
 
             if (msg.Html != null) {
@@ -2160,8 +2198,37 @@ namespace Smuxi.Engine
             } else {
                 builder.AppendMessage(msgstring);
             }
-            if (mark_hilights) {
-                builder.MarkHighlights();
+            builder.MarkHighlights();
+
+            if (msg.XDelay != null) {
+                builder.TimeStamp = msg.XDelay.Stamp;
+            }
+            return builder.ToMessage();
+        }
+
+        MessageModel CreatePrivateChatMessage(PersonModel person, Message msg)
+        {
+            var builder = CreateMessageBuilder();
+            string msgstring;
+            if (msg.Html != null) {
+                msgstring = msg.Html.ToString();
+            } else {
+                msgstring = msg.Body.Trim();
+            }
+
+            if (msgstring.StartsWith("/me ")) {
+                // leave the " " intact
+                msgstring = msgstring.Substring(3);
+                builder.AppendActionPrefix();
+                builder.AppendIdendityName(person, true);
+            } else {
+                builder.AppendSenderPrefix(person, true);
+            }
+
+            if (msg.Html != null) {
+                builder.AppendHtmlMessage(msgstring);
+            } else {
+                builder.AppendMessage(msgstring);
             }
 
             if (msg.XDelay != null) {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]