diff --git a/ChatTwo/ChatTwo.csproj b/ChatTwo/ChatTwo.csproj index 5b5fa1e..d2b3ab9 100755 --- a/ChatTwo/ChatTwo.csproj +++ b/ChatTwo/ChatTwo.csproj @@ -2,6 +2,13 @@ 1.35.3 enable + + HellionChat + ChatTwo diff --git a/ChatTwo/ChatTwo.yaml b/ChatTwo/ChatTwo.yaml deleted file mode 100755 index bf3b522..0000000 --- a/ChatTwo/ChatTwo.yaml +++ /dev/null @@ -1,54 +0,0 @@ -name: Chat 2 -author: Infi, Anna -punchline: Electric Boogaloo - ♪ A whole new chat, a new fantastic chat window ♪ -description: |- - Chat 2 is a complete rewrite of the in-game chat window as a plugin. - It supports: - - - Unlimited tabs - - Tabs that always send to a certain channel - - More flexible filtering - - RGB channel colouring - - Completely variable font size - - Sidebar tabs - - Unread counts - - Emotes - - Screenshot mode (obfuscate names) -repo_url: https://github.com/Infiziert90/ChatTwo -accepts_feedback: true -tags: - - Social - - UI - - Chat - - Replacement -changelog: |- - **New Feature Added~** - - A web interface has been added - - *This will not function if your game client is offline or you are logged out of the game* - - **Main Features** - - View in-game chat on any device that has a web browser functionality - - Can send chat messages through the web interface directly into the game itself - - Easily copy & paste messages - - Option for automatic starting the web interface feature - - Log lines render limit for faster loading performance [Default 1000] - - **Security** - - This feature is not intended to be used outside of your local, private network - - Do not forward ports that are described inside the chat2 options panel - - Never share your authentication code under any circumstances - - Multi-box support is not provided, the web interface will track only the first client - - **Additional Features soon to be Added** - - Display errors as small notifications inside the web interface - - **Planned Features** - - Multiple Tabs support - - Browser specific settings - - Stylization support - - **Additional Permissions Note** - - Users that wish to expand this to apps or other platforms are welcome to do so - - *Note: An FAQ will be provided in the chat2 thread on the dalamud discord, linked in the About section* - diff --git a/ChatTwo/HellionChat.yaml b/ChatTwo/HellionChat.yaml new file mode 100755 index 0000000..96b65ab --- /dev/null +++ b/ChatTwo/HellionChat.yaml @@ -0,0 +1,36 @@ +name: Hellion Chat +author: JonKazama-Hellion +punchline: GDPR-compliant, Linux-aware fork of Chat 2 +description: |- + Hellion Chat is a privacy-focused, Linux-aware fork of Chat 2. + + Same chat replacement you know from upstream, with extra controls + for what actually gets stored: + + - Channel whitelist for database persistence (GDPR Art. 25) + - Privacy-First defaults: only your own conversations are kept + - Failsafe for unknown ChatTypes (default OFF) + - Independent plugin state (own config + database directory) + + Based on Chat 2 by Infi and Anna, licensed under EUPL-1.2. +repo_url: https://github.com/JonKazama-Hellion/HellionChat +accepts_feedback: true +tags: + - Social + - UI + - Chat + - Replacement + - Privacy +changelog: |- + **Hellion Chat 1.35.3 — Initial fork release** + + - Channel whitelist filter in MessageStore.UpsertMessage + - Configuration version bump 6 → 7 with one-shot Privacy-First seed + - Settings → Privacy tab with grouped channel checkboxes and presets + - Failsafe toggle for unknown ChatTypes + - One-shot migration from ChatTwo plugin layout (config + database + directory move into pluginConfigs/HellionChat) + - Migrate3 idempotency fix: recovers from partial application where + ALTER TABLE ran but user_version was never bumped + + Based on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo). diff --git a/ChatTwo/Plugin.cs b/ChatTwo/Plugin.cs index 742376f..beb7713 100755 --- a/ChatTwo/Plugin.cs +++ b/ChatTwo/Plugin.cs @@ -19,7 +19,7 @@ namespace ChatTwo; // ReSharper disable once ClassNeverInstantiated.Global public sealed class Plugin : IDalamudPlugin { - public const string PluginName = "Chat 2"; + public const string PluginName = "Hellion Chat"; [PluginService] public static IPluginLog Log { get; private set; } = null!; [PluginService] public static IDalamudPluginInterface Interface { get; private set; } = null!; @@ -86,6 +86,11 @@ public sealed class Plugin : IDalamudPlugin { GameStarted = Process.GetCurrentProcess().StartTime.ToUniversalTime(); + // Hellion Chat: take over config + database from upstream ChatTwo + // before Dalamud loads our plugin config. Idempotent: only acts on + // the first start where the legacy paths exist and ours don't. + MigrateFromChatTwoLayout(); + Config = Interface.GetPluginConfig() as Configuration ?? new Configuration(); #pragma warning disable CS0618 // Type or member is obsolete @@ -241,6 +246,37 @@ public sealed class Plugin : IDalamudPlugin ServerCore?.DisposeAsync().AsTask().Wait(); } + private static void MigrateFromChatTwoLayout() + { + try + { + var pluginConfigsDir = Interface.ConfigDirectory.Parent?.FullName; + if (pluginConfigsDir is null) + return; + + var legacyConfigFile = Path.Combine(pluginConfigsDir, "ChatTwo.json"); + var legacyConfigDir = Path.Combine(pluginConfigsDir, "ChatTwo"); + var ourConfigFile = Path.Combine(pluginConfigsDir, "HellionChat.json"); + var ourConfigDir = Interface.ConfigDirectory.FullName; + + if (!File.Exists(ourConfigFile) && File.Exists(legacyConfigFile)) + { + File.Move(legacyConfigFile, ourConfigFile); + Log.Information($"HellionChat: migrated config file {legacyConfigFile} → {ourConfigFile}"); + } + + if (!Directory.Exists(ourConfigDir) && Directory.Exists(legacyConfigDir)) + { + Directory.Move(legacyConfigDir, ourConfigDir); + Log.Information($"HellionChat: migrated config dir {legacyConfigDir} → {ourConfigDir}"); + } + } + catch (Exception e) + { + Log.Error(e, "HellionChat: layout migration failed, continuing with whatever exists"); + } + } + private void Draw() { ChatLogWindow.BeginFrame();