Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 23e0f37dfb | |||
| 96fa05dc9b | |||
| d891ec5e50 | |||
| e219b3e1fe |
@@ -4,7 +4,7 @@
|
|||||||
0.1.0 is our bootstrap release; the underlying Chat 2 base is
|
0.1.0 is our bootstrap release; the underlying Chat 2 base is
|
||||||
called out in the yaml changelog so users can see what it
|
called out in the yaml changelog so users can see what it
|
||||||
derives from. -->
|
derives from. -->
|
||||||
<Version>0.1.1</Version>
|
<Version>0.1.2</Version>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<!-- HellionChat fork: assembly is renamed so Dalamud uses
|
<!-- HellionChat fork: assembly is renamed so Dalamud uses
|
||||||
pluginConfigs/HellionChat instead of pluginConfigs/ChatTwo,
|
pluginConfigs/HellionChat instead of pluginConfigs/ChatTwo,
|
||||||
|
|||||||
@@ -37,6 +37,22 @@ tags:
|
|||||||
- Replacement
|
- Replacement
|
||||||
- Privacy
|
- Privacy
|
||||||
changelog: |-
|
changelog: |-
|
||||||
|
**Hellion Chat 0.1.2 — About tab rebrand, DBViewer polish**
|
||||||
|
|
||||||
|
- About tab now shows Hellion-specific maintainer, license, EU/US/JP
|
||||||
|
disclaimer and SQUARE ENIX disclaimer instead of the inherited
|
||||||
|
Chat 2 contact info; original ChatTwo translator credits stay
|
||||||
|
visible under a clearly labelled upstream tree node
|
||||||
|
- Localization clarified: Hellion-specific German strings are
|
||||||
|
maintained by the fork maintainer, the Crowdin contributor list
|
||||||
|
only covers the inherited upstream strings
|
||||||
|
- Cherry-picked DBViewer UI improvements from upstream Chat 2
|
||||||
|
(auto-scroll-reset on page change, tooltips on date reset,
|
||||||
|
folder export, page arrows, localized export-running messages)
|
||||||
|
- README rewritten in the Hellion project style with a tech-stack
|
||||||
|
table, architecture tree, database column list, install guide,
|
||||||
|
upstream-sync workflow notes and project-status checklist
|
||||||
|
|
||||||
**Hellion Chat 0.1.1 — Packaging and migration fixes**
|
**Hellion Chat 0.1.1 — Packaging and migration fixes**
|
||||||
|
|
||||||
- Plugin icon now ships inside the bundle, so the Hellion logo
|
- Plugin icon now ships inside the bundle, so the Hellion logo
|
||||||
|
|||||||
Generated
+100
@@ -131,6 +131,15 @@ namespace ChatTwo.Resources {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Loading logs ....
|
||||||
|
/// </summary>
|
||||||
|
internal static string ChatExport_Initial {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ChatExport_Initial", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Input is disabled for this tab.
|
/// Looks up a localized string similar to Input is disabled for this tab.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -1454,6 +1463,34 @@ namespace ChatTwo.Resources {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Database migration has failed, a new database will be created.
|
||||||
|
///Your old database can still be recovered, please contact the plugin author for help..
|
||||||
|
/// </summary>
|
||||||
|
internal static string Database_Migration_Error_Desc {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Database_Migration_Error_Desc", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Chat2 Database Migration Error.
|
||||||
|
/// </summary>
|
||||||
|
internal static string Database_Migration_Error_Title {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Database_Migration_Error_Title", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Open date picker.
|
||||||
|
/// </summary>
|
||||||
|
internal static string DatePicker_Tooltip {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("DatePicker_Tooltip", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Fri.
|
/// Looks up a localized string similar to Fri.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -1643,6 +1680,15 @@ namespace ChatTwo.Resources {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Reset date selection..
|
||||||
|
/// </summary>
|
||||||
|
internal static string DbViewer_Date_Reset_Tooltip {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("DbViewer_Date_Reset_Tooltip", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to FromTo:.
|
/// Looks up a localized string similar to FromTo:.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -1733,6 +1779,24 @@ namespace ChatTwo.Resources {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Export the message history to a json file..
|
||||||
|
/// </summary>
|
||||||
|
internal static string Export_Json_Tooltip {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Export_Json_Tooltip", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Export the message history to a text file..
|
||||||
|
/// </summary>
|
||||||
|
internal static string Export_Txt_Tooltip {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Export_Txt_Tooltip", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Chinese (full).
|
/// Looks up a localized string similar to Chinese (full).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -1796,6 +1860,24 @@ namespace ChatTwo.Resources {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Pick a folder location for export..
|
||||||
|
/// </summary>
|
||||||
|
internal static string Folder_Export_Location_Tooltip {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Folder_Export_Location_Tooltip", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Pick an export location.
|
||||||
|
/// </summary>
|
||||||
|
internal static string Folder_Selection_Header {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Folder_Selection_Header", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Source.
|
/// Looks up a localized string similar to Source.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -3713,6 +3795,24 @@ namespace ChatTwo.Resources {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Previous page.
|
||||||
|
/// </summary>
|
||||||
|
internal static string Page_ArrowLeft_Tooltip {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Page_ArrowLeft_Tooltip", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Next page.
|
||||||
|
/// </summary>
|
||||||
|
internal static string Page_ArrowRight_Tooltip {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Page_ArrowRight_Tooltip", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Unable to find ID for this message, please try another one..
|
/// Looks up a localized string similar to Unable to find ID for this message, please try another one..
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
Generated
+34
@@ -1432,4 +1432,38 @@
|
|||||||
<data name="ChannelSelector_Select" xml:space="preserve">
|
<data name="ChannelSelector_Select" xml:space="preserve">
|
||||||
<value>Select all</value>
|
<value>Select all</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Title" xml:space="preserve">
|
||||||
|
<value>Chat2 Database Migration Error</value>
|
||||||
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Desc" xml:space="preserve">
|
||||||
|
<value>Database migration has failed, a new database will be created.
|
||||||
|
Your old database can still be recovered, please contact the plugin author for help.</value>
|
||||||
|
</data>
|
||||||
|
<data name="DbViewer_Date_Reset_Tooltip" xml:space="preserve">
|
||||||
|
<value>Reset date selection.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Export_Location_Tooltip" xml:space="preserve">
|
||||||
|
<value>Pick a folder location for export.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Selection_Header" xml:space="preserve">
|
||||||
|
<value>Pick an export location</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Txt_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a text file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Json_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a json file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowLeft_Tooltip" xml:space="preserve">
|
||||||
|
<value>Previous page</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowRight_Tooltip" xml:space="preserve">
|
||||||
|
<value>Next page</value>
|
||||||
|
</data>
|
||||||
|
<data name="DatePicker_Tooltip" xml:space="preserve">
|
||||||
|
<value>Open date picker</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChatExport_Initial" xml:space="preserve">
|
||||||
|
<value>Loading logs ...</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
Generated
+34
@@ -1435,4 +1435,38 @@ Nachdem du 'Aktiviert' angeklickt und auf 'Start' gedrückt hast, wird die einge
|
|||||||
<data name="ChannelSelector_Select" xml:space="preserve">
|
<data name="ChannelSelector_Select" xml:space="preserve">
|
||||||
<value>Select all</value>
|
<value>Select all</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Title" xml:space="preserve">
|
||||||
|
<value>Chat2 Database Migration Error</value>
|
||||||
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Desc" xml:space="preserve">
|
||||||
|
<value>Database migration has failed, a new database will be created.
|
||||||
|
Your old database can still be recovered, please contact the plugin author for help.</value>
|
||||||
|
</data>
|
||||||
|
<data name="DbViewer_Date_Reset_Tooltip" xml:space="preserve">
|
||||||
|
<value>Reset date selection.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Export_Location_Tooltip" xml:space="preserve">
|
||||||
|
<value>Pick a folder location for export.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Selection_Header" xml:space="preserve">
|
||||||
|
<value>Pick an export location</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Txt_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a text file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Json_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a json file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowLeft_Tooltip" xml:space="preserve">
|
||||||
|
<value>Previous page</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowRight_Tooltip" xml:space="preserve">
|
||||||
|
<value>Next page</value>
|
||||||
|
</data>
|
||||||
|
<data name="DatePicker_Tooltip" xml:space="preserve">
|
||||||
|
<value>Open date picker</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChatExport_Initial" xml:space="preserve">
|
||||||
|
<value>Loading logs ...</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
Generated
+34
@@ -1432,4 +1432,38 @@
|
|||||||
<data name="ChannelSelector_Select" xml:space="preserve">
|
<data name="ChannelSelector_Select" xml:space="preserve">
|
||||||
<value>Select all</value>
|
<value>Select all</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Title" xml:space="preserve">
|
||||||
|
<value>Chat2 Database Migration Error</value>
|
||||||
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Desc" xml:space="preserve">
|
||||||
|
<value>Database migration has failed, a new database will be created.
|
||||||
|
Your old database can still be recovered, please contact the plugin author for help.</value>
|
||||||
|
</data>
|
||||||
|
<data name="DbViewer_Date_Reset_Tooltip" xml:space="preserve">
|
||||||
|
<value>Reset date selection.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Export_Location_Tooltip" xml:space="preserve">
|
||||||
|
<value>Pick a folder location for export.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Selection_Header" xml:space="preserve">
|
||||||
|
<value>Pick an export location</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Txt_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a text file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Json_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a json file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowLeft_Tooltip" xml:space="preserve">
|
||||||
|
<value>Previous page</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowRight_Tooltip" xml:space="preserve">
|
||||||
|
<value>Next page</value>
|
||||||
|
</data>
|
||||||
|
<data name="DatePicker_Tooltip" xml:space="preserve">
|
||||||
|
<value>Open date picker</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChatExport_Initial" xml:space="preserve">
|
||||||
|
<value>Loading logs ...</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
Generated
+34
@@ -1432,4 +1432,38 @@
|
|||||||
<data name="ChannelSelector_Select" xml:space="preserve">
|
<data name="ChannelSelector_Select" xml:space="preserve">
|
||||||
<value>Select all</value>
|
<value>Select all</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Title" xml:space="preserve">
|
||||||
|
<value>Chat2 Database Migration Error</value>
|
||||||
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Desc" xml:space="preserve">
|
||||||
|
<value>Database migration has failed, a new database will be created.
|
||||||
|
Your old database can still be recovered, please contact the plugin author for help.</value>
|
||||||
|
</data>
|
||||||
|
<data name="DbViewer_Date_Reset_Tooltip" xml:space="preserve">
|
||||||
|
<value>Reset date selection.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Export_Location_Tooltip" xml:space="preserve">
|
||||||
|
<value>Pick a folder location for export.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Selection_Header" xml:space="preserve">
|
||||||
|
<value>Pick an export location</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Txt_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a text file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Json_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a json file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowLeft_Tooltip" xml:space="preserve">
|
||||||
|
<value>Previous page</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowRight_Tooltip" xml:space="preserve">
|
||||||
|
<value>Next page</value>
|
||||||
|
</data>
|
||||||
|
<data name="DatePicker_Tooltip" xml:space="preserve">
|
||||||
|
<value>Open date picker</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChatExport_Initial" xml:space="preserve">
|
||||||
|
<value>Loading logs ...</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
Generated
+34
@@ -1432,4 +1432,38 @@
|
|||||||
<data name="ChannelSelector_Select" xml:space="preserve">
|
<data name="ChannelSelector_Select" xml:space="preserve">
|
||||||
<value>Select all</value>
|
<value>Select all</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Title" xml:space="preserve">
|
||||||
|
<value>Chat2 Database Migration Error</value>
|
||||||
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Desc" xml:space="preserve">
|
||||||
|
<value>Database migration has failed, a new database will be created.
|
||||||
|
Your old database can still be recovered, please contact the plugin author for help.</value>
|
||||||
|
</data>
|
||||||
|
<data name="DbViewer_Date_Reset_Tooltip" xml:space="preserve">
|
||||||
|
<value>Reset date selection.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Export_Location_Tooltip" xml:space="preserve">
|
||||||
|
<value>Pick a folder location for export.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Selection_Header" xml:space="preserve">
|
||||||
|
<value>Pick an export location</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Txt_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a text file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Json_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a json file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowLeft_Tooltip" xml:space="preserve">
|
||||||
|
<value>Previous page</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowRight_Tooltip" xml:space="preserve">
|
||||||
|
<value>Next page</value>
|
||||||
|
</data>
|
||||||
|
<data name="DatePicker_Tooltip" xml:space="preserve">
|
||||||
|
<value>Open date picker</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChatExport_Initial" xml:space="preserve">
|
||||||
|
<value>Loading logs ...</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
Generated
+34
@@ -1432,4 +1432,38 @@
|
|||||||
<data name="ChannelSelector_Select" xml:space="preserve">
|
<data name="ChannelSelector_Select" xml:space="preserve">
|
||||||
<value>Select all</value>
|
<value>Select all</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Title" xml:space="preserve">
|
||||||
|
<value>Chat2 Database Migration Error</value>
|
||||||
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Desc" xml:space="preserve">
|
||||||
|
<value>Database migration has failed, a new database will be created.
|
||||||
|
Your old database can still be recovered, please contact the plugin author for help.</value>
|
||||||
|
</data>
|
||||||
|
<data name="DbViewer_Date_Reset_Tooltip" xml:space="preserve">
|
||||||
|
<value>Reset date selection.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Export_Location_Tooltip" xml:space="preserve">
|
||||||
|
<value>Pick a folder location for export.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Selection_Header" xml:space="preserve">
|
||||||
|
<value>Pick an export location</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Txt_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a text file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Json_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a json file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowLeft_Tooltip" xml:space="preserve">
|
||||||
|
<value>Previous page</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowRight_Tooltip" xml:space="preserve">
|
||||||
|
<value>Next page</value>
|
||||||
|
</data>
|
||||||
|
<data name="DatePicker_Tooltip" xml:space="preserve">
|
||||||
|
<value>Open date picker</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChatExport_Initial" xml:space="preserve">
|
||||||
|
<value>Loading logs ...</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
Generated
+34
@@ -1432,4 +1432,38 @@
|
|||||||
<data name="ChannelSelector_Select" xml:space="preserve">
|
<data name="ChannelSelector_Select" xml:space="preserve">
|
||||||
<value>Select all</value>
|
<value>Select all</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Title" xml:space="preserve">
|
||||||
|
<value>Chat2 Database Migration Error</value>
|
||||||
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Desc" xml:space="preserve">
|
||||||
|
<value>Database migration has failed, a new database will be created.
|
||||||
|
Your old database can still be recovered, please contact the plugin author for help.</value>
|
||||||
|
</data>
|
||||||
|
<data name="DbViewer_Date_Reset_Tooltip" xml:space="preserve">
|
||||||
|
<value>Reset date selection.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Export_Location_Tooltip" xml:space="preserve">
|
||||||
|
<value>Pick a folder location for export.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Selection_Header" xml:space="preserve">
|
||||||
|
<value>Pick an export location</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Txt_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a text file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Json_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a json file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowLeft_Tooltip" xml:space="preserve">
|
||||||
|
<value>Previous page</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowRight_Tooltip" xml:space="preserve">
|
||||||
|
<value>Next page</value>
|
||||||
|
</data>
|
||||||
|
<data name="DatePicker_Tooltip" xml:space="preserve">
|
||||||
|
<value>Open date picker</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChatExport_Initial" xml:space="preserve">
|
||||||
|
<value>Loading logs ...</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
Generated
+34
@@ -1432,4 +1432,38 @@
|
|||||||
<data name="ChannelSelector_Select" xml:space="preserve">
|
<data name="ChannelSelector_Select" xml:space="preserve">
|
||||||
<value>Select all</value>
|
<value>Select all</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Title" xml:space="preserve">
|
||||||
|
<value>Chat2 Database Migration Error</value>
|
||||||
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Desc" xml:space="preserve">
|
||||||
|
<value>Database migration has failed, a new database will be created.
|
||||||
|
Your old database can still be recovered, please contact the plugin author for help.</value>
|
||||||
|
</data>
|
||||||
|
<data name="DbViewer_Date_Reset_Tooltip" xml:space="preserve">
|
||||||
|
<value>Reset date selection.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Export_Location_Tooltip" xml:space="preserve">
|
||||||
|
<value>Pick a folder location for export.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Selection_Header" xml:space="preserve">
|
||||||
|
<value>Pick an export location</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Txt_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a text file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Json_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a json file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowLeft_Tooltip" xml:space="preserve">
|
||||||
|
<value>Previous page</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowRight_Tooltip" xml:space="preserve">
|
||||||
|
<value>Next page</value>
|
||||||
|
</data>
|
||||||
|
<data name="DatePicker_Tooltip" xml:space="preserve">
|
||||||
|
<value>Open date picker</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChatExport_Initial" xml:space="preserve">
|
||||||
|
<value>Loading logs ...</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
Generated
+34
@@ -1432,4 +1432,38 @@
|
|||||||
<data name="ChannelSelector_Select" xml:space="preserve">
|
<data name="ChannelSelector_Select" xml:space="preserve">
|
||||||
<value>Select all</value>
|
<value>Select all</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Title" xml:space="preserve">
|
||||||
|
<value>Chat2 Database Migration Error</value>
|
||||||
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Desc" xml:space="preserve">
|
||||||
|
<value>Database migration has failed, a new database will be created.
|
||||||
|
Your old database can still be recovered, please contact the plugin author for help.</value>
|
||||||
|
</data>
|
||||||
|
<data name="DbViewer_Date_Reset_Tooltip" xml:space="preserve">
|
||||||
|
<value>Reset date selection.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Export_Location_Tooltip" xml:space="preserve">
|
||||||
|
<value>Pick a folder location for export.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Selection_Header" xml:space="preserve">
|
||||||
|
<value>Pick an export location</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Txt_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a text file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Json_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a json file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowLeft_Tooltip" xml:space="preserve">
|
||||||
|
<value>Previous page</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowRight_Tooltip" xml:space="preserve">
|
||||||
|
<value>Next page</value>
|
||||||
|
</data>
|
||||||
|
<data name="DatePicker_Tooltip" xml:space="preserve">
|
||||||
|
<value>Open date picker</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChatExport_Initial" xml:space="preserve">
|
||||||
|
<value>Loading logs ...</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -1432,4 +1432,38 @@
|
|||||||
<data name="ChannelSelector_Select" xml:space="preserve">
|
<data name="ChannelSelector_Select" xml:space="preserve">
|
||||||
<value>Select all</value>
|
<value>Select all</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Title" xml:space="preserve">
|
||||||
|
<value>Chat2 Database Migration Error</value>
|
||||||
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Desc" xml:space="preserve">
|
||||||
|
<value>Database migration has failed, a new database will be created.
|
||||||
|
Your old database can still be recovered, please contact the plugin author for help.</value>
|
||||||
|
</data>
|
||||||
|
<data name="DbViewer_Date_Reset_Tooltip" xml:space="preserve">
|
||||||
|
<value>Reset date selection.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Export_Location_Tooltip" xml:space="preserve">
|
||||||
|
<value>Pick a folder location for export.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Selection_Header" xml:space="preserve">
|
||||||
|
<value>Pick an export location</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Txt_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a text file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Json_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a json file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowLeft_Tooltip" xml:space="preserve">
|
||||||
|
<value>Previous page</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowRight_Tooltip" xml:space="preserve">
|
||||||
|
<value>Next page</value>
|
||||||
|
</data>
|
||||||
|
<data name="DatePicker_Tooltip" xml:space="preserve">
|
||||||
|
<value>Open date picker</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChatExport_Initial" xml:space="preserve">
|
||||||
|
<value>Loading logs ...</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
Generated
+34
@@ -1432,4 +1432,38 @@
|
|||||||
<data name="ChannelSelector_Select" xml:space="preserve">
|
<data name="ChannelSelector_Select" xml:space="preserve">
|
||||||
<value>Select all</value>
|
<value>Select all</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Title" xml:space="preserve">
|
||||||
|
<value>Chat2 Database Migration Error</value>
|
||||||
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Desc" xml:space="preserve">
|
||||||
|
<value>Database migration has failed, a new database will be created.
|
||||||
|
Your old database can still be recovered, please contact the plugin author for help.</value>
|
||||||
|
</data>
|
||||||
|
<data name="DbViewer_Date_Reset_Tooltip" xml:space="preserve">
|
||||||
|
<value>Reset date selection.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Export_Location_Tooltip" xml:space="preserve">
|
||||||
|
<value>Pick a folder location for export.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Selection_Header" xml:space="preserve">
|
||||||
|
<value>Pick an export location</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Txt_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a text file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Json_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a json file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowLeft_Tooltip" xml:space="preserve">
|
||||||
|
<value>Previous page</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowRight_Tooltip" xml:space="preserve">
|
||||||
|
<value>Next page</value>
|
||||||
|
</data>
|
||||||
|
<data name="DatePicker_Tooltip" xml:space="preserve">
|
||||||
|
<value>Open date picker</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChatExport_Initial" xml:space="preserve">
|
||||||
|
<value>Loading logs ...</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
Generated
+34
@@ -1432,4 +1432,38 @@
|
|||||||
<data name="ChannelSelector_Select" xml:space="preserve">
|
<data name="ChannelSelector_Select" xml:space="preserve">
|
||||||
<value>Select all</value>
|
<value>Select all</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Title" xml:space="preserve">
|
||||||
|
<value>Chat2 Database Migration Error</value>
|
||||||
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Desc" xml:space="preserve">
|
||||||
|
<value>Database migration has failed, a new database will be created.
|
||||||
|
Your old database can still be recovered, please contact the plugin author for help.</value>
|
||||||
|
</data>
|
||||||
|
<data name="DbViewer_Date_Reset_Tooltip" xml:space="preserve">
|
||||||
|
<value>Reset date selection.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Export_Location_Tooltip" xml:space="preserve">
|
||||||
|
<value>Pick a folder location for export.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Selection_Header" xml:space="preserve">
|
||||||
|
<value>Pick an export location</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Txt_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a text file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Json_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a json file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowLeft_Tooltip" xml:space="preserve">
|
||||||
|
<value>Previous page</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowRight_Tooltip" xml:space="preserve">
|
||||||
|
<value>Next page</value>
|
||||||
|
</data>
|
||||||
|
<data name="DatePicker_Tooltip" xml:space="preserve">
|
||||||
|
<value>Open date picker</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChatExport_Initial" xml:space="preserve">
|
||||||
|
<value>Loading logs ...</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
Generated
+34
@@ -1432,4 +1432,38 @@
|
|||||||
<data name="ChannelSelector_Select" xml:space="preserve">
|
<data name="ChannelSelector_Select" xml:space="preserve">
|
||||||
<value>Select all</value>
|
<value>Select all</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Title" xml:space="preserve">
|
||||||
|
<value>Chat2 Database Migration Error</value>
|
||||||
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Desc" xml:space="preserve">
|
||||||
|
<value>Database migration has failed, a new database will be created.
|
||||||
|
Your old database can still be recovered, please contact the plugin author for help.</value>
|
||||||
|
</data>
|
||||||
|
<data name="DbViewer_Date_Reset_Tooltip" xml:space="preserve">
|
||||||
|
<value>Reset date selection.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Export_Location_Tooltip" xml:space="preserve">
|
||||||
|
<value>Pick a folder location for export.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Selection_Header" xml:space="preserve">
|
||||||
|
<value>Pick an export location</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Txt_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a text file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Json_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a json file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowLeft_Tooltip" xml:space="preserve">
|
||||||
|
<value>Previous page</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowRight_Tooltip" xml:space="preserve">
|
||||||
|
<value>Next page</value>
|
||||||
|
</data>
|
||||||
|
<data name="DatePicker_Tooltip" xml:space="preserve">
|
||||||
|
<value>Open date picker</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChatExport_Initial" xml:space="preserve">
|
||||||
|
<value>Loading logs ...</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
Generated
+34
@@ -1432,4 +1432,38 @@
|
|||||||
<data name="ChannelSelector_Select" xml:space="preserve">
|
<data name="ChannelSelector_Select" xml:space="preserve">
|
||||||
<value>Select all</value>
|
<value>Select all</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Title" xml:space="preserve">
|
||||||
|
<value>Chat2 Database Migration Error</value>
|
||||||
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Desc" xml:space="preserve">
|
||||||
|
<value>Database migration has failed, a new database will be created.
|
||||||
|
Your old database can still be recovered, please contact the plugin author for help.</value>
|
||||||
|
</data>
|
||||||
|
<data name="DbViewer_Date_Reset_Tooltip" xml:space="preserve">
|
||||||
|
<value>Reset date selection.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Export_Location_Tooltip" xml:space="preserve">
|
||||||
|
<value>Pick a folder location for export.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Selection_Header" xml:space="preserve">
|
||||||
|
<value>Pick an export location</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Txt_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a text file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Json_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a json file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowLeft_Tooltip" xml:space="preserve">
|
||||||
|
<value>Previous page</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowRight_Tooltip" xml:space="preserve">
|
||||||
|
<value>Next page</value>
|
||||||
|
</data>
|
||||||
|
<data name="DatePicker_Tooltip" xml:space="preserve">
|
||||||
|
<value>Open date picker</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChatExport_Initial" xml:space="preserve">
|
||||||
|
<value>Loading logs ...</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
Generated
+34
@@ -1433,4 +1433,38 @@
|
|||||||
<data name="ChannelSelector_Select" xml:space="preserve">
|
<data name="ChannelSelector_Select" xml:space="preserve">
|
||||||
<value>Select all</value>
|
<value>Select all</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Title" xml:space="preserve">
|
||||||
|
<value>Chat2 Database Migration Error</value>
|
||||||
|
</data>
|
||||||
|
<data name="Database_Migration_Error_Desc" xml:space="preserve">
|
||||||
|
<value>Database migration has failed, a new database will be created.
|
||||||
|
Your old database can still be recovered, please contact the plugin author for help.</value>
|
||||||
|
</data>
|
||||||
|
<data name="DbViewer_Date_Reset_Tooltip" xml:space="preserve">
|
||||||
|
<value>Reset date selection.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Export_Location_Tooltip" xml:space="preserve">
|
||||||
|
<value>Pick a folder location for export.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder_Selection_Header" xml:space="preserve">
|
||||||
|
<value>Pick an export location</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Txt_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a text file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Export_Json_Tooltip" xml:space="preserve">
|
||||||
|
<value>Export the message history to a json file.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowLeft_Tooltip" xml:space="preserve">
|
||||||
|
<value>Previous page</value>
|
||||||
|
</data>
|
||||||
|
<data name="Page_ArrowRight_Tooltip" xml:space="preserve">
|
||||||
|
<value>Next page</value>
|
||||||
|
</data>
|
||||||
|
<data name="DatePicker_Tooltip" xml:space="preserve">
|
||||||
|
<value>Open date picker</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChatExport_Initial" xml:space="preserve">
|
||||||
|
<value>Loading logs ...</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
+27
-9
@@ -56,6 +56,8 @@ public class DbViewer : Window
|
|||||||
private string InputPath = string.Empty;
|
private string InputPath = string.Empty;
|
||||||
private IActiveNotification Notification = null!;
|
private IActiveNotification Notification = null!;
|
||||||
|
|
||||||
|
private bool NeedsScrollReset;
|
||||||
|
|
||||||
public DbViewer(Plugin plugin) : base("DBViewer###chat2-dbviewer")
|
public DbViewer(Plugin plugin) : base("DBViewer###chat2-dbviewer")
|
||||||
{
|
{
|
||||||
Plugin = plugin;
|
Plugin = plugin;
|
||||||
@@ -104,11 +106,17 @@ public class DbViewer : Window
|
|||||||
var spacing = 3.0f * ImGuiHelpers.GlobalScale;
|
var spacing = 3.0f * ImGuiHelpers.GlobalScale;
|
||||||
DateWidget.DatePickerWithInput("##FromDate", 1, ref MinDateString, ref AfterDate, DateFormat);
|
DateWidget.DatePickerWithInput("##FromDate", 1, ref MinDateString, ref AfterDate, DateFormat);
|
||||||
DateWidget.DatePickerWithInput("##ToDate", 2, ref MaxDateString, ref BeforeDate, DateFormat, true);
|
DateWidget.DatePickerWithInput("##ToDate", 2, ref MaxDateString, ref BeforeDate, DateFormat, true);
|
||||||
|
|
||||||
ImGui.SameLine(0, spacing);
|
ImGui.SameLine(0, spacing);
|
||||||
|
|
||||||
if (ImGuiUtil.IconButton(FontAwesomeIcon.Recycle))
|
if (ImGuiUtil.IconButton(FontAwesomeIcon.Recycle))
|
||||||
DateReset();
|
DateReset();
|
||||||
ImGuiUtil.DrawArrows(ref CurrentPage, 1, totalPages, spacing);
|
|
||||||
|
if (ImGui.IsItemHovered())
|
||||||
|
ImGui.SetTooltip(Language.DbViewer_Date_Reset_Tooltip);
|
||||||
|
|
||||||
ImGui.SameLine(0, spacing);
|
ImGui.SameLine(0, spacing);
|
||||||
|
|
||||||
ChannelSelection();
|
ChannelSelection();
|
||||||
|
|
||||||
var skipText = Language.DbViewer_CharacterOption;
|
var skipText = Language.DbViewer_CharacterOption;
|
||||||
@@ -128,12 +136,12 @@ public class DbViewer : Window
|
|||||||
ImGui.OpenPopup("InputPathDialog");
|
ImGui.OpenPopup("InputPathDialog");
|
||||||
|
|
||||||
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
|
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
|
||||||
ImGui.SetTooltip("Pick a folder location for export.");
|
ImGui.SetTooltip(Language.Folder_Export_Location_Tooltip);
|
||||||
|
|
||||||
using (var innerPopup = ImRaii.Popup("InputPathDialog"))
|
using (var innerPopup = ImRaii.Popup("InputPathDialog"))
|
||||||
{
|
{
|
||||||
if (innerPopup.Success)
|
if (innerPopup.Success)
|
||||||
Plugin.FileDialogManager.OpenFolderDialog("Pick an export location", (b, s) => { if (b) InputPath = s; }, null, true);
|
Plugin.FileDialogManager.OpenFolderDialog(Language.Folder_Selection_Header, (b, s) => { if (b) InputPath = s; }, null, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui.SameLine(0, spacing);
|
ImGui.SameLine(0, spacing);
|
||||||
@@ -145,7 +153,7 @@ public class DbViewer : Window
|
|||||||
new Notification
|
new Notification
|
||||||
{
|
{
|
||||||
Title = "Chat2 Text Export",
|
Title = "Chat2 Text Export",
|
||||||
Content = "Loading logs ...",
|
Content = Language.ChatExport_Initial,
|
||||||
Type = NotificationType.Info,
|
Type = NotificationType.Info,
|
||||||
Minimized = false,
|
Minimized = false,
|
||||||
UserDismissable = false,
|
UserDismissable = false,
|
||||||
@@ -157,7 +165,7 @@ public class DbViewer : Window
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
|
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
|
||||||
ImGui.SetTooltip("Export the message history to a text file.");
|
ImGui.SetTooltip(Language.Export_Txt_Tooltip);
|
||||||
|
|
||||||
ImGui.SameLine(0, spacing);
|
ImGui.SameLine(0, spacing);
|
||||||
using (ImRaii.Disabled(InputPath.Length == 0 || IsExporting))
|
using (ImRaii.Disabled(InputPath.Length == 0 || IsExporting))
|
||||||
@@ -168,7 +176,7 @@ public class DbViewer : Window
|
|||||||
new Notification
|
new Notification
|
||||||
{
|
{
|
||||||
Title = "Chat2 Json Export",
|
Title = "Chat2 Json Export",
|
||||||
Content = "Loading logs ...",
|
Content = Language.ChatExport_Initial,
|
||||||
Type = NotificationType.Info,
|
Type = NotificationType.Info,
|
||||||
Minimized = false,
|
Minimized = false,
|
||||||
UserDismissable = false,
|
UserDismissable = false,
|
||||||
@@ -180,13 +188,15 @@ public class DbViewer : Window
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
|
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
|
||||||
ImGui.SetTooltip("Export the message history to a json file.");
|
ImGui.SetTooltip(Language.Export_Json_Tooltip);
|
||||||
|
|
||||||
var width = 350 * ImGuiHelpers.GlobalScale;
|
var width = 350 * ImGuiHelpers.GlobalScale;
|
||||||
var loadingIndicator = IsProcessing && ProcessingStart < Environment.TickCount64;
|
var loadingIndicator = IsProcessing && ProcessingStart < Environment.TickCount64;
|
||||||
|
|
||||||
ImGui.AlignTextToFramePadding();
|
ImGui.AlignTextToFramePadding();
|
||||||
ImGui.TextUnformatted(string.Format(Language.DbViewer_Page, CurrentPage, totalPages, Count, loadingIndicator ? Language.DbViewer_LoadingIndicator : ""));
|
ImGui.TextUnformatted(string.Format(Language.DbViewer_Page, CurrentPage, totalPages, Count, loadingIndicator ? Language.DbViewer_LoadingIndicator : ""));
|
||||||
|
ImGuiUtil.DrawArrows(ref CurrentPage, 1, totalPages, spacing, tooltipLeft: Language.Page_ArrowLeft_Tooltip, tooltipRight: Language.Page_ArrowRight_Tooltip);
|
||||||
|
|
||||||
ImGui.SameLine(ImGui.GetContentRegionMax().X - width);
|
ImGui.SameLine(ImGui.GetContentRegionMax().X - width);
|
||||||
ImGui.SetNextItemWidth(width);
|
ImGui.SetNextItemWidth(width);
|
||||||
if (ImGui.InputTextWithHint("##searchbar", Language.DbViewer_SearcHint, ref SimpleSearchTerm, 30))
|
if (ImGui.InputTextWithHint("##searchbar", Language.DbViewer_SearcHint, ref SimpleSearchTerm, 30))
|
||||||
@@ -222,6 +232,7 @@ public class DbViewer : Window
|
|||||||
Messages = rangeMessageEnumerator.ToArray();
|
Messages = rangeMessageEnumerator.ToArray();
|
||||||
|
|
||||||
Filtered = Filter(Messages);
|
Filtered = Filter(Messages);
|
||||||
|
NeedsScrollReset = true;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -246,6 +257,12 @@ public class DbViewer : Window
|
|||||||
if (!child.Success)
|
if (!child.Success)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (NeedsScrollReset)
|
||||||
|
{
|
||||||
|
NeedsScrollReset = false;
|
||||||
|
ImGui.SetScrollY(0.0f);
|
||||||
|
}
|
||||||
|
|
||||||
using var table = ImRaii.Table("##messageHistory", 4, ImGuiTableFlags.Borders | ImGuiTableFlags.RowBg | ImGuiTableFlags.Resizable);
|
using var table = ImRaii.Table("##messageHistory", 4, ImGuiTableFlags.Borders | ImGuiTableFlags.RowBg | ImGuiTableFlags.Resizable);
|
||||||
if (!table.Success)
|
if (!table.Success)
|
||||||
return;
|
return;
|
||||||
@@ -281,6 +298,7 @@ public class DbViewer : Window
|
|||||||
private void ChannelSelection()
|
private void ChannelSelection()
|
||||||
{
|
{
|
||||||
const string addTabPopup = "add-channel-popup";
|
const string addTabPopup = "add-channel-popup";
|
||||||
|
var spacing = 3.0f * ImGuiHelpers.GlobalScale;
|
||||||
|
|
||||||
if (ImGui.Button("Channels"))
|
if (ImGui.Button("Channels"))
|
||||||
ImGui.OpenPopup(addTabPopup);
|
ImGui.OpenPopup(addTabPopup);
|
||||||
@@ -306,7 +324,7 @@ public class DbViewer : Window
|
|||||||
if (ImGui.IsItemHovered())
|
if (ImGui.IsItemHovered())
|
||||||
ImGui.SetTooltip("Select all");
|
ImGui.SetTooltip("Select all");
|
||||||
|
|
||||||
ImGui.SameLine();
|
ImGui.SameLine(0, spacing);
|
||||||
|
|
||||||
if (ImGuiComponents.IconButton(FontAwesomeIcon.Times))
|
if (ImGuiComponents.IconButton(FontAwesomeIcon.Times))
|
||||||
{
|
{
|
||||||
@@ -317,7 +335,7 @@ public class DbViewer : Window
|
|||||||
if (ImGui.IsItemHovered())
|
if (ImGui.IsItemHovered())
|
||||||
ImGui.SetTooltip("Unselect all");
|
ImGui.SetTooltip("Unselect all");
|
||||||
|
|
||||||
ImGui.SameLine();
|
ImGui.SameLine(0, spacing);
|
||||||
|
|
||||||
using var headerNode = ImRaii.TreeNode(header);
|
using var headerNode = ImRaii.TreeNode(header);
|
||||||
if (!headerNode.Success)
|
if (!headerNode.Success)
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ internal sealed class About : ISettingsTab
|
|||||||
|
|
||||||
ImGui.TextUnformatted(Language.Options_About_Discord);
|
ImGui.TextUnformatted(Language.Options_About_Discord);
|
||||||
ImGui.SameLine();
|
ImGui.SameLine();
|
||||||
ImGui.TextColored(ImGuiColors.ParsedGold, "@infi");
|
ImGui.TextColored(ImGuiColors.ParsedGold, "@j.j_kazama");
|
||||||
|
|
||||||
ImGui.TextUnformatted(Language.Options_About_Version);
|
ImGui.TextUnformatted(Language.Options_About_Version);
|
||||||
ImGui.SameLine();
|
ImGui.SameLine();
|
||||||
@@ -53,24 +53,54 @@ internal sealed class About : ISettingsTab
|
|||||||
|
|
||||||
ImGuiHelpers.ScaledDummy(10.0f);
|
ImGuiHelpers.ScaledDummy(10.0f);
|
||||||
|
|
||||||
ImGui.TextUnformatted(Language.Options_About_Discord_Thread);
|
|
||||||
ImGui.SameLine();
|
|
||||||
if (ImGuiUtil.IconButton(FontAwesomeIcon.ExternalLinkAlt, "discordThread"))
|
|
||||||
Dalamud.Utility.Util.OpenLink("https://canary.discord.com/channels/581875019861328007/1224865018789761126");
|
|
||||||
|
|
||||||
ImGui.Spacing();
|
|
||||||
|
|
||||||
ImGui.TextUnformatted(Language.Options_About_Github_Issues);
|
ImGui.TextUnformatted(Language.Options_About_Github_Issues);
|
||||||
ImGui.SameLine();
|
ImGui.SameLine();
|
||||||
if (ImGuiUtil.IconButton(FontAwesomeIcon.ExternalLinkAlt, "githubIssues"))
|
if (ImGuiUtil.IconButton(FontAwesomeIcon.ExternalLinkAlt, "githubIssues"))
|
||||||
Dalamud.Utility.Util.OpenLink("https://github.com/Infiziert90/ChatTwo/issues");
|
Dalamud.Utility.Util.OpenLink("https://github.com/JonKazama-Hellion/HellionChat/issues");
|
||||||
|
|
||||||
ImGuiHelpers.ScaledDummy(10.0f);
|
ImGuiHelpers.ScaledDummy(10.0f);
|
||||||
|
|
||||||
ImGui.TextUnformatted(Language.Options_About_CrowdIn);
|
// Hellion-specific maintainer / attribution / license / SE-
|
||||||
|
// disclaimer block. Hand-rolled in English here rather than via
|
||||||
|
// HellionStrings — the legal-ish copy stays close to the EUPL-1.2
|
||||||
|
// wording and the SE disclaimer is the same in every locale.
|
||||||
|
ImGui.TextColored(ImGuiColors.ParsedGold, "Maintainer");
|
||||||
|
ImGui.TextUnformatted("Hellion Chat is maintained by Hellion Online Media (Florian Wathling).");
|
||||||
|
ImGui.TextUnformatted("Website:");
|
||||||
ImGui.SameLine();
|
ImGui.SameLine();
|
||||||
if (ImGuiUtil.IconButton(FontAwesomeIcon.ExternalLinkAlt, "crowdin"))
|
if (ImGuiUtil.IconButton(FontAwesomeIcon.ExternalLinkAlt, "hellionMedia"))
|
||||||
Dalamud.Utility.Util.OpenLink("https://crowdin.com/project/chattwo");
|
Dalamud.Utility.Util.OpenLink("https://hellion-media.de");
|
||||||
|
ImGui.TextUnformatted("For licensing, legal or contact inquiries please reach out via the website above.");
|
||||||
|
|
||||||
|
ImGuiHelpers.ScaledDummy(10.0f);
|
||||||
|
|
||||||
|
ImGui.TextColored(ImGuiColors.ParsedGold, "Built on Chat 2");
|
||||||
|
ImGui.TextUnformatted("Hellion Chat is a fork of Chat 2 by Infi and Anna (ascclemens).");
|
||||||
|
ImGui.TextUnformatted("Every chat replacement feature, the IPC integration, the rendering engine and the storage core come from upstream Chat 2.");
|
||||||
|
ImGui.TextUnformatted("Upstream repository:");
|
||||||
|
ImGui.SameLine();
|
||||||
|
if (ImGuiUtil.IconButton(FontAwesomeIcon.ExternalLinkAlt, "chatTwoUpstream"))
|
||||||
|
Dalamud.Utility.Util.OpenLink("https://github.com/Infiziert90/ChatTwo");
|
||||||
|
|
||||||
|
ImGuiHelpers.ScaledDummy(10.0f);
|
||||||
|
|
||||||
|
ImGui.TextColored(ImGuiColors.ParsedGold, "License");
|
||||||
|
ImGui.TextUnformatted("Hellion Chat and Chat 2 are licensed under the European Union Public License v1.2 (EUPL-1.2).");
|
||||||
|
ImGui.TextUnformatted("© 2023–2026 the Chat 2 authors (Infi, Anna and the upstream contributors).");
|
||||||
|
ImGui.TextUnformatted("© 2026 Hellion Online Media — for the Hellion Chat additions.");
|
||||||
|
|
||||||
|
ImGuiHelpers.ScaledDummy(10.0f);
|
||||||
|
|
||||||
|
ImGui.TextColored(ImGuiColors.DalamudOrange, "FINAL FANTASY XIV disclaimer");
|
||||||
|
ImGui.TextUnformatted("FINAL FANTASY XIV © SQUARE ENIX CO., LTD. All rights reserved.");
|
||||||
|
ImGui.TextUnformatted("Hellion Chat is an unofficial, fan-made plugin and is not affiliated with, endorsed, sponsored or approved by Square Enix.");
|
||||||
|
|
||||||
|
ImGui.Spacing();
|
||||||
|
|
||||||
|
ImGui.TextColored(ImGuiColors.ParsedGold, "Localization");
|
||||||
|
ImGui.TextUnformatted("German translations of Hellion-specific UI strings (HellionStrings.de.resx) are written by the Hellion Online Media maintainer.");
|
||||||
|
ImGui.TextUnformatted("All other locales for Hellion-specific strings are not currently provided.");
|
||||||
|
ImGui.TextUnformatted("The translator list below covers the upstream Chat 2 community translators on Crowdin — their work covers the inherited Chat 2 strings, not the Hellion additions.");
|
||||||
|
|
||||||
ImGui.Spacing();
|
ImGui.Spacing();
|
||||||
|
|
||||||
@@ -79,7 +109,7 @@ internal sealed class About : ISettingsTab
|
|||||||
{
|
{
|
||||||
if (aboutChild)
|
if (aboutChild)
|
||||||
{
|
{
|
||||||
using var treeNode = ImRaii.TreeNode(Language.Options_About_Translators);
|
using var treeNode = ImRaii.TreeNode("Chat 2 community translators (upstream)");
|
||||||
if (treeNode)
|
if (treeNode)
|
||||||
{
|
{
|
||||||
using var translatorChild = ImRaii.Child("translators");
|
using var translatorChild = ImRaii.Child("translators");
|
||||||
|
|||||||
@@ -65,6 +65,9 @@ public static class DateWidget
|
|||||||
ImGui.SameLine(0, 3.0f * ImGuiHelpers.GlobalScale);
|
ImGui.SameLine(0, 3.0f * ImGuiHelpers.GlobalScale);
|
||||||
|
|
||||||
ImGuiUtil.IconButton(FontAwesomeIcon.Calendar, id.ToString());
|
ImGuiUtil.IconButton(FontAwesomeIcon.Calendar, id.ToString());
|
||||||
|
if (ImGui.IsItemHovered())
|
||||||
|
ImGui.SetTooltip(Language.DatePicker_Tooltip);
|
||||||
|
|
||||||
if (DatePicker(label, ref date, closeWhenMouseLeavesIt))
|
if (DatePicker(label, ref date, closeWhenMouseLeavesIt))
|
||||||
dateString = date.ToString(format);
|
dateString = date.ToString(format);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -391,7 +391,7 @@ internal static class ImGuiUtil
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void DrawArrows(ref int selected, int min, int max, float spacing, int id = 0)
|
public static void DrawArrows(ref int selected, int min, int max, float spacing, int id = 0, string? tooltipLeft = null, string? tooltipRight = null)
|
||||||
{
|
{
|
||||||
// Prevents changing values from triggering EndDisable
|
// Prevents changing values from triggering EndDisable
|
||||||
var isMin = selected == min;
|
var isMin = selected == min;
|
||||||
@@ -404,12 +404,19 @@ internal static class ImGuiUtil
|
|||||||
selected--;
|
selected--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tooltipLeft != null && ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
|
||||||
|
ImGui.SetTooltip(tooltipLeft);
|
||||||
|
|
||||||
ImGui.SameLine(0, spacing);
|
ImGui.SameLine(0, spacing);
|
||||||
|
|
||||||
using (ImRaii.Disabled(isMax))
|
using (ImRaii.Disabled(isMax))
|
||||||
{
|
{
|
||||||
if (IconButton(FontAwesomeIcon.ArrowRight, id+1.ToString()))
|
if (IconButton(FontAwesomeIcon.ArrowRight, id+1.ToString()))
|
||||||
selected++;
|
selected++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tooltipRight != null && ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
|
||||||
|
ImGui.SetTooltip(tooltipRight);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void WrappedTextWithColor(Vector4 color, string text)
|
public static void WrappedTextWithColor(Vector4 color, string text)
|
||||||
@@ -544,6 +551,8 @@ internal static class ImGuiUtil
|
|||||||
|
|
||||||
public static void ChannelSelector(string headerText, Dictionary<ChatType, (ChatSource Source, ChatSource Target)> chatCodes)
|
public static void ChannelSelector(string headerText, Dictionary<ChatType, (ChatSource Source, ChatSource Target)> chatCodes)
|
||||||
{
|
{
|
||||||
|
var spacing = 3.0f * ImGuiHelpers.GlobalScale;
|
||||||
|
|
||||||
using var channelNode = ImRaii.TreeNode(headerText);
|
using var channelNode = ImRaii.TreeNode(headerText);
|
||||||
if (!channelNode.Success)
|
if (!channelNode.Success)
|
||||||
return;
|
return;
|
||||||
@@ -561,7 +570,7 @@ internal static class ImGuiUtil
|
|||||||
if (ImGui.IsItemHovered())
|
if (ImGui.IsItemHovered())
|
||||||
ImGui.SetTooltip(Language.ChannelSelector_Select);
|
ImGui.SetTooltip(Language.ChannelSelector_Select);
|
||||||
|
|
||||||
ImGui.SameLine();
|
ImGui.SameLine(0, spacing);
|
||||||
|
|
||||||
if (ImGuiComponents.IconButton(FontAwesomeIcon.Times))
|
if (ImGuiComponents.IconButton(FontAwesomeIcon.Times))
|
||||||
{
|
{
|
||||||
@@ -572,7 +581,7 @@ internal static class ImGuiUtil
|
|||||||
if (ImGui.IsItemHovered())
|
if (ImGui.IsItemHovered())
|
||||||
ImGui.SetTooltip(Language.ChannelSelector_Unselect);
|
ImGui.SetTooltip(Language.ChannelSelector_Unselect);
|
||||||
|
|
||||||
ImGui.SameLine();
|
ImGui.SameLine(0, spacing);
|
||||||
|
|
||||||
using var headerNode = ImRaii.TreeNode(header);
|
using var headerNode = ImRaii.TreeNode(header);
|
||||||
if (!headerNode.Success)
|
if (!headerNode.Success)
|
||||||
|
|||||||
@@ -1,88 +1,150 @@
|
|||||||
# Hellion Chat
|
# Hellion Chat
|
||||||
|
|
||||||
A GDPR-compliant, Linux-aware fork of [Chat 2](https://github.com/Infiziert90/ChatTwo)
|
**Version 0.1.2** — DSGVO-bewusste Erweiterung von [Chat 2](https://github.com/Infiziert90/ChatTwo) für FINAL FANTASY XIV / Dalamud.
|
||||||
for FINAL FANTASY XIV / Dalamud.
|
|
||||||
|
|
||||||
Same chat replacement you know from upstream, with extra controls for what
|
Hellion Chat baut auf Chat 2 auf und ergänzt es um Datenschutz- und Daten-Handling-Kontrollen, die mit den Datenschutz-Regeln in der EU, den USA und Japan im Einklang sind. Alle Chat-2-Funktionen, Befehle und Tastenkürzel funktionieren unverändert. Eigenständiger Plugin-Slot, eigene Konfiguration, eigene Datenbank.
|
||||||
actually gets stored:
|
|
||||||
|
|
||||||
- **Channel whitelist** for database persistence (GDPR Art. 25 — privacy by
|
Privates Repository, EUPL-1.2-lizenziert. Distribution über Custom-Repo während der Bootstrap-Phase.
|
||||||
default). Out-of-the-box only your own conversations are kept: Tells, Party,
|
|
||||||
Free Company, Linkshells, Cross-World Linkshells, Alliance, ExtraChat. Public
|
|
||||||
chat from strangers (Say/Shout/Yell), Novice Network, NPC dialogue, system
|
|
||||||
spam and battle messages stay outside the database unless you opt them in.
|
|
||||||
- **Per-channel retention** with a 24-hour idempotent background sweep. Tells
|
|
||||||
default to 365 days, own-conversation channels to 90, the global default to
|
|
||||||
30. Off until you switch it on — the plugin never deletes history without
|
|
||||||
your explicit consent.
|
|
||||||
- **Retroactive cleanup** with a Ctrl+Shift confirm. Apply the current
|
|
||||||
whitelist to an existing 800-MB+ database, watch it shrink to MBs, all on a
|
|
||||||
background thread.
|
|
||||||
- **Export** to Markdown, JSON or CSV (GDPR Art. 15 right of access). Filter
|
|
||||||
by channel, date range or sender substring; written via Dalamud's file
|
|
||||||
dialog without blocking the UI.
|
|
||||||
- **First-run wizard** with three profiles (Privacy-First / Casual / Full
|
|
||||||
History) that maps to concrete configuration sets. Reopenable from the
|
|
||||||
Privacy tab any time.
|
|
||||||
- **Independent plugin state.** Config and database live under
|
|
||||||
`pluginConfigs/HellionChat/`, completely separate from upstream Chat 2 — you
|
|
||||||
can run both side by side, or migrate from Chat 2 once and keep going.
|
|
||||||
- **Migration recovery.** Heals databases left in a half-applied Migrate3
|
|
||||||
state (columns added, `user_version` never bumped) without needing the
|
|
||||||
backup file upstream creates.
|
|
||||||
- **Localized UI (EN + DE).** All Hellion-specific surfaces follow Dalamud's
|
|
||||||
language override and switch live. Translations live in
|
|
||||||
`Resources/HellionStrings.<lang>.resx`.
|
|
||||||
|
|
||||||
## Status
|
---
|
||||||
|
|
||||||
Bootstrap (v0.1.x). Used in production on a single user's setup. Not (yet)
|
## Tech Stack
|
||||||
submitted to the official Dalamud plugin repository — distributed as a
|
|
||||||
custom-repo / dev-plugin while the architecture stabilises.
|
|
||||||
|
|
||||||
## Install (testers)
|
| Kategorie | Technologie |
|
||||||
|
| --------------- | ---------------------------------------------------- |
|
||||||
|
| Plattform | Dalamud Plugin (API Level 15) |
|
||||||
|
| Sprache | C# 13 / .NET 10 (`net10.0-windows`) |
|
||||||
|
| Build | Dalamud.NET.Sdk 15.0.0, DalamudPackager 15.0.0 |
|
||||||
|
| UI | Dear ImGui (Dalamud-Bindings) |
|
||||||
|
| Datenbank | SQLite (Microsoft.Data.Sqlite, MessagePack-Storage) |
|
||||||
|
| Lokalisierung | ResX (HellionStrings.resx, .de.resx) + Crowdin-Sync |
|
||||||
|
| Schriftart | Exo 2 (SIL Open Font License 1.1, gebündelt) |
|
||||||
|
| Toolchain | dotnet 10 SDK, VS Code mit C# Dev Kit |
|
||||||
|
| Deployment | GitHub Releases + Custom-Repo (`repo.json`) |
|
||||||
|
|
||||||
Hellion Chat is shipped via a Dalamud **custom repository** during the
|
---
|
||||||
bootstrap phase.
|
|
||||||
|
|
||||||
### If you have never used Chat 2
|
## Features
|
||||||
|
|
||||||
1. Open Dalamud settings (`/xlsettings`) → **Experimental**.
|
### Privacy / Compliance
|
||||||
2. Add a new entry under **Custom Plugin Repositories**:
|
|
||||||
|
- **Channel-Whitelist** für die Datenbank-Persistenz mit Privacy-First-Default. Out-of-the-box werden nur eigene Konversationen gespeichert (Tells, Gruppe, FC, Linkshells, Cross-World-Linkshells, Allianz, ExtraChat). Öffentlicher Chat, NPC-Dialoge, System-Spam und Battle-Logs werden auf der Storage-Ebene verworfen.
|
||||||
|
- **Aufbewahrungsdauer pro Kanal** mit täglicher Background-Bereinigung. Tells 365 Tage, eigene Konversations-Kanäle 90 Tage, globaler Default 30 Tage. Standard ist AUS, das Plugin löscht ohne ausdrückliche Zustimmung nichts.
|
||||||
|
- **Retroaktive Säuberung** mit Vorschau und Strg+Umschalt-Bestätigung. Wendet die aktuelle Whitelist auf eine bestehende Datenbank an, läuft im Hintergrund, ruft danach VACUUM auf.
|
||||||
|
- **Export** nach Markdown, JSON oder CSV via Dalamud-Datei-Dialog (DSGVO Art. 15 Auskunftsrecht). Filter nach Kanal, Datums-Bereich oder Sender-Substring.
|
||||||
|
|
||||||
|
### Onboarding
|
||||||
|
|
||||||
|
- **First-Run-Wizard** mit drei Profilen (Privacy-First, Locker, Volle Historie) und DSGVO-Hinweis bei der "Volle Historie"-Option.
|
||||||
|
- **Konfigurations-Migration v6→v7** seedet Privacy-Defaults bei Bestand-Usern und zeigt eine Benachrichtigung beim Ersten Plugin-Start nach Update.
|
||||||
|
- **Layout-Migration aus Chat 2** verschiebt Konfiguration und Datenbank in `pluginConfigs/HellionChat/` ohne Datenverlust. Robust gegen blockierte Dateien (Warnung beim User wenn Chat 2 noch geladen ist).
|
||||||
|
- **Migrate3-Recovery** heilt halb-migrierte Datenbanken aus alten Chat-2-Installationen.
|
||||||
|
|
||||||
|
### Look & Feel
|
||||||
|
|
||||||
|
- **Bilinguale UI** (Englisch + Deutsch) mit Live-Sprachwechsel. Hellion-spezifische Strings in `HellionStrings.<lang>.resx`.
|
||||||
|
- **Hellion-HUD-Theme** mit Cyan-Teal-Akzenten, Slate-Violet-Tabs, Bernstein-Highlights für aktive Zustände.
|
||||||
|
- **Fenster-Deckkraft-Slider** für Kampf-freundliche Transparenz.
|
||||||
|
- **Mitgelieferte Hellion-Schrift** (Exo 2, OFL-1.1) als optionaler Default statt System-Font.
|
||||||
|
- **Hellion-Logo** im Plugin-Bundle und in der Dalamud-Plugin-Liste.
|
||||||
|
|
||||||
|
### Stability
|
||||||
|
|
||||||
|
- BetterTTV-Cache-Crash-Fix (Null-Key-Handling).
|
||||||
|
- Font-Atlas-Build-Fallback bei nicht-installierten System-Fonts.
|
||||||
|
- Defensive Wrapping aller Migrations-Operationen.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Architektur
|
||||||
|
|
||||||
|
```
|
||||||
|
ChatTwo/
|
||||||
|
├── Privacy/
|
||||||
|
│ └── PrivacyDefaults.cs # Whitelist-Sets, Spec-Retention-Tabelle
|
||||||
|
├── Export/
|
||||||
|
│ └── MessageExporter.cs # Markdown / JSON / CSV Serializer
|
||||||
|
├── Resources/
|
||||||
|
│ ├── HellionStrings.resx # Hellion-eigene UI-Strings (EN)
|
||||||
|
│ ├── HellionStrings.de.resx # Deutsche Übersetzung
|
||||||
|
│ ├── HellionStrings.Designer.cs # Hand-maintained Accessor
|
||||||
|
│ ├── HellionFont.ttf # Exo 2 Variable Font
|
||||||
|
│ ├── HellionFont-OFL.txt # OFL-1.1 Lizenztext (mit Font gebundelt)
|
||||||
|
│ └── Language*.resx # Upstream-Lokalisierung (Crowdin)
|
||||||
|
├── Ui/
|
||||||
|
│ ├── FirstRunWizard.cs # Drei-Profile-Onboarding
|
||||||
|
│ ├── HellionStyle.cs # ImGui-Theme-Push (lokal + global)
|
||||||
|
│ └── SettingsTabs/
|
||||||
|
│ └── Privacy.cs # Datenschutz-Tab (Filter, Retention, Cleanup, Export)
|
||||||
|
├── images/
|
||||||
|
│ └── icon.png # Hellion-Logo (256×256)
|
||||||
|
├── DalamudPackager.targets # Override für ImagesPath / HandleImages
|
||||||
|
└── HellionChat.yaml # Plugin-Manifest (DalamudPackager-Source)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Regeln
|
||||||
|
|
||||||
|
- **Code-Namespace bleibt `ChatTwo.*`** — Cherry-Picks von Upstream-Bugfixes bleiben damit konfliktarm.
|
||||||
|
- **AssemblyName ist `HellionChat`** — eigener Slot in `pluginConfigs/`, eigene Datei-Manifest, kein Shared State mit Chat 2.
|
||||||
|
- **Hellion-eigene Strings nur in `HellionStrings.*.resx`** — die Upstream-`Language.*.resx` bleiben unverändert für sauberen Crowdin-Sync.
|
||||||
|
- **Kein Direkt-Eingriff in `Plugin.Interface.UiBuilder.FontAtlas`** außerhalb von `FontManager` — Font-Fallback und Hellion-Font laufen zentral.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Datenbank
|
||||||
|
|
||||||
|
SQLite, Schema von Upstream Chat 2 übernommen (Migration-Stand v3). Hellion-Erweiterungen sind in `Configuration` als Felder, nicht im DB-Schema:
|
||||||
|
|
||||||
|
| Spalte | Typ | Beschreibung |
|
||||||
|
| ---------------- | -------- | --------------------------------------------- |
|
||||||
|
| Id | BLOB | Guid |
|
||||||
|
| Receiver | INTEGER | Empfänger-ContentId |
|
||||||
|
| ContentId | INTEGER | Sender-ContentId |
|
||||||
|
| Date | INTEGER | Unix-Timestamp (ms) |
|
||||||
|
| ChatType | INTEGER | XivChatType / LogKind |
|
||||||
|
| SourceKind | INTEGER | Player / NPC / Server / etc. |
|
||||||
|
| TargetKind | INTEGER | Player / NPC / Server / etc. |
|
||||||
|
| Sender | BLOB | MessagePack `List<Chunk>` |
|
||||||
|
| Content | BLOB | MessagePack `List<Chunk>` |
|
||||||
|
| SenderSource | BLOB | MessagePack `SeString` |
|
||||||
|
| ContentSource | BLOB | MessagePack `SeString` |
|
||||||
|
| ExtraChatChannel | BLOB | Guid |
|
||||||
|
| Deleted | BOOLEAN | Soft-Delete-Marker |
|
||||||
|
|
||||||
|
Pfad: `pluginConfigs/HellionChat/chat-sqlite.db`. WAL-Modus, Synchronous=NORMAL.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Installation (Tester)
|
||||||
|
|
||||||
|
Hellion Chat wird während der Bootstrap-Phase über ein Dalamud-**Custom-Repository** verteilt.
|
||||||
|
|
||||||
|
### Frische Installation (kein Chat 2 vorher)
|
||||||
|
|
||||||
|
1. Dalamud-Settings (`/xlsettings`) → **Experimental** öffnen.
|
||||||
|
2. Neuen Eintrag unter **Custom Plugin Repositories** anlegen:
|
||||||
```
|
```
|
||||||
https://raw.githubusercontent.com/JonKazama-Hellion/HellionChat/main/repo.json
|
https://raw.githubusercontent.com/JonKazama-Hellion/HellionChat/main/repo.json
|
||||||
```
|
```
|
||||||
3. Click **Save**, then back in `/xlplugins` hit **All Plugins** and refresh.
|
3. **Save**, dann in `/xlplugins` → **All Plugins** → Refresh.
|
||||||
4. **Hellion Chat** now appears in the list — install it.
|
4. **Hellion Chat** taucht in der Liste auf — installieren.
|
||||||
|
|
||||||
### If you are migrating from Chat 2 (and want to keep your history)
|
### Migration aus Chat 2 (mit bestehendem Verlauf)
|
||||||
|
|
||||||
The two plugins share `pluginConfigs/ChatTwo/` (database) and
|
Chat 2 und Hellion Chat teilen sich die Datenbank-Datei, bis Hellion Chat sie beim ersten Start in den eigenen Pfad verschiebt. Die Reihenfolge ist wichtig:
|
||||||
`pluginConfigs/ChatTwo.json` (settings). Hellion Chat moves both into
|
|
||||||
`pluginConfigs/HellionChat/` on first start, but only if the upstream
|
|
||||||
plugin isn't holding the database file open. Order matters:
|
|
||||||
|
|
||||||
1. **Disable Chat 2** in `/xlplugins` (don't uninstall, just disable).
|
1. **Chat 2 deaktivieren** in `/xlplugins` (nicht deinstallieren, nur deaktivieren).
|
||||||
2. **Close FFXIV completely** so SQLite releases its file lock — a plain
|
2. **FFXIV komplett schließen**, damit SQLite die Datei-Sperre freigibt. Plugin-Reload allein reicht nicht.
|
||||||
plugin reload is not enough.
|
3. Spiel neu starten.
|
||||||
3. Re-launch the game.
|
4. Custom-Repo wie oben hinzufügen.
|
||||||
4. Add the custom repo URL as in the previous section.
|
5. Hellion Chat installieren. Beim ersten Start wandert die Konfigurations-Datei und das gesamte Datenbank-Verzeichnis in das HellionChat-Layout.
|
||||||
5. Install Hellion Chat. On its first start it migrates the Chat 2 config
|
6. **Verifizieren** unter Einstellungen → Datenschutz → Vorschau aktualisieren, dass die Nachrichten-Anzahl plausibel ist.
|
||||||
file and the entire database directory into the HellionChat layout
|
|
||||||
without losing data.
|
|
||||||
6. Verify in **Settings → Privacy → Apply filter to existing database →
|
|
||||||
Refresh preview** that the message count is what you expect (millions
|
|
||||||
of rows if you used Chat 2 for a while).
|
|
||||||
|
|
||||||
If the message count comes back as zero, the migration was blocked
|
|
||||||
(usually because Chat 2 was still active or the previous game session
|
|
||||||
hadn't fully closed). See the troubleshooting section below.
|
|
||||||
|
|
||||||
### Troubleshooting
|
### Troubleshooting
|
||||||
|
|
||||||
**Hellion Chat shows zero messages but I had Chat 2 history:**
|
**Hellion Chat zeigt 0 Nachrichten, obwohl Chat 2 vorher aktiv war:**
|
||||||
The migration either didn't run or hit a locked file. Close the game,
|
|
||||||
then move the data manually:
|
Migration wurde durch eine gesperrte Datei blockiert. Spiel schließen und manuell verschieben:
|
||||||
|
|
||||||
Linux / XIVLauncher Core:
|
Linux / XIVLauncher Core:
|
||||||
```bash
|
```bash
|
||||||
@@ -93,66 +155,126 @@ mv ~/.xlcore/pluginConfigs/ChatTwo/chat-sqlite.db \
|
|||||||
~/.xlcore/pluginConfigs/HellionChat/
|
~/.xlcore/pluginConfigs/HellionChat/
|
||||||
```
|
```
|
||||||
|
|
||||||
Windows / standard XIVLauncher:
|
Windows / XIVLauncher:
|
||||||
```powershell
|
```powershell
|
||||||
Move-Item "$env:AppData\XIVLauncher\pluginConfigs\ChatTwo\chat-sqlite.db" `
|
Move-Item "$env:AppData\XIVLauncher\pluginConfigs\ChatTwo\chat-sqlite.db" `
|
||||||
"$env:AppData\XIVLauncher\pluginConfigs\HellionChat\chat-sqlite.db" -Force
|
"$env:AppData\XIVLauncher\pluginConfigs\HellionChat\chat-sqlite.db" -Force
|
||||||
```
|
```
|
||||||
|
|
||||||
Then start the game and Hellion Chat — your full history is back.
|
Spiel starten, Hellion Chat aktivieren, Verlauf ist zurück.
|
||||||
|
|
||||||
### Updates
|
### Updates
|
||||||
|
|
||||||
Updates land in the same plugin list once the maintainer pushes a new
|
Updates erscheinen automatisch in der Plugin-Liste, sobald ein neuer `v0.1.x`-Tag mit GitHub-Release publiziert ist. Keine Neu-Installation nötig.
|
||||||
`v0.1.x` tag and re-publishes the GitHub release. No re-installation
|
|
||||||
needed.
|
|
||||||
|
|
||||||
## Why a fork
|
---
|
||||||
|
|
||||||
The upstream maintainer has left filtering-related issues open since 2024
|
## Entwicklung
|
||||||
([#84](https://github.com/Infiziert90/ChatTwo/issues/84),
|
|
||||||
[#173](https://github.com/Infiziert90/ChatTwo/issues/173),
|
|
||||||
[#174](https://github.com/Infiziert90/ChatTwo/issues/174)). The original
|
|
||||||
design treats the database as an unlimited searchable archive of *everything*
|
|
||||||
the chat window sees, which is fine in the US-/JP-shaped privacy mindset but
|
|
||||||
hard to reconcile with EU GDPR data minimization rules when the archive
|
|
||||||
contains messages from third parties.
|
|
||||||
|
|
||||||
Forking under EUPL-1.2 is explicitly permitted, the upstream stays
|
### Voraussetzungen
|
||||||
authoritative for the chat-replacement engine, and we cherry-pick relevant
|
|
||||||
upstream bugfixes from `Infiziert90/ChatTwo` periodically.
|
|
||||||
|
|
||||||
## Build
|
- .NET 10 SDK (`10.0.104+`) und .NET 9 SDK (`9.0.115+` parallel)
|
||||||
|
- Dalamud-Hooks im XIVLauncher-`addon`-Verzeichnis
|
||||||
|
- VS Code mit C# Dev Kit (oder Rider, JetBrains)
|
||||||
|
- Linux: WireGuard-Mount für Test-Spiel-Setup falls Remote-DB
|
||||||
|
|
||||||
|
### Setup
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Linux with XIVLauncher Core
|
git clone --recurse-submodules https://github.com/JonKazama-Hellion/HellionChat.git
|
||||||
|
cd HellionChat
|
||||||
|
git remote add upstream https://github.com/Infiziert90/ChatTwo.git
|
||||||
|
|
||||||
|
# Linux: DALAMUD_HOME exportieren falls Hooks nicht im Standardpfad
|
||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
# adjust DALAMUD_HOME if your hooks live somewhere else
|
|
||||||
set -a; source .env; set +a
|
set -a; source .env; set +a
|
||||||
|
|
||||||
dotnet build ChatTwo/ChatTwo.csproj
|
dotnet build ChatTwo/ChatTwo.csproj
|
||||||
```
|
```
|
||||||
|
|
||||||
The output assembly is `ChatTwo/bin/Debug/HellionChat.dll`. Add the parent
|
Output: `ChatTwo/bin/Debug/HellionChat.dll`. Den Ordner `ChatTwo/bin/Debug` in Dalamud unter Experimental → Dev Plugin Locations eintragen.
|
||||||
directory as a Dev Plugin Location in Dalamud's experimental settings.
|
|
||||||
|
|
||||||
## Branding assets
|
### Build-Konfigurationen
|
||||||
|
|
||||||
`ChatTwo/images/icon.png` is the upstream Chat 2 icon and stays in place
|
| Configuration | Output | Zweck |
|
||||||
until a hand-drawn Hellion logo replaces it. **No AI-generated artwork —
|
| ------------- | ----------------------------------------------------- | -------------------------------- |
|
||||||
ever.**
|
| Debug | `bin/Debug/HellionChat.dll` | Dev-Plugin-Loading |
|
||||||
|
| Release | `bin/Release/HellionChat/latest.zip` + Manifest | Custom-Repo / GitHub Release |
|
||||||
|
|
||||||
## License
|
### Upstream-Sync
|
||||||
|
|
||||||
EUPL-1.2 (same as upstream Chat 2). See `LICENCE`.
|
```bash
|
||||||
|
git fetch upstream
|
||||||
|
git log --oneline HEAD..upstream/main # Welche Commits gibt es?
|
||||||
|
git cherry-pick -x <commit> # Selektiv übernehmen
|
||||||
|
```
|
||||||
|
|
||||||
## Acknowledgments
|
Konflikte in Upstream-Sprach-Ressourcen (`Language.<lang>.resx`) kommen häufig vor weil Crowdin sie regelmäßig anfasst. Pragmatisch mit `git checkout --theirs` auflösen, da wir sie selbst nicht editieren.
|
||||||
|
|
||||||
- **Infi & Anna (ascclemens)** — original Chat 2 engine, filtering, IPC, all
|
---
|
||||||
the heavy lifting before this fork existed.
|
|
||||||
- **Dalamud team** — the plugin framework underneath everything.
|
|
||||||
- **JonKazama-Hellion** — fork maintenance, privacy/retention/export
|
|
||||||
features, German localization.
|
|
||||||
|
|
||||||
## AI assistance disclosure
|
## Distribution
|
||||||
|
|
||||||
See `AI_DISCLOSURE.md`.
|
| Phase | Version | Distribution |
|
||||||
|
| --------------- | ------------- | -------------------------------------------------- |
|
||||||
|
| Bootstrap | v0.1.x | Eigenes Custom-Repo (`repo.json` im Repo-Root) |
|
||||||
|
| Stable | v1.0 | Eigenes Custom-Repo |
|
||||||
|
| Optional | v1.1+ | Submission ans Dalamud-Main-Plugin-Repo (zusätzlich) |
|
||||||
|
|
||||||
|
`repo.json` wird beim Versions-Bump per Hand aus dem generierten `HellionChat.json` plus den GitHub-Release-Download-Links zusammengebaut. Skript-Automatisierung via GitHub Actions ist geplant aber noch nicht eingerichtet.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Projektstatus
|
||||||
|
|
||||||
|
**Version 0.1.2** | Stand: Mai 2026
|
||||||
|
|
||||||
|
Alle Bootstrap-Phasen abgeschlossen:
|
||||||
|
|
||||||
|
- [x] Privacy-Filter (Whitelist + Retention + Cleanup + Export)
|
||||||
|
- [x] First-Run-Wizard mit drei Profilen
|
||||||
|
- [x] Plugin-Identity (eigener Slot, Layout-Migration, Recovery)
|
||||||
|
- [x] Bilinguale UI (EN + DE) mit Live-Sprachwechsel
|
||||||
|
- [x] Hellion-Theme + Hellion-Logo + gebündelter Exo-2-Font
|
||||||
|
- [x] Custom-Repo-Pipeline mit GitHub-Release-Distribution
|
||||||
|
- [x] About-Tab im Hellion-Branding mit License + Disclaimer
|
||||||
|
- [x] AI-Disclosure dokumentiert (Pair-Klassifikation)
|
||||||
|
|
||||||
|
Phase 2 (offen, kein festes Datum):
|
||||||
|
|
||||||
|
- [ ] MySQL/MariaDB-Backend mit Drei-Stufen-Bestätigung
|
||||||
|
- [ ] PostgreSQL-Backend
|
||||||
|
- [ ] Encryption für sensible Channels (AES-256, lokaler Key)
|
||||||
|
- [ ] WireGuard-Network-Detection (optionaler Filter)
|
||||||
|
- [ ] libnotify-Integration (native Linux-Toasts)
|
||||||
|
- [ ] XDG-Compliance (komplex unter Wine)
|
||||||
|
- [ ] Hand-gezeichnetes Hellion-Logo (Platzhalter aus Hellion-Online-Media-Brand-Repo)
|
||||||
|
- [ ] GitHub-Actions für reproduzierbaren Build und automatischen `repo.json`-Sync
|
||||||
|
- [ ] Submission ans Dalamud-Main-Plugin-Repo
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Lizenz
|
||||||
|
|
||||||
|
EUPL-1.2 (gleiche Lizenz wie Upstream Chat 2). Siehe `LICENCE`.
|
||||||
|
|
||||||
|
© 2023–2026 die Chat-2-Autoren (Infi, Anna und die Upstream-Contributors) für die Engine, IPC und Storage-Schicht.
|
||||||
|
© 2026 Hellion Online Media für die Hellion-Chat-Erweiterungen.
|
||||||
|
|
||||||
|
### Acknowledgments
|
||||||
|
|
||||||
|
- **Infi & Anna (ascclemens)** — die Chat-2-Engine, ohne die dieser Fork nicht existieren würde.
|
||||||
|
- **Dalamud-Team** — das Plugin-Framework.
|
||||||
|
- **Chat-2-Crowdin-Community** — Übersetzungen der Upstream-Strings (siehe Settings → Info → "Chat 2 community translators").
|
||||||
|
|
||||||
|
### FFXIV-Disclaimer
|
||||||
|
|
||||||
|
FINAL FANTASY XIV © SQUARE ENIX CO., LTD. Alle Rechte vorbehalten. Hellion Chat ist ein inoffizielles, von Fans erstelltes Plugin und ist weder mit Square Enix verbunden noch von ihnen unterstützt, gesponsert oder genehmigt.
|
||||||
|
|
||||||
|
### KI-Unterstützung
|
||||||
|
|
||||||
|
Siehe [`AI_DISCLOSURE.md`](AI_DISCLOSURE.md) für die Pair-Level-Disclosure.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Hellion Online Media** | Bad Harzburg | [hellion-media.de](https://hellion-media.de)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
"Author": "JonKazama-Hellion",
|
"Author": "JonKazama-Hellion",
|
||||||
"Name": "Hellion Chat",
|
"Name": "Hellion Chat",
|
||||||
"InternalName": "HellionChat",
|
"InternalName": "HellionChat",
|
||||||
"AssemblyVersion": "0.1.1.0",
|
"AssemblyVersion": "0.1.2.0",
|
||||||
"Description": "Hellion Chat is built on top of Chat 2 — every Chat 2 feature, command\nand shortcut you already know works the same. The /chat2 command, tabs,\nchannel filters, RGB colours, emotes, screenshot mode, IPC integration\nand the chat replacement window itself are all unchanged.\n\nOn top of that, Hellion Chat adds privacy and data-handling controls\ndesigned to align with the modern data protection rules that apply\nacross the EU, the United States and Japan. By default only your own\nconversations are stored; messages from strangers, NPCs and system\nspam stay out of the database. Retention windows are configurable per\nchannel, history can be wiped retroactively, and stored data can be\nexported on demand.\n\nKey additions on top of Chat 2:\n\n- Channel whitelist with a Privacy-First default\n- Per-channel retention with a daily background sweep\n- Retroactive cleanup with a Ctrl+Shift confirm\n- Export to Markdown, JSON or CSV\n- First-run wizard with three preset profiles (Privacy-First, Casual,\n Full History)\n- Bilingual UI (English and German) with live language switching\n- Independent plugin state — own config file and database directory,\n so Hellion Chat does not share state with the upstream plugin\n\nBased on Chat 2 by Infi and Anna, licensed under EUPL-1.2.",
|
"Description": "Hellion Chat is built on top of Chat 2 — every Chat 2 feature, command\nand shortcut you already know works the same. The /chat2 command, tabs,\nchannel filters, RGB colours, emotes, screenshot mode, IPC integration\nand the chat replacement window itself are all unchanged.\n\nOn top of that, Hellion Chat adds privacy and data-handling controls\ndesigned to align with the modern data protection rules that apply\nacross the EU, the United States and Japan. By default only your own\nconversations are stored; messages from strangers, NPCs and system\nspam stay out of the database. Retention windows are configurable per\nchannel, history can be wiped retroactively, and stored data can be\nexported on demand.\n\nKey additions on top of Chat 2:\n\n- Channel whitelist with a Privacy-First default\n- Per-channel retention with a daily background sweep\n- Retroactive cleanup with a Ctrl+Shift confirm\n- Export to Markdown, JSON or CSV\n- First-run wizard with three preset profiles (Privacy-First, Casual,\n Full History)\n- Bilingual UI (English and German) with live language switching\n- Independent plugin state — own config file and database directory,\n so Hellion Chat does not share state with the upstream plugin\n\nBased on Chat 2 by Infi and Anna, licensed under EUPL-1.2.",
|
||||||
"ApplicableVersion": "any",
|
"ApplicableVersion": "any",
|
||||||
"RepoUrl": "https://github.com/JonKazama-Hellion/HellionChat",
|
"RepoUrl": "https://github.com/JonKazama-Hellion/HellionChat",
|
||||||
@@ -20,12 +20,12 @@
|
|||||||
"CanUnloadAsync": false,
|
"CanUnloadAsync": false,
|
||||||
"LoadPriority": 0,
|
"LoadPriority": 0,
|
||||||
"Punchline": "Chat 2 with privacy controls aligned to EU, US and JP rules",
|
"Punchline": "Chat 2 with privacy controls aligned to EU, US and JP rules",
|
||||||
"Changelog": "**Hellion Chat 0.1.1 — Packaging and migration fixes**\n\n- Plugin icon now ships inside the bundle, so the Hellion logo\n renders locally in the Dalamud plugin list once installed (the\n previous release relied only on the remote IconUrl)\n- Plugin icon downsampled from 1024×1024 to 256×256 to match the\n rendered size; loads faster and caches better\n- Migration from upstream Chat 2 is more robust: each file move is\n wrapped individually, a locked SQLite database no longer aborts\n the rest of the migration, and a warning notification fires when\n any file is held open (with a hint to disable Chat 2 and restart\n the game)\n- README ships a step-by-step migration guide (fresh install versus\n coming from Chat 2) and a troubleshooting section with manual\n recovery commands for Linux and Windows\n\n**Hellion Chat 0.1.0 — Initial fork release**\n\nPrivacy\n- Channel whitelist filter in MessageStore.UpsertMessage with a\n Privacy-First default (own conversations only)\n- Per-channel retention with a 24-hour idempotent background sweep\n- Retroactive cleanup with a Ctrl+Shift confirm and VACUUM\n- Export to Markdown / JSON / CSV via Dalamud's file dialog\n\nOnboarding\n- First-run wizard with three profiles: Privacy-First / Casual /\n Full History\n- Configuration migration that seeds defaults on update\n- One-shot migration from upstream Chat 2's pluginConfigs layout\n- Migrate3 idempotency recovery for half-migrated databases\n\nLook & feel\n- Localized UI (English and German) with live language switching\n- Industrial HUD theme with cyan-teal action accents, slate-violet\n tabs, amber active highlights and a window-opacity slider\n\nBased on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).",
|
"Changelog": "**Hellion Chat 0.1.2 — About tab rebrand, DBViewer polish**\n\n- About tab now shows Hellion-specific maintainer, license, EU/US/JP\n disclaimer and SQUARE ENIX disclaimer instead of the inherited\n Chat 2 contact info; original ChatTwo translator credits stay\n visible under a clearly labelled upstream tree node\n- Localization clarified: Hellion-specific German strings are\n maintained by the fork maintainer, the Crowdin contributor list\n only covers the inherited upstream strings\n- Cherry-picked DBViewer UI improvements from upstream Chat 2\n (auto-scroll-reset on page change, tooltips on date reset,\n folder export, page arrows, localized export-running messages)\n- README rewritten in the Hellion project style with a tech-stack\n table, architecture tree, database column list, install guide,\n upstream-sync workflow notes and project-status checklist\n\n**Hellion Chat 0.1.1 — Packaging and migration fixes**\n\n- Plugin icon now ships inside the bundle, so the Hellion logo\n renders locally in the Dalamud plugin list once installed (the\n previous release relied only on the remote IconUrl)\n- Plugin icon downsampled from 1024×1024 to 256×256 to match the\n rendered size; loads faster and caches better\n- Migration from upstream Chat 2 is more robust: each file move is\n wrapped individually, a locked SQLite database no longer aborts\n the rest of the migration, and a warning notification fires when\n any file is held open (with a hint to disable Chat 2 and restart\n the game)\n- README ships a step-by-step migration guide (fresh install versus\n coming from Chat 2) and a troubleshooting section with manual\n recovery commands for Linux and Windows\n\n**Hellion Chat 0.1.0 — Initial fork release**\n\nPrivacy\n- Channel whitelist filter in MessageStore.UpsertMessage with a\n Privacy-First default (own conversations only)\n- Per-channel retention with a 24-hour idempotent background sweep\n- Retroactive cleanup with a Ctrl+Shift confirm and VACUUM\n- Export to Markdown / JSON / CSV via Dalamud's file dialog\n\nOnboarding\n- First-run wizard with three profiles: Privacy-First / Casual /\n Full History\n- Configuration migration that seeds defaults on update\n- One-shot migration from upstream Chat 2's pluginConfigs layout\n- Migrate3 idempotency recovery for half-migrated databases\n\nLook & feel\n- Localized UI (English and German) with live language switching\n- Industrial HUD theme with cyan-teal action accents, slate-violet\n tabs, amber active highlights and a window-opacity slider\n\nBased on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).",
|
||||||
"AcceptsFeedback": true,
|
"AcceptsFeedback": true,
|
||||||
"DownloadLinkInstall": "https://github.com/JonKazama-Hellion/HellionChat/releases/download/v0.1.1/latest.zip",
|
"DownloadLinkInstall": "https://github.com/JonKazama-Hellion/HellionChat/releases/download/v0.1.2/latest.zip",
|
||||||
"DownloadLinkUpdate": "https://github.com/JonKazama-Hellion/HellionChat/releases/download/v0.1.1/latest.zip",
|
"DownloadLinkUpdate": "https://github.com/JonKazama-Hellion/HellionChat/releases/download/v0.1.2/latest.zip",
|
||||||
"DownloadLinkTesting": "https://github.com/JonKazama-Hellion/HellionChat/releases/download/v0.1.1/latest.zip",
|
"DownloadLinkTesting": "https://github.com/JonKazama-Hellion/HellionChat/releases/download/v0.1.2/latest.zip",
|
||||||
"TestingAssemblyVersion": "0.1.1.0",
|
"TestingAssemblyVersion": "0.1.2.0",
|
||||||
"IconUrl": "https://raw.githubusercontent.com/JonKazama-Hellion/HellionChat/main/ChatTwo/images/icon.png",
|
"IconUrl": "https://raw.githubusercontent.com/JonKazama-Hellion/HellionChat/main/ChatTwo/images/icon.png",
|
||||||
"ImageUrls": [],
|
"ImageUrls": [],
|
||||||
"DownloadCount": 0,
|
"DownloadCount": 0,
|
||||||
|
|||||||
Reference in New Issue
Block a user