[smuxi: 156/179] Engine: migrate existing Slack connections in config



commit cc2e2c33e9f687e3af28302a5527a7c7619a04f9
Author: Mirco Bauer <meebey meebey net>
Date:   Sun Jun 4 13:21:16 2017 +0800

    Engine: migrate existing Slack connections in config
    
    Existing IRC connections will be automatically migrated from IrcProtocolManager
    to the new SlackProtocolManager. Slack connections can be easily detected by
    their hostname suffix of .irc.slack.com.

 src/Engine/Config/Config.cs |   10 +++++++-
 src/Engine/Engine.cs        |   46 ++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 53 insertions(+), 3 deletions(-)
---
diff --git a/src/Engine/Config/Config.cs b/src/Engine/Config/Config.cs
index 58b9d52..59a91e6 100644
--- a/src/Engine/Config/Config.cs
+++ b/src/Engine/Config/Config.cs
@@ -1,7 +1,7 @@
 /*
  * Smuxi - Smart MUltipleXed Irc
  *
- * Copyright (c) 2005-2015 Mirco Bauer <meebey meebey net>
+ * Copyright (c) 2005-2015, 2017 Mirco Bauer <meebey meebey net>
  *
  * Full GPL License: <http://www.gnu.org/licenses/gpl.txt>
  *
@@ -51,6 +51,8 @@ namespace Smuxi.Engine
 #endif
         protected bool          m_IsCleanConfig;
         protected Hashtable     m_Preferences = Hashtable.Synchronized(new Hashtable());
+        public Version PreviousVersion { get; private set; }
+        public Version CurrentVersion { get; private set; }
         public event EventHandler<ConfigChangedEventArgs> Changed;
         
         public object this[string key] {
@@ -244,7 +246,11 @@ namespace Smuxi.Engine
 
             prefix = "Engine/";
             var oldConfigVersion = Get<string>(prefix+"ConfigVersion", null);
-            Get(prefix+"ConfigVersion", Engine.AssemblyVersion.ToString());
+            if (!String.IsNullOrEmpty(oldConfigVersion)) {
+                PreviousVersion = new Version(oldConfigVersion);
+            }
+            CurrentVersion = Engine.AssemblyVersion;
+            Get(prefix+"ConfigVersion", CurrentVersion.ToString());
 
             prefix = "Engine/Users/DEFAULT/Interface/";
             Get(prefix+"ShowAdvancedSettings", false);
diff --git a/src/Engine/Engine.cs b/src/Engine/Engine.cs
index d2f4827..21f8063 100644
--- a/src/Engine/Engine.cs
+++ b/src/Engine/Engine.cs
@@ -1,7 +1,7 @@
 /*
  * Smuxi - Smart MUltipleXed Irc
  *
- * Copyright (c) 2005-2016 Mirco Bauer <meebey meebey net>
+ * Copyright (c) 2005-2017 Mirco Bauer <meebey meebey net>
  *
  * Full GPL License: <http://www.gnu.org/licenses/gpl.txt>
  *
@@ -30,6 +30,9 @@ namespace Smuxi.Engine
 {
     public class Engine
     {
+#if LOG4NET
+        private static readonly log4net.ILog f_Logger = 
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+#endif
         private static bool             _IsInitialized;
         private static string           _VersionString;
         private static Config           _Config;
@@ -120,6 +123,47 @@ namespace Smuxi.Engine
 
             _Config = new Config();
             _Config.Load();
+
+            // migration config settins from 1.0 or earlier to 1.1
+            if (_Config.PreviousVersion == null ||
+                _Config.PreviousVersion < new Version(1, 1)) {
+                // migrate all existing IRC connections for Slack to the
+                // SlackProtocolManager
+                var users = (string[]) _Config["Engine/Users/Users"];
+                if (users != null) {
+                    foreach (var user in users) {
+                        var userConfig = new UserConfig(_Config, user);
+                        var serverController = new ServerListController(userConfig);
+                        var servers = serverController.GetServerList();
+                        foreach (var server in servers) {
+                            if (server.Protocol != "IRC") {
+                                continue;
+                            }
+                            if (!server.Hostname.EndsWith(".irc.slack.com")) {
+                                continue;
+                            }
+#if LOG4NET
+                            f_Logger.InfoFormat(
+                                "Migrating Slack server '{0}' of user '{1}' " +
+                                "from IRC to Slack protocol manager",
+                                server,
+                                user
+                            );
+#endif
+                            // this is Slack IRC bridge connection
+                            var migratedServer = new ServerModel(server);
+                            migratedServer.ServerID = null;
+                            migratedServer.Protocol = "Slack";
+                            serverController.AddServer(migratedServer);
+                            // remove old Slack server with IRC as protocol
+                            serverController.RemoveServer(server.Protocol,
+                                                          server.ServerID);
+                        }
+                    }
+                }
+                _Config["Engine/ConfigVersion"] = _Config.CurrentVersion.ToString();
+            }
+
             _Config.Save();
 
             string location = Path.GetDirectoryName(asm.Location);


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