[smuxi: 7/10] Engine-Campfire: show tweet pastes



commit 41dd2c01837f042f025d2b149dcea40b460ad5a9
Author: Carlos Martín Nieto <cmn dwim me>
Date:   Sat Aug 22 17:12:03 2015 +0200

    Engine-Campfire: show tweet pastes
    
    The server sends a specific type of message when someone pastes a tweet,
    which contains information which we can show instead of 'unkown action'.

 .../Protocols/Campfire/CampfireProtocolManager.cs  |   24 +++++++++++++++-----
 src/Engine-Campfire/Protocols/Campfire/DTO.cs      |    8 ++++++
 2 files changed, 26 insertions(+), 6 deletions(-)
---
diff --git a/src/Engine-Campfire/Protocols/Campfire/CampfireProtocolManager.cs 
b/src/Engine-Campfire/Protocols/Campfire/CampfireProtocolManager.cs
index d2d68ba..f06ee14 100644
--- a/src/Engine-Campfire/Protocols/Campfire/CampfireProtocolManager.cs
+++ b/src/Engine-Campfire/Protocols/Campfire/CampfireProtocolManager.cs
@@ -390,6 +390,11 @@ namespace Smuxi.Engine
             bld.AppendText(action);
         }
 
+        bool AlreadyPosted(PersonModel person, int messageId)
+        {
+            return person == Me && messageId <= LastSentId;
+        }
+
         void ShowMessage(object sender, MessageReceivedEventArgs args)
         {
             var message = args.Message;
@@ -443,6 +448,15 @@ namespace Smuxi.Engine
                 case Campfire.MessageType.UploadMessage:
                     FormatUpload(bld, person, chat, message);
                     break;
+                case Campfire.MessageType.TweetMessage:
+                    if (AlreadyPosted(person, message.Id))
+                        return;
+
+                    var tweet = message.Tweet;
+                    // TRANSLATOR: {0} is the twitter username, {1} the tweet text
+                    FormatEvent(bld, person,
+                        String.Format(_("has pasted a tweet by {0}: {1}"), tweet.Author_Username, 
tweet.Message));
+                    break;
                 case Campfire.MessageType.TextMessage:
                 case Campfire.MessageType.PasteMessage:
                     processed = false;
@@ -457,19 +471,17 @@ namespace Smuxi.Engine
                 return;
             }
 
-            bool mine = person == Me;
-
-            // Don't double-post the messages we've sent
-            if (mine && message.Id <= LastSentId)
+            if (AlreadyPosted(person, message.Id))
                 return;
 
+            bool mine = person == Me;
+
             if (mine)
                 bld.AppendSenderPrefix(Me);
             else
                 bld.AppendNick(person).AppendSpace();
 
-            if (message.Type == Campfire.MessageType.TextMessage ||
-                message.Type == Campfire.MessageType.TweetMessage) {
+            if (message.Type == Campfire.MessageType.TextMessage) {
                 bld.AppendMessage(message.Body);
             } else if (message.Type == Campfire.MessageType.PasteMessage) {
                 bld.AppendText("\n");
diff --git a/src/Engine-Campfire/Protocols/Campfire/DTO.cs b/src/Engine-Campfire/Protocols/Campfire/DTO.cs
index c781b93..60b7f8e 100644
--- a/src/Engine-Campfire/Protocols/Campfire/DTO.cs
+++ b/src/Engine-Campfire/Protocols/Campfire/DTO.cs
@@ -75,6 +75,13 @@ namespace Smuxi.Engine.Campfire
         public string body { get; set; }
     }
 
+    internal class Tweet {
+        public long Id { get; set; }
+        public string Message { get; set; }
+        public string Author_Username { get; set; }
+        public string Author_Avatar_Url { get; set; }
+    }
+
     internal class Message {
         public int Id { get; set; }
         public string Body { get; set; }
@@ -83,6 +90,7 @@ namespace Smuxi.Engine.Campfire
         public DateTimeOffset Created_At { get; set; }
         public MessageType Type { get; set; }
         public bool Starred { get; set; }
+        public Tweet Tweet { get; set; }
     }
 
     internal class Upload {


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