[smuxi/experiments/sync_tail] Engine, Frontend-GNOME*: support to specify amount of messages to be synced via /sync command



commit 76b3a32df5cc75e2f0796cd2806e1329c5d3e972
Author: Mirco Bauer <meebey meebey net>
Date:   Sat Apr 25 07:32:29 2015 +0200

    Engine, Frontend-GNOME*: support to specify amount of messages to be synced via /sync command
    
    WIP

 src/Engine/MessageBuffers/MessageBufferBase.cs     |    1 +
 src/Frontend-GNOME-IRC/IrcGroupChatView.cs         |    6 ++--
 src/Frontend-GNOME-IRC/IrcPersonChatView.cs        |    6 ++--
 src/Frontend-GNOME-Twitter/TwitterGroupChatView.cs |    6 ++--
 src/Frontend-GNOME-XMPP/XmppGroupChatView.cs       |    6 ++--
 src/Frontend-GNOME-XMPP/XmppPersonChatView.cs      |    6 ++--
 src/Frontend-GNOME/Entry.cs                        |    5 +++-
 src/Frontend-GNOME/Views/Chats/ChatView.cs         |   23 +++++++++++++++++--
 src/Frontend-GNOME/Views/Chats/GroupChatView.cs    |    6 ++--
 src/Frontend-GNOME/Views/Chats/PersonChatView.cs   |    6 ++--
 src/Frontend-GNOME/Views/Chats/ProtocolChatView.cs |    6 ++--
 11 files changed, 49 insertions(+), 28 deletions(-)
---
diff --git a/src/Engine/MessageBuffers/MessageBufferBase.cs b/src/Engine/MessageBuffers/MessageBufferBase.cs
index 59537ef..ed718b8 100644
--- a/src/Engine/MessageBuffers/MessageBufferBase.cs
+++ b/src/Engine/MessageBuffers/MessageBufferBase.cs
@@ -26,6 +26,7 @@ using Smuxi.Common;
 
 namespace Smuxi.Engine
 {
+    [Serializable]
     public abstract class MessageBufferBase : IMessageBuffer
     {
         protected string Protocol { get; set; }
diff --git a/src/Frontend-GNOME-IRC/IrcGroupChatView.cs b/src/Frontend-GNOME-IRC/IrcGroupChatView.cs
index 0fd631b..cf52b8c 100644
--- a/src/Frontend-GNOME-IRC/IrcGroupChatView.cs
+++ b/src/Frontend-GNOME-IRC/IrcGroupChatView.cs
@@ -58,11 +58,11 @@ namespace Smuxi.Frontend.Gnome
             }
         }
 
-        public override void Sync()
+        public override void Sync(int msgCount)
         {
-            Trace.Call();
+            Trace.Call(msgCount);
 
-            base.Sync();
+            base.Sync(msgCount);
 
             IrcProtocolManager = (IrcProtocolManager) ProtocolManager;
         }
diff --git a/src/Frontend-GNOME-IRC/IrcPersonChatView.cs b/src/Frontend-GNOME-IRC/IrcPersonChatView.cs
index 7413d85..a405c6a 100644
--- a/src/Frontend-GNOME-IRC/IrcPersonChatView.cs
+++ b/src/Frontend-GNOME-IRC/IrcPersonChatView.cs
@@ -42,11 +42,11 @@ namespace Smuxi.Frontend.Gnome
             OutputMessageTextView.PopulatePopup += OnOutputMessageTextViewPopulatePopup;
         }
 
-        public override void Sync()
+        public override void Sync(int msgCount)
         {
-            Trace.Call();
+            Trace.Call(msgCount);
 
-            base.Sync();
+            base.Sync(msgCount);
 
             IrcProtocolManager = (IrcProtocolManager) ProtocolManager;
         }
