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.
+