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>
|
<PropertyGroup>
|
||||||
<Version>1.35.3</Version>
|
<Version>1.35.3</Version>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<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>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<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
|
// ReSharper disable once ClassNeverInstantiated.Global
|
||||||
public sealed class Plugin : IDalamudPlugin
|
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 IPluginLog Log { get; private set; } = null!;
|
||||||
[PluginService] public static IDalamudPluginInterface Interface { 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();
|
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();
|
Config = Interface.GetPluginConfig() as Configuration ?? new Configuration();
|
||||||
|
|
||||||
#pragma warning disable CS0618 // Type or member is obsolete
|
#pragma warning disable CS0618 // Type or member is obsolete
|
||||||
@@ -241,6 +246,37 @@ public sealed class Plugin : IDalamudPlugin
|
|||||||
ServerCore?.DisposeAsync().AsTask().Wait();
|
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()
|
private void Draw()
|
||||||
{
|
{
|
||||||
ChatLogWindow.BeginFrame();
|
ChatLogWindow.BeginFrame();
|
||||||
|
|||||||
Reference in New Issue
Block a user