diff --git a/src/Frontend-GNOME-Twitter/TwitterGroupChatView.cs 
b/src/Frontend-GNOME-Twitter/TwitterGroupChatView.cs
index 67e81d8..a22ca6a 100644
--- a/src/Frontend-GNOME-Twitter/TwitterGroupChatView.cs
+++ b/src/Frontend-GNOME-Twitter/TwitterGroupChatView.cs
@@ -183,11 +183,11 @@ namespace Smuxi.Frontend.Gnome
             }
         }
 
-        public override void Sync()
+        public override void Sync(int msgCount)
         {
-            Trace.Call();
+            Trace.Call(msgCount);
 
-            base.Sync();
+            base.Sync(msgCount);
 
             TwitterProtocolManager = (TwitterProtocolManager) ProtocolManager;
         }
diff --git a/src/Frontend-GNOME-XMPP/XmppGroupChatView.cs b/src/Frontend-GNOME-XMPP/XmppGroupChatView.cs
index 0c51e0a..9499cbb 100644
--- a/src/Frontend-GNOME-XMPP/XmppGroupChatView.cs
+++ b/src/Frontend-GNOME-XMPP/XmppGroupChatView.cs
@@ -77,11 +77,11 @@ namespace Smuxi.Frontend.Gnome
             return LibraryCatalog.GetString(msg, _LibraryTextDomain);
         }
 
-        public override void Sync()
+        public override void Sync(int msgCount)
         {
-            Trace.Call();
+            Trace.Call(msgCount);
 
-            base.Sync();
+            base.Sync(msgCount);
 
             XmppProtocolManager = (XmppProtocolManager) ProtocolManager;
         }
diff --git a/src/Frontend-GNOME-XMPP/XmppPersonChatView.cs b/src/Frontend-GNOME-XMPP/XmppPersonChatView.cs
index e03e8c5..880e0b2 100644
--- a/src/Frontend-GNOME-XMPP/XmppPersonChatView.cs
+++ b/src/Frontend-GNOME-XMPP/XmppPersonChatView.cs
@@ -285,11 +285,11 @@ namespace Smuxi.Frontend.Gnome
             base.Dispose();
         }
 
-        public override void Sync()
+        public override void Sync(int msgCount)
         {
-            Trace.Call();
+            Trace.Call(msgCount);
 
-            base.Sync();
+            base.Sync(msgCount);
 
             XmppProtocolManager = (XmppProtocolManager) ProtocolManager;
         }
diff --git a/src/Frontend-GNOME/Entry.cs b/src/Frontend-GNOME/Entry.cs
index 1fdc580..02300e1 100644
--- a/src/Frontend-GNOME/Entry.cs
+++ b/src/Frontend-GNOME/Entry.cs
@@ -688,13 +688,16 @@ namespace Smuxi.Frontend.Gnome
                 return;
             }
 
