feat(settings-refactor): bump configuration version to 10 with wipe migration
This commit is contained in:
@@ -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
@@ -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();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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();
|
|
||||||
}
|
}
|
||||||
}
|
catch (Exception ex)
|
||||||
#pragma warning restore CS0618 // Type or member is obsolete
|
{
|
||||||
|
// 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.
|
Config = new Configuration
|
||||||
if (Config.Version <= 6)
|
{
|
||||||
{
|
Version = 10,
|
||||||
Config.PrivacyFilterEnabled = true;
|
FirstRunCompleted = 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
@@ -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));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user