diff --git a/HellionChat/Ui/Components/Settings/Tabs/ChatTab.cs b/HellionChat/Ui/Components/Settings/Tabs/ChatTab.cs index 36f1fd6..eab173a 100644 --- a/HellionChat/Ui/Components/Settings/Tabs/ChatTab.cs +++ b/HellionChat/Ui/Components/Settings/Tabs/ChatTab.cs @@ -34,6 +34,17 @@ internal sealed class ChatTab v => Plugin.Config.Use24HourClock = v ); + // PRIVACY.md names this switch as the way to stop the one outbound + // call the plugin makes, and it has had no control since May. A + // documented opt-out that only exists in the JSON is not an opt-out. + _w.ToggleRow( + ImGui.GetID("chat.display.emotes"u8), + Language.Options_ShowEmotes_Name, + Language.Options_ShowEmotes_Desc, + () => Plugin.Config.ShowEmotes, + v => Plugin.Config.ShowEmotes = v + ); + // Descriptions move out of the help markers and onto the row. They // were written to be read; a (?) the user has to hover is where an // explanation goes to be ignored. diff --git a/HellionChat/Ui/FirstRunWizard.cs b/HellionChat/Ui/FirstRunWizard.cs index 91a5510..da28c30 100644 --- a/HellionChat/Ui/FirstRunWizard.cs +++ b/HellionChat/Ui/FirstRunWizard.cs @@ -368,7 +368,9 @@ public sealed class FirstRunWizard : Window // Mirror the DataAndPrivacy coupling: turning load-previous on // also turns filter-include on (otherwise old messages bypass // the filter chain), and turning filter-include off forces - // load-previous off. Same idiom as Ui/SettingsTabs/DataAndPrivacy.cs. + // load-previous off. The settings tab that used to hold the same + // pairing was removed in May; the coupling lives here alone until + // the two checkboxes are reachable again. if (loadPrev) _state.PendingFilterIncludePreviousSessions = true; } diff --git a/PRIVACY.md b/PRIVACY.md index 214186f..6ee5570 100644 --- a/PRIVACY.md +++ b/PRIVACY.md @@ -95,7 +95,7 @@ does on your behalf. incoming chat message contains a token matching one of the cached IDs. These are cached locally (`emoteCache/`) and reused across sessions. - **Cached:** Yes, in `emoteCache/`. A given emote is downloaded once per machine and reused. -- **How to opt out:** Turn off the **Show emotes** option in Settings → Chat. With it disabled, the +- **How to opt out:** Turn off the **Show emotes** option in Settings → Chat → Display modes. With it disabled, the emote cache does not load and no requests to BetterTTV are made for the rest of the session. - **BetterTTV's privacy policy:** @@ -148,17 +148,27 @@ locally, those rights translate directly into plugin features: ### Right to access (Art. 15) -Use the export feature in the plugin settings. You can export to **Markdown**, **JSON** or **CSV**, -filtered by channel, date range or sender substring. The export goes through a Dalamud file dialog -and writes wherever you point it, on your machine. +Settings → Data & Privacy → Export. You can export to **Markdown**, **JSON** or **CSV**, narrowed +by channel group, by age in days, or by a substring of the sender's name. The export goes through a +Dalamud file dialog and writes wherever you point it, on your machine. It reads the database on its +own connection and writes to a temporary file first, so a run that is interrupted leaves the +previous export in place rather than a file that looks complete and is not. ### Right to erasure (Art. 17) Two options: -1. **Targeted deletion.** The "retroactive cleanup" feature lets you apply your current whitelist to - the existing database. It shows a preview of what will be removed before you confirm with +1. **Targeted deletion.** Settings → Data & Privacy → Cleanup applies your current channel list to + the messages already stored. It shows a preview of what will be removed before you confirm with Ctrl+Shift, runs in the background, and calls `VACUUM` afterwards to actually shrink the file. + Channels this build does not recognise -- ones a game patch added after the plugin was released + -- survive the cleanup while "save unknown channel types" is on, for the same reason they are + stored in the first place: so the decision about them stays yours. + + The cleanup is only offered when it can mean something. With the privacy filter off, every + channel is stored and nothing contradicts your settings; with no channel selected, a cleanup + would delete everything, and that is what the clear button is for. Both cases say so instead of + offering a button that does not do what it looks like. 2. **Full deletion.** Close the game and delete the `pluginConfigs/HellionChat/` directory. The next plugin start will produce a fresh, empty configuration. diff --git a/README.md b/README.md index 51dce2a..6022dce 100644 --- a/README.md +++ b/README.md @@ -169,9 +169,10 @@ HellionChat/ │ └── Language*.resx # Upstream localization (Crowdin) ├── Ui/ │ ├── FirstRunWizard.cs # Three-profile onboarding -│ ├── HellionStyle.cs # ImGui theme push (local and global) -│ └── SettingsTabs/ -│ └── DataAndPrivacy.cs # Data & Privacy tab (filters, retention, cleanup, export) +│ ├── StyleEngine/ # Tokens, widgets and the theme push +│ ├── Windows/ # Main, settings, popouts, DB viewer +│ └── Components/Settings/Tabs/ +│ └── DataPrivacyTab.cs # Data & Privacy tab (filters, retention, cleanup, export) ├── Ipc/ # IPC channels, migrated to HellionChat.* in v1.0.0 ├── ChatTwoConflictDetector.cs # Blocks plugin load if upstream Chat 2 is active ├── images/ diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 00d2802..cbda130 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -130,7 +130,6 @@ release stays at v1.5.6. - Test suite 829 → 892, and `StatusBarCacheTests` is back in the build after sitting in the exclusion block. - ## [1.9.0] — unreleased (local only) Polish, tester-beta preparation and a concurrency hardening pass. **Not published** — the public @@ -164,7 +163,6 @@ the assembly version reads 1.9.0. - Removed `DeferredSaveFrames`: the debounce was fully wired but never armed. - Test suite 812 → 829, including migration and query-plan coverage. - ## Hellion Chat 1.5.6 — Settings Overhaul + Filter & Notification Polish (2026-05-23) - Settings window reorganised: ten tabs down to seven (General, Appearance, Chat, Window, Channels, Data & Privacy, About). Each tab now uses collapsible sections grouped by control type. Sections start collapsed every time you open a tab — less noise, easier to find what you need. diff --git a/docs/IPC.md b/docs/IPC.md index c851b8f..f0a5de9 100755 --- a/docs/IPC.md +++ b/docs/IPC.md @@ -169,8 +169,8 @@ the same tuple: `ChannelType` is the `HellionChat.Code.ChatType` enum value representing the target channel for the current submission. It is sourced from the active tab's `UsedChannel` (`HellionChat/Configuration.cs`), which the plugin keeps in sync by hooking the in-game shell -(`HellionChat/GameFunctions/Chat.cs`) and by resolving temporary overrides inside the chat UI -(`HellionChat/Ui/ChatLogWindow.cs:597`). `InputChannel` values are converted into the exported +(`HellionChat/GameFunctions/Chat.cs`) and by resolving temporary overrides in the input bar +(`HellionChat/Ui/Components/InputBar.cs`). `InputChannel` values are converted into the exported `ChatType` via `HellionChat/Code/InputChannelExt.ToChatType`. ### Behavior diff --git a/docs/THEME-AUTHORING.md b/docs/THEME-AUTHORING.md index e6da235..6556268 100644 --- a/docs/THEME-AUTHORING.md +++ b/docs/THEME-AUTHORING.md @@ -10,11 +10,11 @@ ## TL;DR -1. Open Settings → Themes → **Open themes folder** +1. Open Settings → Appearance → **Open themes folder** 2. Copy `example-theme.json` to `.json` in the same folder 3. Edit the file with any text editor 4. Reload the plugin (toggle off/on in `/xlplugins`) -5. Your theme appears in the Custom-Themes section in Settings → Themes +5. Your theme appears in the Custom-Themes section in Settings → Appearance That's the whole loop. The rest of this document is reference. @@ -24,7 +24,7 @@ That's the whole loop. The rest of this document is reference. %APPDATA%\XIVLauncher\pluginConfigs\HellionChat\themes\ ``` -(or the equivalent path on Linux/macOS — Settings → Themes → "Open themes folder" opens it +(or the equivalent path on Linux/macOS — Settings → Appearance → "Open themes folder" opens it directly). Each `*.json` file in this folder is loaded as one theme. The `example-theme.json` that HellionChat @@ -179,11 +179,11 @@ Check `/xllog` after a plugin reload to see what loaded and what didn't. 1. Edit the JSON, save the file. 2. Reload the plugin: `/xlplugins` → toggle HellionChat off, then on. -3. Settings → Themes → click your theme card. +3. Settings → Appearance → click your theme card. 4. Watch every plugin window (chat, settings, pop-out) and pick something to fix. 5. Tweak. Reload. Repeat. -Tip: the **Settings → Themes** picker shows a mini-mockup per theme — your colors are visible before +Tip: the **Settings → Appearance** picker shows a mini-mockup per theme — your colors are visible before you switch. ## Sharing themes