[smuxi] Engine, Frontend-GNOME: changed default message buffer backend to SQLite (closes: #1039, #1041)



commit 382ec844d97652892184f15887a222e45643139e
Author: Mirco Bauer <meebey meebey net>
Date:   Thu May 21 23:38:07 2015 +0200

    Engine, Frontend-GNOME: changed default message buffer backend to SQLite (closes: #1039, #1041)

 src/Engine/Chats/ChatModel.cs                      |    2 +-
 src/Engine/Config/Config.cs                        |   73 +++++++++++++++++---
 .../Preferences/PreferencesDialog.cs               |   20 +++--
 3 files changed, 77 insertions(+), 18 deletions(-)
---
diff --git a/src/Engine/Chats/ChatModel.cs b/src/Engine/Chats/ChatModel.cs
index 75dab53..b289a71 100644
--- a/src/Engine/Chats/ChatModel.cs
+++ b/src/Engine/Chats/ChatModel.cs
@@ -285,7 +285,6 @@ namespace Smuxi.Engine
                 case MessageBufferPersistencyType.Volatile:
                     MessageBuffer = new ListMessageBuffer();
                     break;
-                case Smuxi.Engine.MessageBufferPersistencyType.Persistent:
                 case Smuxi.Engine.MessageBufferPersistencyType.PersistentDb4o:
                     try {
                         var start = DateTime.UtcNow;
@@ -328,6 +327,7 @@ namespace Smuxi.Engine
                         MessageBuffer.Add(builder.ToMessage());
                     }
                     break;
+                case Smuxi.Engine.MessageBufferPersistencyType.Persistent:
                 case Smuxi.Engine.MessageBufferPersistencyType.PersistentSqlite: {
                     var start = DateTime.UtcNow;
                     MessageBuffer = new SqliteMessageBuffer(
diff --git a/src/Engine/Config/Config.cs b/src/Engine/Config/Config.cs
index 051c806..39cc91b 100644
--- a/src/Engine/Config/Config.cs
+++ b/src/Engine/Config/Config.cs
@@ -1,7 +1,7 @@
 /*
  * Smuxi - Smart MUltipleXed Irc
  *
- * Copyright (c) 2005-2014 Mirco Bauer <meebey meebey net>
+ * Copyright (c) 2005-2015 Mirco Bauer <meebey meebey net>
  *
  * Full GPL License: <http://www.gnu.org/licenses/gpl.txt>
  *
@@ -131,6 +131,9 @@ namespace Smuxi.Engine
                 if (targetType == typeof(string[])) {
                     return (T)(object) GetList(key);
                 }
+                if (targetType == typeof(MessageBufferPersistencyType)) {
+                    return (T) Enum.Parse(typeof(MessageBufferPersistencyType), strValue, true);
+                }
                 // handle empty booleans and integers
                 if (targetType.IsValueType && String.IsNullOrEmpty(strValue)) {
                     return default(T);
@@ -238,7 +241,11 @@ namespace Smuxi.Engine
             Get(prefix+"Port", 7689);
             Get(prefix+"Channel", "TCP");
             Get(prefix+"Formatter", "binary");
-            
+
+            prefix = "Engine/";
+            var oldConfigVersion = Get<string>(prefix+"ConfigVersion", null);
+            Get(prefix+"ConfigVersion", Engine.AssemblyVersion.ToString());
+
             prefix = "Engine/Users/DEFAULT/Interface/";
             Get(prefix+"ShowAdvancedSettings", false);
 
@@ -299,7 +306,8 @@ namespace Smuxi.Engine
             Get(prefix+"LogFilteredMessages", false);
 
             prefix = "Engine/Users/DEFAULT/MessageBuffer/";
-            Get(prefix+"PersistencyType", "Volatile");
+            Get<string>(prefix+"PersistencyType",
+                        MessageBufferPersistencyType.PersistentSqlite.ToString());
             prefix = "Engine/Users/DEFAULT/MessageBuffer/Volatile/";
             Get(prefix+"MaxCapacity", 200);
             prefix = "Engine/Users/DEFAULT/MessageBuffer/Persistent/";
@@ -407,6 +415,14 @@ namespace Smuxi.Engine
             // loading defaults
             LoadAllEntries("Engine/Users/DEFAULT");
                     
+            // are we upgrading from <= 1.0?
+            if (String.IsNullOrEmpty(oldConfigVersion) ||
+                new Version(oldConfigVersion) < new Version(1, 0)) {
+                // change default value to PersistentSqlite
+                SetUserEntry("DEFAULT", "MessageBuffer/PersistencyType",
+                             MessageBufferPersistencyType.PersistentSqlite.ToString());
+            }
+
             prefix = "Engine/Users/";
             string[] users = GetList(prefix+"Users");
             m_Preferences[prefix + "Users"] = users;
@@ -524,7 +540,16 @@ namespace Smuxi.Engine
                 LoadUserEntry(user, "Logging/Enabled", null);
                 LoadUserEntry(user, "Logging/LogFilteredMessages", null);
 
-                LoadUserEntry(user, "MessageBuffer/PersistencyType", null);
+                var persistencyKey = "MessageBuffer/PersistencyType";
+                LoadUserEntry(user, persistencyKey , null);
+                // are we upgrading from < 1.0?
+                if (String.IsNullOrEmpty(oldConfigVersion) ||
+                    new Version(oldConfigVersion) < new Version(1, 0)) {
+                    // migrate all users automatically to SQLite
+                    SetUserEntry(user, persistencyKey,
+                                 MessageBufferPersistencyType.PersistentSqlite.ToString());
+                }
+
                 LoadUserEntry(user, "MessageBuffer/Volatile/MaxCapacity", null);
                 LoadUserEntry(user, "MessageBuffer/Persistent/MaxCapacity", null);
 
@@ -709,22 +734,52 @@ namespace Smuxi.Engine
             }
         }
 
+
+        protected string GetUserKey(string user, string key)
+        {
+            var prefix = "Engine/Users/";
+            var ukey = prefix+user+"/"+key;
+            return ukey;
+        }
+
+        [Obsolete]
+        protected object GetUserEntry(string user, string key, object defaultvalue)
+        {
+            var ukey = GetUserKey(user, key);
+            return Get(ukey, defaultvalue);
+        }
+
+        protected T GetUserEntry<T>(string user, string key, T defaultvalue)
+        {
+            var ukey = GetUserKey(user, key);
+            return Get<T>(ukey, defaultvalue);
+        }
+
+        protected void SetUserEntry(string user, string key, object value)
+        {
+#if CONFIG_DEBUG
+            Trace.Call(user, key, value);
+#endif
+            var ukey = GetUserKey(user, key);
+            m_Preferences[ukey] = value;
+        }
+
         protected void LoadUserEntry(string user, string key, object defaultvalue)
         {
 #if CONFIG_DEBUG
             Trace.Call(user, key, defaultvalue);
 #endif
 
-            string prefix = "Engine/Users/";
-            string ukey = prefix+user+"/"+key;
             object obj;
             if (defaultvalue is string) {
-                obj = Get<string>(ukey, (string) defaultvalue);
+                obj = GetUserEntry<string>(user, key, (string) defaultvalue);
+            } else if (defaultvalue is bool) {
+                obj = GetUserEntry<bool>(user, key, (bool) defaultvalue);
             } else {
-                obj = Get(ukey, defaultvalue);
+                obj = GetUserEntry(user, key, defaultvalue);
             }
             if (obj != null) {
-                m_Preferences[ukey] = obj;
+                SetUserEntry(user, key, obj);
             }
         }
         
diff --git a/src/Frontend-GNOME/Preferences/PreferencesDialog.cs 
b/src/Frontend-GNOME/Preferences/PreferencesDialog.cs
index 52c76ed..15a0406 100644
--- a/src/Frontend-GNOME/Preferences/PreferencesDialog.cs
+++ b/src/Frontend-GNOME/Preferences/PreferencesDialog.cs
@@ -191,7 +191,7 @@ namespace Smuxi.Frontend.Gnome
                 "The Db4o backend has known issues like high memory and CPU " +
                 "usage and can even lead to crashes and thus it is deprecated.\n" +
                 "The SQLite backend has no known performance or stability " +
-                "issues but is still an optional preview feature."
+                "issues and is the recommended setting."
             );
             // glade might initialize it already!
             persistencyTypeComboBox.Clear();
@@ -203,16 +203,20 @@ namespace Smuxi.Frontend.Gnome
                 typeof(MessageBufferPersistencyType), typeof(string)
             );
             // fill ListStore
-            store.AppendValues(MessageBufferPersistencyType.Volatile,
-                               _("Volatile"));
-            store.AppendValues(MessageBufferPersistencyType.Persistent,
-                               _("Persistent (Preview)"));
-            if (Frontend.EngineProtocolVersion >= new Version("0.12")) {
+            if (Frontend.EngineProtocolVersion >= new Version(0, 12)) {
+                store.AppendValues(MessageBufferPersistencyType.PersistentSqlite,
+                                   _("Persistent: SQLite (Recommended)"));
+            }
+            if (Frontend.EngineProtocolVersion >= new Version(0, 8, 9)) {
                 store.AppendValues(MessageBufferPersistencyType.PersistentDb4o,
                                    _("Persistent: Db4o (Deprecated)"));
-                store.AppendValues(MessageBufferPersistencyType.PersistentSqlite,
-                                   _("Persistent: SQLite (Preview)"));
             }
+            if (Frontend.EngineProtocolVersion < new Version(0, 12)) {
+                store.AppendValues(MessageBufferPersistencyType.Persistent,
+                                   _("Persistent (Preview)"));
+            }
+            store.AppendValues(MessageBufferPersistencyType.Volatile,
+                               _("Volatile"));
             persistencyTypeComboBox.Model = store;
             persistencyTypeComboBox.Active = 0;
             if (Frontend.EngineProtocolVersion < new Version("0.8.1")) {


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