diff --git a/ChatTwo/Configuration.cs b/ChatTwo/Configuration.cs index 915f5e1..58102e5 100755 --- a/ChatTwo/Configuration.cs +++ b/ChatTwo/Configuration.cs @@ -34,7 +34,7 @@ public class ConfigKeyBind [Serializable] public class Configuration : IPluginConfiguration { - private const int LatestVersion = 9; + private const int LatestVersion = 10; public int Version { get; set; } = LatestVersion; diff --git a/ChatTwo/Plugin.cs b/ChatTwo/Plugin.cs index 63b101e..7b41a39 100755 --- a/ChatTwo/Plugin.cs +++ b/ChatTwo/Plugin.cs @@ -1,6 +1,7 @@ using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Globalization; +using System.IO; using ChatTwo.Ipc; using ChatTwo.Resources; using ChatTwo.Ui; @@ -107,94 +108,51 @@ public sealed class Plugin : IDalamudPlugin // Drop them on load to guarantee the session-only invariant. Config.Tabs.RemoveAll(t => t.IsTempTab); -#pragma warning disable CS0618 // Type or member is obsolete - // TODO Remove after 01.07.2026 - // Migrate old channel values - if (Config.Version <= 5) + // Hellion Chat v9 → v10 — Settings UX Polish wipes the configuration so + // the new 8-tab layout starts from defaults instead of mapping every + // previous setting to its new position. The chat database lives in a + // separate file and is not touched. A backup of the pre-wipe JSON is + // placed next to the live config as a manual restore safety net. + if (Config.Version < 10) { - foreach (var tab in Config.Tabs) + var configDir = Interface.ConfigDirectory.FullName; + var liveConfigPath = Path.Join(configDir, $"{Interface.InternalName}.json"); + var backupPath = Path.Join(configDir, $"{Interface.InternalName}.json.pre-v10-backup"); + + try { - if (tab.ChatCodes.Count > 0) + if (File.Exists(liveConfigPath)) { - tab.SelectedChannels = tab.ChatCodes.ToDictionary(pair => pair.Key, pair => (pair.Value, pair.Value)); - tab.ChatCodes.Clear(); + File.Copy(liveConfigPath, backupPath, overwrite: true); } - - if (Config.InactivityHideChannels.Count > 0) - { - Config.InactivityHideChannelsV2 = Config.InactivityHideChannels.ToDictionary(pair => pair.Key, pair => (pair.Value, pair.Value)); - Config.InactivityHideChannels.Clear(); - } - - Config.Version = 6; - SaveConfig(); } - } -#pragma warning restore CS0618 // Type or member is obsolete + catch (Exception ex) + { + // Backup failure is non-fatal — the wipe still runs, the user + // just loses the safety net for manual restore. + Plugin.Log.Warning(ex, "[SettingsRefactor] Could not write pre-v10 config backup"); + } - // Hellion Chat v6→v7: seed Privacy-First defaults. - if (Config.Version <= 6) - { - Config.PrivacyFilterEnabled = true; - Config.PrivacyPersistChannels = [..Privacy.PrivacyDefaults.PrivacyFirstWhitelist]; - Config.PrivacyPersistUnknownChannels = false; - // Existing ChatTwo users skip the first-run wizard — the - // migration toast already explains what changed and they - // can reopen the wizard from Settings → Privacy if they - // want to pick a different profile. - Config.FirstRunCompleted = true; - Config.Version = 7; + Config = new Configuration + { + Version = 10, + FirstRunCompleted = true, + }; SaveConfig(); Notification.AddNotification(new Dalamud.Interface.ImGuiNotification.Notification { - Title = HellionStrings.Migration_Notification_Title, - Content = HellionStrings.Migration_Notification_Content, + Title = HellionStrings.SettingsRefactor_Migration_Title, + Content = HellionStrings.SettingsRefactor_Migration_Content, Type = Dalamud.Interface.ImGuiNotification.NotificationType.Info, - InitialDuration = TimeSpan.FromSeconds(15), - }); - } - - // Hellion Chat v7→v8: webinterface removed in 0.2.0. Old config - // entries (WebinterfacePassword, AuthStore, etc.) get dropped on - // the next save because their properties no longer exist on the - // Configuration class. The bump is recorded so the notification - // only fires once. - if (Config.Version <= 7) - { - Config.Version = 8; - SaveConfig(); - - Notification.AddNotification(new Dalamud.Interface.ImGuiNotification.Notification - { - Title = HellionStrings.Migration_Webinterface_Removed_Title, - Content = HellionStrings.Migration_Webinterface_Removed_Content, - Type = Dalamud.Interface.ImGuiNotification.NotificationType.Info, - InitialDuration = TimeSpan.FromSeconds(20), - }); - } - - // Hellion Chat v8→v9: Auto-Tell-Tabs feature seeded with - // property-initializer defaults (enabled, limit 15, history 20, - // section header on). No data migration needed — just bump the - // version and notify the user once so the feature does not - // surprise them. - if (Config.Version <= 8) - { - Config.Version = 9; - SaveConfig(); - - Notification.AddNotification(new Dalamud.Interface.ImGuiNotification.Notification - { - Title = HellionStrings.AutoTellTabs_Migration_Title, - Content = HellionStrings.AutoTellTabs_Migration_Content, - Type = Dalamud.Interface.ImGuiNotification.NotificationType.Info, - InitialDuration = TimeSpan.FromSeconds(20), + InitialDuration = TimeSpan.FromSeconds(25), }); } if (Config.Tabs.Count == 0) + { Config.Tabs.Add(TabsUtil.VanillaGeneral); + } LanguageChanged(Interface.UiLanguage); ImGuiUtil.Initialize(this); diff --git a/ChatTwo/Resources/HellionStrings.Designer.cs b/ChatTwo/Resources/HellionStrings.Designer.cs index b2a7c9e..c416026 100644 --- a/ChatTwo/Resources/HellionStrings.Designer.cs +++ b/ChatTwo/Resources/HellionStrings.Designer.cs @@ -192,4 +192,8 @@ internal class HellionStrings internal static string Privacy_AutoTellTabs_Preload_Name => Get(nameof(Privacy_AutoTellTabs_Preload_Name)); internal static string Privacy_AutoTellTabs_Preload_Description => Get(nameof(Privacy_AutoTellTabs_Preload_Description)); internal static string Privacy_AutoTellTabs_Preload_Hint => Get(nameof(Privacy_AutoTellTabs_Preload_Hint)); + + // Hellion Chat — Settings UX Polish v10 wipe migration + internal static string SettingsRefactor_Migration_Title => Get(nameof(SettingsRefactor_Migration_Title)); + internal static string SettingsRefactor_Migration_Content => Get(nameof(SettingsRefactor_Migration_Content)); } diff --git a/ChatTwo/Resources/HellionStrings.de.resx b/ChatTwo/Resources/HellionStrings.de.resx index c4d2826..396bf54 100644 --- a/ChatTwo/Resources/HellionStrings.de.resx +++ b/ChatTwo/Resources/HellionStrings.de.resx @@ -438,4 +438,12 @@ Greift nur, wenn Auto-Tell-Tabs im Chat-Tab aktiviert sind. + + + + Settings umstrukturiert + + + Hellion Chat 0.5.0 hat die Settings in thematische Tabs umstrukturiert. Deine Chat-Datenbank und dein Nachrichtenverlauf bleiben unverändert. Settings wurden auf Defaults zurückgesetzt. Falls du das Privacy-Profil neu wählen willst, findest du den Reopen-Button im Datenschutz-Tab. Ein Backup der vorherigen Config liegt unter HellionChat.json.pre-v10-backup neben der aktiven Config-Datei. + diff --git a/ChatTwo/Resources/HellionStrings.resx b/ChatTwo/Resources/HellionStrings.resx index 01cb688..918dd1d 100644 --- a/ChatTwo/Resources/HellionStrings.resx +++ b/ChatTwo/Resources/HellionStrings.resx @@ -438,4 +438,12 @@ Only takes effect when auto tell tabs are enabled in the Chat tab. + + + + Settings reorganised + + + Hellion Chat 0.5.0 reorganised the settings into themed tabs. Your chat database and your message history stay untouched. Settings have been reset to defaults; if you want to pick a privacy profile again, the reopen button is in the Privacy tab. A backup of your previous config is at HellionChat.json.pre-v10-backup next to the live config file. +