diff --git a/ChatTwo/EmoteCache.cs b/ChatTwo/EmoteCache.cs
index 2ecb3b9..34a7c20 100644
--- a/ChatTwo/EmoteCache.cs
+++ b/ChatTwo/EmoteCache.cs
@@ -105,6 +105,11 @@ public static class EmoteCache
}
catch (Exception ex)
{
+ // Reset to Unloaded so a later trigger (e.g. the user reopening
+ // the Emotes tab after the network recovers) can retry. Without
+ // this the State stays on Loading and the early-out at the top
+ // of LoadData blocks every further attempt until plugin reload.
+ State = LoadingState.Unloaded;
Plugin.Log.Error(ex, "BetterTTV cache wasn't initialized");
}
}
diff --git a/ChatTwo/Plugin.cs b/ChatTwo/Plugin.cs
index d28b08d..2711217 100755
--- a/ChatTwo/Plugin.cs
+++ b/ChatTwo/Plugin.cs
@@ -72,8 +72,11 @@ public sealed class Plugin : IDalamudPlugin
// plugin start would launch two sweeps in parallel and the second one
// would just re-do work the first one already finished. The lock guards
// the flag — the flag check itself bails before we touch the database.
+ // Volatile because the ImGui thread reads the flag outside the lock to
+ // gate the manual button; without it the JIT may cache the value in a
+ // register and miss the background-thread update.
internal readonly object RetentionSweepLock = new();
- internal bool RetentionSweepRunning;
+ internal volatile bool RetentionSweepRunning;
internal DateTime GameStarted { get; }
diff --git a/ChatTwo/Resources/HellionStrings.Designer.cs b/ChatTwo/Resources/HellionStrings.Designer.cs
index dbcffd1..6035db8 100644
--- a/ChatTwo/Resources/HellionStrings.Designer.cs
+++ b/ChatTwo/Resources/HellionStrings.Designer.cs
@@ -64,6 +64,7 @@ internal class HellionStrings
internal static string Cleanup_Heading => Get(nameof(Cleanup_Heading));
internal static string Cleanup_Help_Intro => Get(nameof(Cleanup_Help_Intro));
internal static string Cleanup_Help_SavedNote => Get(nameof(Cleanup_Help_SavedNote));
+ internal static string Retention_Help_SavedNote => Get(nameof(Retention_Help_SavedNote));
internal static string Cleanup_RefreshPreview => Get(nameof(Cleanup_RefreshPreview));
internal static string Cleanup_NoPreview => Get(nameof(Cleanup_NoPreview));
internal static string Cleanup_TotalStored => Get(nameof(Cleanup_TotalStored));
@@ -99,11 +100,6 @@ internal class HellionStrings
internal static string Retention_Success => Get(nameof(Retention_Success));
internal static string Retention_Error => Get(nameof(Retention_Error));
- internal static string Migration_Notification_Title => Get(nameof(Migration_Notification_Title));
- internal static string Migration_Notification_Content => Get(nameof(Migration_Notification_Content));
- internal static string Migration_Webinterface_Removed_Title => Get(nameof(Migration_Webinterface_Removed_Title));
- internal static string Migration_Webinterface_Removed_Content => Get(nameof(Migration_Webinterface_Removed_Content));
-
internal static string Wizard_Title => Get(nameof(Wizard_Title));
internal static string Wizard_Intro => Get(nameof(Wizard_Intro));
internal static string Wizard_Profile_PrivacyFirst_Heading => Get(nameof(Wizard_Profile_PrivacyFirst_Heading));
@@ -135,7 +131,6 @@ internal class HellionStrings
internal static string Export_Empty => Get(nameof(Export_Empty));
internal static string Export_Error => Get(nameof(Export_Error));
- internal static string Theme_Heading => Get(nameof(Theme_Heading));
internal static string Theme_Enabled_Name => Get(nameof(Theme_Enabled_Name));
internal static string Theme_Enabled_Description => Get(nameof(Theme_Enabled_Description));
internal static string Theme_WindowOpacity_Label => Get(nameof(Theme_WindowOpacity_Label));
@@ -167,8 +162,6 @@ internal class HellionStrings
internal static string About_Translators_TreeNode => Get(nameof(About_Translators_TreeNode));
// Hellion Chat — Auto-Tell-Tabs runtime strings
- internal static string AutoTellTabs_Migration_Title => Get(nameof(AutoTellTabs_Migration_Title));
- internal static string AutoTellTabs_Migration_Content => Get(nameof(AutoTellTabs_Migration_Content));
internal static string AutoTellTabs_SectionHeader => Get(nameof(AutoTellTabs_SectionHeader));
internal static string AutoTellTabs_HistorySeparator => Get(nameof(AutoTellTabs_HistorySeparator));
internal static string AutoTellTabs_HistoryLoadError => Get(nameof(AutoTellTabs_HistoryLoadError));
diff --git a/ChatTwo/Resources/HellionStrings.de.resx b/ChatTwo/Resources/HellionStrings.de.resx
index e0e25f4..0ca1dbf 100644
--- a/ChatTwo/Resources/HellionStrings.de.resx
+++ b/ChatTwo/Resources/HellionStrings.de.resx
@@ -78,6 +78,9 @@
Das Aufräumen nutzt deine GESPEICHERTE Whitelist (Plugin.Config), nicht ungespeicherte Änderungen oben. Klicke zuerst Speichern, wenn du deine aktuellen Änderungen anwenden willst.
+
+ Der manuelle Lauf nutzt deine GESPEICHERTE Retention-Policy, nicht die Slider-Werte oben. Klicke zuerst Speichern, wenn der Lauf deine aktuellen Änderungen anwenden soll.
+
Vorschau aktualisieren
@@ -177,18 +180,6 @@
Aufbewahrungs-Bereinigung fehlgeschlagen, siehe /xllog
-
- Hellion Chat
-
-
- Datenschutz-Filter ist standardmäßig aktiviert. Einstellungen → Datenschutz zum Anpassen.
-
-
- Hellion Chat 0.2.0
-
-
- Das Webinterface wurde in dieser Version entfernt, weil es nicht auf das Datenschutz-Niveau gehärtet werden konnte das Hellion Chat standardmäßig zusichert. Falls du es genutzt hast, schau bitte in die README für Hintergründe.
-
Hellion Chat — Willkommen
@@ -276,9 +267,6 @@
Export fehlgeschlagen, siehe /xllog
-
- Erscheinungsbild
-
Hellion-Theme für alle Plugin-Fenster verwenden
@@ -371,12 +359,6 @@
-
- Auto-Tell-Tabs
-
-
- Auto-Tell-Tabs sind ab Version 0.4.0 standardmäßig aktiv. Du kannst sie im Chat-Tab deaktivieren oder anpassen.
-
Aktive Tells
diff --git a/ChatTwo/Resources/HellionStrings.resx b/ChatTwo/Resources/HellionStrings.resx
index ab77c52..4fc908a 100644
--- a/ChatTwo/Resources/HellionStrings.resx
+++ b/ChatTwo/Resources/HellionStrings.resx
@@ -78,6 +78,9 @@
Cleanup uses your SAVED whitelist (Plugin.Config), not unsaved edits above. Click Save first if you want to apply your current edits.
+
+ The manual sweep uses your SAVED retention policy, not the slider values above. Click Save first if you want the run to apply your current edits.
+
Refresh preview
@@ -177,18 +180,6 @@
Retention sweep failed, see /xllog
-
- Hellion Chat
-
-
- Privacy filter activated by default. Settings → Privacy to adjust.
-
-
- Hellion Chat 0.2.0
-
-
- The webinterface has been removed in this version because it could not be hardened to the privacy guarantees Hellion Chat makes by default. If you used it, please consult the README for context.
-
Hellion Chat — Welcome
@@ -276,9 +267,6 @@
Export failed, see /xllog
-
- Appearance
-
Use the Hellion theme across all plugin windows
@@ -371,12 +359,6 @@
-
- Auto-Tell-Tabs
-
-
- Auto-Tell-Tabs are enabled by default starting with version 0.4.0. You can disable or fine-tune them in the Chat tab.
-
Active Tells
diff --git a/ChatTwo/Ui/Settings.cs b/ChatTwo/Ui/Settings.cs
index 619e958..cd7ddc7 100755
--- a/ChatTwo/Ui/Settings.cs
+++ b/ChatTwo/Ui/Settings.cs
@@ -110,14 +110,16 @@ public sealed class SettingsWindow : Dalamud.Interface.Windowing.Window
ImGui.SameLine();
- if (ImGui.Button(Language.Settings_SaveAndClose)) {
+ if (ImGui.Button(Language.Settings_SaveAndClose))
+ {
save = true;
IsOpen = false;
}
ImGui.SameLine();
- if (ImGui.Button(Language.Settings_Discard)) {
+ if (ImGui.Button(Language.Settings_Discard))
+ {
IsOpen = false;
}
@@ -131,7 +133,7 @@ public sealed class SettingsWindow : Dalamud.Interface.Windowing.Window
{
var buttonWidth = ImGui.CalcTextSize(buttonLabel).X + ImGui.GetStyle().FramePadding.X * 2;
var buttonWidth2 = ImGui.CalcTextSize(buttonLabel2).X + ImGui.GetStyle().FramePadding.X * 2;
- ImGui.SameLine(ImGui.GetContentRegionAvail().X - buttonWidth - buttonWidth2);
+ ImGui.SameLine(ImGui.GetContentRegionAvail().X - buttonWidth - buttonWidth2 - ImGui.GetStyle().ItemSpacing.X);
if (ImGui.Button(buttonLabel2))
Dalamud.Utility.Util.OpenLink("https://ko-fi.com/infiii");
diff --git a/ChatTwo/Ui/SettingsTabs/Privacy.cs b/ChatTwo/Ui/SettingsTabs/Privacy.cs
index 8ec92f2..eb3bea3 100644
--- a/ChatTwo/Ui/SettingsTabs/Privacy.cs
+++ b/ChatTwo/Ui/SettingsTabs/Privacy.cs
@@ -403,6 +403,9 @@ internal sealed class Privacy : ISettingsTab
ImGui.Spacing();
+ ImGuiUtil.HelpText(HellionStrings.Retention_Help_SavedNote);
+ ImGui.Spacing();
+
using (ImRaii.Disabled(RetentionRunning))
{
if (ImGuiUtil.CtrlShiftButton(HellionStrings.Retention_Apply_Label, HellionStrings.Retention_Apply_Tooltip))