[smuxi/experiments/sync_tail] Engine, Frontend-GNOME*: support to specify amount of messages to be synced via /sync command
- From: Mirco M. M. Bauer <mmmbauer src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [smuxi/experiments/sync_tail] Engine, Frontend-GNOME*: support to specify amount of messages to be synced via /sync command
- Date: Sat, 25 Apr 2015 05:34:55 +0000 (UTC)
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]