Brand the fork as Hellion Chat with independent plugin state
Switch the assembly name to HellionChat so Dalamud uses pluginConfigs/HellionChat for our config file and database directory, instead of sharing those locations with the upstream Chat 2 plugin. Code namespace stays ChatTwo.* so upstream cherry-picks apply cleanly. Rename the DalamudPackager manifest to HellionChat.yaml with fork-specific name, author, repo URL, description, tags and changelog. Plugin.PluginName becomes "Hellion Chat". Add a one-shot migration in the plugin constructor that runs before GetPluginConfig: if pluginConfigs/ChatTwo.json or the ChatTwo/ directory exist and our equivalents don't, move them into the HellionChat layout. Idempotent: only fires on the first load where legacy paths are present and ours are not.
This commit is contained in:
@@ -2,6 +2,13 @@
|
||||
<PropertyGroup>
|
||||
<Version>1.35.3</Version>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<!-- HellionChat fork: assembly is renamed so Dalamud uses
|
||||
pluginConfigs/HellionChat instead of pluginConfigs/ChatTwo,
|
||||
keeping our state independent from the upstream plugin.
|
||||
Code namespace stays ChatTwo.* so upstream cherry-picks
|
||||
apply cleanly. -->
|
||||
<AssemblyName>HellionChat</AssemblyName>
|
||||
<RootNamespace>ChatTwo</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -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*
|
||||
|
||||
Executable
+36
@@ -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).
|
||||
+37
-1
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user