+            var msgCount = 0;
+            Int32.TryParse(cmd.Parameter, out msgCount);
+
             var chatView = ChatViewManager.CurrentChatView;
             ThreadPool.QueueUserWorkItem(delegate {
                 try {
                     var oldValue = Frontend.UseLowBandwidthMode;
                     // HACK: force a full sync
                     Frontend.UseLowBandwidthMode = false;
-                    chatView.Sync();
+                    chatView.Sync(msgCount);
                     Frontend.UseLowBandwidthMode = oldValue;
 
                     Gtk.Application.Invoke(delegate {
diff --git a/src/Frontend-GNOME/Views/Chats/ChatView.cs b/src/Frontend-GNOME/Views/Chats/ChatView.cs
index 6f7104b..9952754 100644
--- a/src/Frontend-GNOME/Views/Chats/ChatView.cs
+++ b/src/Frontend-GNOME/Views/Chats/ChatView.cs
@@ -500,7 +500,12 @@ namespace Smuxi.Frontend.Gnome
             _IsSynced = false;
         }
         
-        public virtual void Sync()
+        public void Sync()
+        {
+            Sync(0);
+        }
+
+        public virtual void Sync(int msgCount)
         {
             Trace.Call();
 
@@ -528,8 +533,20 @@ namespace Smuxi.Frontend.Gnome
 
             DateTime start, stop;
             start = DateTime.UtcNow;
-            // REMOTING CALL
-            SyncedMessages = _ChatModel.Messages;
+            if (msgCount > 0 && Frontend.EngineVersion >= new Version(0, 8, 9)) {
+                // REMOTING CALL
+                var msgBuffer = _ChatModel.MessageBuffer;
+                // REMOTING CALL
+                var offset = msgBuffer.Count - msgCount;
+                if (offset < 0) {
+                    offset = 0;
+                }
+                // REMOTING CALL
+                SyncedMessages = _ChatModel.MessageBuffer.GetRange(offset, msgCount);
+            } else {
+                // REMOTING CALL
+                SyncedMessages = _ChatModel.Messages;
+            }
             stop = DateTime.UtcNow;
 #if LOG4NET
             _Logger.Debug(
diff --git a/src/Frontend-GNOME/Views/Chats/GroupChatView.cs b/src/Frontend-GNOME/Views/Chats/GroupChatView.cs
index 1439168..755202f 100644
--- a/src/Frontend-GNOME/Views/Chats/GroupChatView.cs
+++ b/src/Frontend-GNOME/Views/Chats/GroupChatView.cs
@@ -281,9 +281,9 @@ namespace Smuxi.Frontend.Gnome
             OnParticipantsChanged(EventArgs.Empty);
         }
         
-        public override void Sync()
+        public override void Sync(int msgCount)
         {
-            Trace.Call();
+            Trace.Call(msgCount);
 
             GLib.Idle.Add(delegate {
                 TabImage.SetFromStock(Gtk.Stock.Refresh, Gtk.IconSize.Menu);
@@ -306,7 +306,7 @@ namespace Smuxi.Frontend.Gnome
             // REMOTING CALL 2
             SyncedTopic = _GroupChatModel.Topic;
 
-            base.Sync();
+            base.Sync(msgCount);
         }
 
         public override void Populate()
diff --git a/src/Frontend-GNOME/Views/Chats/PersonChatView.cs 
b/src/Frontend-GNOME/Views/Chats/PersonChatView.cs
index 3150007..89f41e1 100644
--- a/src/Frontend-GNOME/Views/Chats/PersonChatView.cs
+++ b/src/Frontend-GNOME/Views/Chats/PersonChatView.cs
@@ -94,9 +94,9 @@ namespace Smuxi.Frontend.Gnome
             }
         }
 
-        public override void Sync()
+        public override void Sync(int msgCount)
         {
-            Trace.Call();
+            Trace.Call(msgCount);
 
             GLib.Idle.Add(delegate {
                 TabImage.SetFromStock(Gtk.Stock.Refresh, Gtk.IconSize.Menu);
@@ -107,7 +107,7 @@ namespace Smuxi.Frontend.Gnome
             // REMOTING CALL 1
             PersonModel = PersonChatModel.Person;
 
-            base.Sync();
+            base.Sync(msgCount);
         }
     }
 }
diff --git a/src/Frontend-GNOME/Views/Chats/ProtocolChatView.cs 
b/src/Frontend-GNOME/Views/Chats/ProtocolChatView.cs
index 32b1fc6..c3d3c8e 100644
--- a/src/Frontend-GNOME/Views/Chats/ProtocolChatView.cs
+++ b/src/Frontend-GNOME/Views/Chats/ProtocolChatView.cs
@@ -135,11 +135,11 @@ namespace Smuxi.Frontend.Gnome
         {
         }
 
-        public override void Sync()
+        public override void Sync(int msgCount)
         {
-            Trace.Call();
+            Trace.Call(msgCount);
 
-            base.Sync();
+            base.Sync(msgCount);
 
             Host = ProtocolManager.Host;
             Port = ProtocolManager.Port;


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