[smuxi: 156/179] Engine: migrate existing Slack connections in config
- From: Mirco M. M. Bauer <mmmbauer src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [smuxi: 156/179] Engine: migrate existing Slack connections in config
- Date: Sat, 4 Nov 2017 05:50:48 +0000 (UTC)
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]