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();