From ed2a0f7374257be7d3153f1b91498eebceea70d2 Mon Sep 17 00:00:00 2001 From: JonKazama-Hellion Date: Tue, 5 May 2026 23:51:42 +0200 Subject: [PATCH] fix(messages): exclude TempTabs from ClearAllTabs and FilterAllTabs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TempTabs (Auto-Tell-Tabs) are session-only and populated directly by AutoTellTabsService.HandleTell — they have no DB persistence to refilter from. The Settings-save flow calls ClearAllTabs() + FilterAllTabsAsync() to rebuild persistent tabs after potential filter changes; this wiped TempTabs as collateral because their tells aren't in the DB (either Privacy-filtered out or simply not yet persisted). Skip TempTabs in both methods so their live-state survives any settings save. Live tells continue to land via HandleTell, regardless of the clear/filter cycle. --- HellionChat/MessageManager.cs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/HellionChat/MessageManager.cs b/HellionChat/MessageManager.cs index 177d343..c655b0a 100644 --- a/HellionChat/MessageManager.cs +++ b/HellionChat/MessageManager.cs @@ -151,7 +151,13 @@ internal class MessageManager : IAsyncDisposable internal void ClearAllTabs() { - foreach (var tab in Plugin.Config.Tabs) + // Hellion Chat — TempTabs haben keine DB-Persistenz (session-only, + // direkt vom AutoTellTabsService befüllt). Ein Clear+Refilter würde + // sie leer hinterlassen weil FilterAllTabs nichts aus der DB + // findet — Tells sind oft durch Privacy-Filter blockiert oder + // schlicht session-flüchtig. TempTabs vom Clear-Pfad ausschließen + // damit Settings-Save den Tell-Verlauf nicht zerstört. + foreach (var tab in Plugin.Config.Tabs.Where(t => !t.IsTempTab)) tab.Clear(); } @@ -165,7 +171,11 @@ internal class MessageManager : IAsyncDisposable // We store the pending messages to be added to the chat log in a // temporary list, and apply them all at once after filtering. - var pendingTabs = Plugin.Config.Tabs.Select(tab => (tab, new List())).ToList(); + // TempTabs werden ausgeschlossen — sie bleiben live-state aus dem + // AutoTellTabsService, ein DB-Refilter würde sie nur partial + // wiederherstellen falls Tells in DB liegen, oder leer lassen wenn + // Privacy-Filter sie blockiert hat. + var pendingTabs = Plugin.Config.Tabs.Where(t => !t.IsTempTab).Select(tab => (tab, new List())).ToList(); foreach (var message in messages) foreach (var (_, pendingMessages) in pendingTabs.Where(ptab => ptab.Item1.Matches(message))) pendingMessages.Add(message);