feat(settings-refactor): bump configuration version to 10 with wipe migration

This commit is contained in:
2026-05-02 15:54:35 +02:00
parent d4aa3971c5
commit 14e585ef63
5 changed files with 51 additions and 73 deletions
+1 -1
View File
@@ -34,7 +34,7 @@ public class ConfigKeyBind
[Serializable] [Serializable]
public class Configuration : IPluginConfiguration public class Configuration : IPluginConfiguration
{ {
private const int LatestVersion = 9; private const int LatestVersion = 10;
public int Version { get; set; } = LatestVersion; public int Version { get; set; } = LatestVersion;
+30 -72
View File
@@ -1,6 +1,7 @@
using System.Diagnostics; using System.Diagnostics;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using System.Globalization; using System.Globalization;
using System.IO;
using ChatTwo.Ipc; using ChatTwo.Ipc;
using ChatTwo.Resources; using ChatTwo.Resources;
using ChatTwo.Ui; using ChatTwo.Ui;
@@ -107,94 +108,51 @@ public sealed class Plugin : IDalamudPlugin
// Drop them on load to guarantee the session-only invariant. // Drop them on load to guarantee the session-only invariant.
Config.Tabs.RemoveAll(t => t.IsTempTab); Config.Tabs.RemoveAll(t => t.IsTempTab);
#pragma warning disable CS0618 // Type or member is obsolete // Hellion Chat v9 → v10 — Settings UX Polish wipes the configuration so
// TODO Remove after 01.07.2026 // the new 8-tab layout starts from defaults instead of mapping every
// Migrate old channel values // previous setting to its new position. The chat database lives in a
if (Config.Version <= 5) // 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)); File.Copy(liveConfigPath, backupPath, overwrite: true);
tab.ChatCodes.Clear(); }
}
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");
} }
if (Config.InactivityHideChannels.Count > 0) Config = new Configuration
{ {
Config.InactivityHideChannelsV2 = Config.InactivityHideChannels.ToDictionary(pair => pair.Key, pair => (pair.Value, pair.Value)); Version = 10,
Config.InactivityHideChannels.Clear(); FirstRunCompleted = true,
} };
Config.Version = 6;
SaveConfig();
}
}
#pragma warning restore CS0618 // Type or member is obsolete
// 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;
SaveConfig(); SaveConfig();
Notification.AddNotification(new Dalamud.Interface.ImGuiNotification.Notification Notification.AddNotification(new Dalamud.Interface.ImGuiNotification.Notification
{ {
Title = HellionStrings.Migration_Notification_Title, Title = HellionStrings.SettingsRefactor_Migration_Title,
Content = HellionStrings.Migration_Notification_Content, Content = HellionStrings.SettingsRefactor_Migration_Content,
Type = Dalamud.Interface.ImGuiNotification.NotificationType.Info, Type = Dalamud.Interface.ImGuiNotification.NotificationType.Info,
InitialDuration = TimeSpan.FromSeconds(15), InitialDuration = TimeSpan.FromSeconds(25),
});
}
// 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),
}); });
} }
if (Config.Tabs.Count == 0) if (Config.Tabs.Count == 0)
{
Config.Tabs.Add(TabsUtil.VanillaGeneral); Config.Tabs.Add(TabsUtil.VanillaGeneral);
}
LanguageChanged(Interface.UiLanguage); LanguageChanged(Interface.UiLanguage);
ImGuiUtil.Initialize(this); ImGuiUtil.Initialize(this);
+4
View File
@@ -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_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_Description => Get(nameof(Privacy_AutoTellTabs_Preload_Description));
internal static string Privacy_AutoTellTabs_Preload_Hint => Get(nameof(Privacy_AutoTellTabs_Preload_Hint)); 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));
} }
+8
View File
@@ -438,4 +438,12 @@
<data name="Privacy_AutoTellTabs_Preload_Hint" xml:space="preserve"> <data name="Privacy_AutoTellTabs_Preload_Hint" xml:space="preserve">
<value>Greift nur, wenn Auto-Tell-Tabs im Chat-Tab aktiviert sind.</value> <value>Greift nur, wenn Auto-Tell-Tabs im Chat-Tab aktiviert sind.</value>
</data> </data>
<!-- Hellion Chat — Settings UX Polish v10 Wipe-Migration -->
<data name="SettingsRefactor_Migration_Title" xml:space="preserve">
<value>Settings umstrukturiert</value>
</data>
<data name="SettingsRefactor_Migration_Content" xml:space="preserve">
<value>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.</value>
</data>
</root> </root>
+8
View File
@@ -438,4 +438,12 @@
<data name="Privacy_AutoTellTabs_Preload_Hint" xml:space="preserve"> <data name="Privacy_AutoTellTabs_Preload_Hint" xml:space="preserve">
<value>Only takes effect when auto tell tabs are enabled in the Chat tab.</value> <value>Only takes effect when auto tell tabs are enabled in the Chat tab.</value>
</data> </data>
<!-- Hellion Chat — Settings UX Polish v10 wipe migration -->
<data name="SettingsRefactor_Migration_Title" xml:space="preserve">
<value>Settings reorganised</value>
</data>
<data name="SettingsRefactor_Migration_Content" xml:space="preserve">
<value>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.</value>
</data>
</root> </root>