[smuxi] Engine: make last seen message and highlight persistent (closes: #1040)
- From: Mirco M. M. Bauer <mmmbauer src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [smuxi] Engine: make last seen message and highlight persistent (closes: #1040)
- Date: Thu, 14 May 2015 09:44:48 +0000 (UTC)
commit bbf751d4142dc9e42c010b60c0c8ea90f0aa1c6d
Author: Mirco Bauer <meebey meebey net>
Date: Thu May 14 07:26:02 2015 +0200
Engine: make last seen message and highlight persistent (closes: #1040)
Since Smuxi supports persistent messages it should also remember which messages
and highlights were already seen, else it always had to show them as new/unseen.
src/Engine/Chats/ChatModel.cs | 24 +++++--
src/Engine/MessageBuffers/IMessageBuffer.cs | 4 +-
src/Engine/MessageBuffers/ListMessageBuffer.cs | 5 +-
src/Engine/MessageBuffers/MessageBufferBase.cs | 4 +-
src/Engine/MessageBuffers/SqliteMessageBuffer.cs | 75 ++++++++++++++++++++++
5 files changed, 103 insertions(+), 9 deletions(-)
---
diff --git a/src/Engine/Chats/ChatModel.cs b/src/Engine/Chats/ChatModel.cs
index e5afbcf..75dab53 100644
--- a/src/Engine/Chats/ChatModel.cs
+++ b/src/Engine/Chats/ChatModel.cs
@@ -1,7 +1,7 @@
/*
* Smuxi - Smart MUltipleXed Irc
*
- * Copyright (c) 2005-2008, 2010-2011 Mirco Bauer <meebey meebey net>
+ * Copyright (c) 2005-2008, 2010-2015 Mirco Bauer <meebey meebey net>
*
* Full GPL License: <http://www.gnu.org/licenses/gpl.txt>
*
@@ -40,14 +40,11 @@ namespace Smuxi.Engine
private IProtocolManager _ProtocolManager;
//private List<MessageModel> _Messages = new List<MessageModel>();
private bool _IsEnabled = true;
- // TODO: make persistent
- private DateTime _LastSeenHighlight;
private string _LogFile;
// TODO: make persistent
public int Position { get; set; }
public IMessageBuffer MessageBuffer { get; private set; }
public int MessagesSyncCount { get; set; }
- public DateTime LastSeenMessage { get; set; }
public string ID {
get {
@@ -130,10 +127,25 @@ namespace Smuxi.Engine
public DateTime LastSeenHighlight {
get {
- return _LastSeenHighlight;
+ if (MessageBuffer == null) {
+ return DateTime.MinValue;
+ }
+ return MessageBuffer.LastSeenHighlight;
+ }
+ set {
+ MessageBuffer.LastSeenHighlight = value;
+ }
+ }
+
+ public DateTime LastSeenMessage {
+ get {
+ if (MessageBuffer == null) {
+ return DateTime.MinValue;
+ }
+ return MessageBuffer.LastSeenMessage;
}
set {
- _LastSeenHighlight = value;
+ MessageBuffer.LastSeenMessage = value;
}
}
diff --git a/src/Engine/MessageBuffers/IMessageBuffer.cs b/src/Engine/MessageBuffers/IMessageBuffer.cs
index fcd1cc9..6147188 100644
--- a/src/Engine/MessageBuffers/IMessageBuffer.cs
+++ b/src/Engine/MessageBuffers/IMessageBuffer.cs
@@ -1,6 +1,6 @@
// Smuxi - Smart MUltipleXed Irc
//
-// Copyright (c) 2010-2011 Mirco Bauer <meebey meebey net>
+// Copyright (c) 2010-2012, 2015 Mirco Bauer <meebey meebey net>
//
// Full GPL License: <http://www.gnu.org/licenses/gpl.txt>
//
@@ -28,5 +28,7 @@ namespace Smuxi.Engine
IList<MessageModel> GetRange(int offset, int limit);
void Flush();
int MaxCapacity { get; set; }
+ DateTime LastSeenMessage { get; set; }
+ DateTime LastSeenHighlight { get; set; }
}
}
diff --git a/src/Engine/MessageBuffers/ListMessageBuffer.cs b/src/Engine/MessageBuffers/ListMessageBuffer.cs
index 511019c..d6958c4 100644
--- a/src/Engine/MessageBuffers/ListMessageBuffer.cs
+++ b/src/Engine/MessageBuffers/ListMessageBuffer.cs
@@ -1,6 +1,6 @@
// Smuxi - Smart MUltipleXed Irc
//
-// Copyright (c) 2010-2011 Mirco Bauer <meebey meebey net>
+// Copyright (c) 2010-2011, 2015 Mirco Bauer <meebey meebey net>
//
// Full GPL License: <http://www.gnu.org/licenses/gpl.txt>
//
@@ -28,6 +28,9 @@ namespace Smuxi.Engine
{
int f_MaxCapacity;
+ public DateTime LastSeenMessage { get; set; }
+ public DateTime LastSeenHighlight { get; set; }
+
public int MaxCapacity {
get {
return f_MaxCapacity;
diff --git a/src/Engine/MessageBuffers/MessageBufferBase.cs b/src/Engine/MessageBuffers/MessageBufferBase.cs
index ed718b8..d2c5e18 100644
--- a/src/Engine/MessageBuffers/MessageBufferBase.cs
+++ b/src/Engine/MessageBuffers/MessageBufferBase.cs
@@ -1,6 +1,6 @@
// Smuxi - Smart MUltipleXed Irc
//
-// Copyright (c) 2011 Mirco Bauer <meebey meebey net>
+// Copyright (c) 2011, 2012, 2014-2015 Mirco Bauer <meebey meebey net>
//
// Full GPL License: <http://www.gnu.org/licenses/gpl.txt>
//
@@ -34,6 +34,8 @@ namespace Smuxi.Engine
protected string ChatID { get; set; }
protected string SessionUsername { get; set; }
public int MaxCapacity { get; set; }
+ public virtual DateTime LastSeenMessage { get; set; }
+ public virtual DateTime LastSeenHighlight { get; set; }
public bool IsReadOnly {
get {
diff --git a/src/Engine/MessageBuffers/SqliteMessageBuffer.cs
b/src/Engine/MessageBuffers/SqliteMessageBuffer.cs
index cdca285..f86db94 100644
--- a/src/Engine/MessageBuffers/SqliteMessageBuffer.cs
+++ b/src/Engine/MessageBuffers/SqliteMessageBuffer.cs
@@ -50,6 +50,72 @@ namespace Smuxi.Engine
}
}
+ public override DateTime LastSeenMessage {
+ get {
+ var connection = Connection;
+ if (connection == null) {
+ return DateTime.MinValue;
+ }
+ using (var cmd = connection.CreateCommand()) {
+ cmd.CommandText = "SELECT Value FROM Properties WHERE Key = 'LastSeenMessage'";
+ var value = cmd.ExecuteScalar();
+ if (value == null) {
+ return DateTime.MinValue;
+ }
+ return DateTime.Parse((string) value).ToUniversalTime();
+ }
+ }
+ set {
+ var connection = Connection;
+ if (connection == null) {
+ return;
+ }
+ using (var cmd = connection.CreateCommand()) {
+ var sql = "INSERT OR REPLACE INTO Properties (Key, Value) " +
+ "VALUES('LastSeenMessage', @timestamp)";
+ cmd.CommandText = sql;
+ var param = cmd.CreateParameter();
+ param.ParameterName = "timestamp";
+ param.Value = value.ToString("u").Replace(" ", "T");
+ cmd.Parameters.Add(param);
+ cmd.ExecuteNonQuery();
+ }
+ }
+ }
+
+ public override DateTime LastSeenHighlight {
+ get {
+ var connection = Connection;
+ if (connection == null) {
+ return DateTime.MinValue;
+ }
+ using (var cmd = connection.CreateCommand()) {
+ cmd.CommandText = "SELECT Value FROM Properties WHERE Key = 'LastSeenHighlight'";
+ var value = cmd.ExecuteScalar();
+ if (value == null) {
+ return DateTime.MinValue;
+ }
+ return DateTime.Parse((string) value).ToUniversalTime();
+ }
+ }
+ set {
+ var connection = Connection;
+ if (connection == null) {
+ return;
+ }
+ using (var cmd = connection.CreateCommand()) {
+ var sql = "INSERT OR REPLACE INTO Properties (Key, Value) " +
+ "VALUES('LastSeenHighlight', @timestamp)";
+ cmd.CommandText = sql;
+ var param = cmd.CreateParameter();
+ param.ParameterName = "timestamp";
+ param.Value = value.ToString("u").Replace(" ", "T");
+ cmd.Parameters.Add(param);
+ cmd.ExecuteNonQuery();
+ }
+ }
+ }
+
public override MessageModel this[int offset] {
get {
return GetRange(offset, 1).First();
@@ -96,6 +162,15 @@ namespace Smuxi.Engine
cmd.ExecuteNonQuery();
}
+ using (var cmd = Connection.CreateCommand()) {
+ var sql = "CREATE TABLE IF NOT EXISTS Properties (" +
+ "Key TEXT PRIMARY KEY," +
+ "Value TEXT" +
+ ")";
+ cmd.CommandText = sql;
+ cmd.ExecuteNonQuery();
+ }
+
MessageCount = Count;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]