feat(auto-tell-tabs): add i18n strings and history preload markers
This commit is contained in:
@@ -3,7 +3,10 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using ChatTwo.Code;
|
using ChatTwo.Code;
|
||||||
using ChatTwo.GameFunctions.Types;
|
using ChatTwo.GameFunctions.Types;
|
||||||
|
using ChatTwo.Resources;
|
||||||
using ChatTwo.Util;
|
using ChatTwo.Util;
|
||||||
|
using Dalamud.Game.Text;
|
||||||
|
using Dalamud.Game.Text.SeStringHandling;
|
||||||
|
|
||||||
namespace ChatTwo;
|
namespace ChatTwo;
|
||||||
|
|
||||||
@@ -251,6 +254,14 @@ internal sealed class AutoTellTabsService : IDisposable
|
|||||||
senderWorld,
|
senderWorld,
|
||||||
preloadCount);
|
preloadCount);
|
||||||
|
|
||||||
|
if (history.Count == 0)
|
||||||
|
{
|
||||||
|
// No prior tells with this player — leave the tab to start
|
||||||
|
// empty so the user does not see a "history loaded" marker
|
||||||
|
// sitting alone above the very first message.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// The history list is already oldest-first, so a plain AddPrune
|
// The history list is already oldest-first, so a plain AddPrune
|
||||||
// loop produces the chronological order the user expects to see
|
// loop produces the chronological order the user expects to see
|
||||||
// when the tab opens.
|
// when the tab opens.
|
||||||
@@ -258,16 +269,34 @@ internal sealed class AutoTellTabsService : IDisposable
|
|||||||
{
|
{
|
||||||
tab.Messages.AddPrune(message, MessageManager.MessageDisplayLimit);
|
tab.Messages.AddPrune(message, MessageManager.MessageDisplayLimit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Visible separator between the loaded history and the live
|
||||||
|
// tell that triggered this spawn. Goes in last so it sorts
|
||||||
|
// after the historical messages but before the current one.
|
||||||
|
tab.Messages.AddPrune(
|
||||||
|
MakeSystemMarker(HellionStrings.AutoTellTabs_HistorySeparator),
|
||||||
|
MessageManager.MessageDisplayLimit);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
// Non-fatal: the tab still spawns, the user just sees only the
|
// Non-fatal: the tab still spawns, but the user gets a visible
|
||||||
// current message. The error logs once with full stack trace
|
// notice instead of silently missing history. The error logs
|
||||||
// for diagnosis.
|
// once with full stack trace for diagnosis.
|
||||||
Plugin.Log.Error(ex, "[AutoTellTabs] History preload failed");
|
Plugin.Log.Error(ex, "[AutoTellTabs] History preload failed");
|
||||||
|
tab.Messages.AddPrune(
|
||||||
|
MakeSystemMarker(HellionStrings.AutoTellTabs_HistoryLoadError),
|
||||||
|
MessageManager.MessageDisplayLimit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Message MakeSystemMarker(string text)
|
||||||
|
{
|
||||||
|
var seString = new SeStringBuilder().AddText(text).Build();
|
||||||
|
var chunks = ChunkUtil.ToChunks(seString, ChunkSource.Content, ChatType.System).ToList();
|
||||||
|
var code = new ChatCode((XivChatType)ChatType.System, 0, 0);
|
||||||
|
return Message.FakeMessage(chunks, code);
|
||||||
|
}
|
||||||
|
|
||||||
internal void MarkGreeted(Tab tab)
|
internal void MarkGreeted(Tab tab)
|
||||||
{
|
{
|
||||||
SetGreeted(tab, true);
|
SetGreeted(tab, true);
|
||||||
|
|||||||
+2
-3
@@ -184,11 +184,10 @@ public sealed class Plugin : IDalamudPlugin
|
|||||||
Config.Version = 9;
|
Config.Version = 9;
|
||||||
SaveConfig();
|
SaveConfig();
|
||||||
|
|
||||||
// TODO Task 14: replace with HellionStrings.AutoTellTabs_Migration_Title / _Content
|
|
||||||
Notification.AddNotification(new Dalamud.Interface.ImGuiNotification.Notification
|
Notification.AddNotification(new Dalamud.Interface.ImGuiNotification.Notification
|
||||||
{
|
{
|
||||||
Title = "Auto-Tell-Tabs",
|
Title = HellionStrings.AutoTellTabs_Migration_Title,
|
||||||
Content = "Auto-Tell-Tabs sind ab Version 0.4.0 standardmäßig aktiv. Du kannst sie im Chat-Tab deaktivieren oder anpassen.",
|
Content = HellionStrings.AutoTellTabs_Migration_Content,
|
||||||
Type = Dalamud.Interface.ImGuiNotification.NotificationType.Info,
|
Type = Dalamud.Interface.ImGuiNotification.NotificationType.Info,
|
||||||
InitialDuration = TimeSpan.FromSeconds(20),
|
InitialDuration = TimeSpan.FromSeconds(20),
|
||||||
});
|
});
|
||||||
|
|||||||
+25
@@ -164,4 +164,29 @@ internal class HellionStrings
|
|||||||
internal static string About_Localization_P1 => Get(nameof(About_Localization_P1));
|
internal static string About_Localization_P1 => Get(nameof(About_Localization_P1));
|
||||||
internal static string About_Localization_P2 => Get(nameof(About_Localization_P2));
|
internal static string About_Localization_P2 => Get(nameof(About_Localization_P2));
|
||||||
internal static string About_Translators_TreeNode => Get(nameof(About_Translators_TreeNode));
|
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));
|
||||||
|
internal static string AutoTellTabs_GreetedTooltip => Get(nameof(AutoTellTabs_GreetedTooltip));
|
||||||
|
internal static string AutoTellTabs_UnGreetedTooltip => Get(nameof(AutoTellTabs_UnGreetedTooltip));
|
||||||
|
|
||||||
|
// Hellion Chat — Auto-Tell-Tabs Chat settings tab
|
||||||
|
internal static string ChatLog_AutoTellTabs_Section_Title => Get(nameof(ChatLog_AutoTellTabs_Section_Title));
|
||||||
|
internal static string ChatLog_AutoTellTabs_Enable_Name => Get(nameof(ChatLog_AutoTellTabs_Enable_Name));
|
||||||
|
internal static string ChatLog_AutoTellTabs_Enable_Description => Get(nameof(ChatLog_AutoTellTabs_Enable_Description));
|
||||||
|
internal static string ChatLog_AutoTellTabs_Limit_Name => Get(nameof(ChatLog_AutoTellTabs_Limit_Name));
|
||||||
|
internal static string ChatLog_AutoTellTabs_Limit_Description => Get(nameof(ChatLog_AutoTellTabs_Limit_Description));
|
||||||
|
internal static string ChatLog_AutoTellTabs_Compact_Name => Get(nameof(ChatLog_AutoTellTabs_Compact_Name));
|
||||||
|
internal static string ChatLog_AutoTellTabs_Compact_Description => Get(nameof(ChatLog_AutoTellTabs_Compact_Description));
|
||||||
|
internal static string ChatLog_AutoTellTabs_PreloadHint => Get(nameof(ChatLog_AutoTellTabs_PreloadHint));
|
||||||
|
|
||||||
|
// Hellion Chat — Auto-Tell-Tabs Privacy settings tab
|
||||||
|
internal static string Privacy_AutoTellTabs_Section_Title => Get(nameof(Privacy_AutoTellTabs_Section_Title));
|
||||||
|
internal static string Privacy_AutoTellTabs_Preload_Name => Get(nameof(Privacy_AutoTellTabs_Preload_Name));
|
||||||
|
internal static string Privacy_AutoTellTabs_Preload_Description => Get(nameof(Privacy_AutoTellTabs_Preload_Description));
|
||||||
|
internal static string Privacy_AutoTellTabs_Preload_Hint => Get(nameof(Privacy_AutoTellTabs_Preload_Hint));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -366,4 +366,67 @@
|
|||||||
<data name="About_Translators_TreeNode" xml:space="preserve">
|
<data name="About_Translators_TreeNode" xml:space="preserve">
|
||||||
<value>Chat-2-Community-Übersetzer (Upstream)</value>
|
<value>Chat-2-Community-Übersetzer (Upstream)</value>
|
||||||
</data>
|
</data>
|
||||||
|
|
||||||
|
<!-- Hellion Chat — Auto-Tell-Tabs (Runtime-Strings) -->
|
||||||
|
<data name="AutoTellTabs_Migration_Title" xml:space="preserve">
|
||||||
|
<value>Auto-Tell-Tabs</value>
|
||||||
|
</data>
|
||||||
|
<data name="AutoTellTabs_Migration_Content" xml:space="preserve">
|
||||||
|
<value>Auto-Tell-Tabs sind ab Version 0.4.0 standardmäßig aktiv. Du kannst sie im Chat-Tab deaktivieren oder anpassen.</value>
|
||||||
|
</data>
|
||||||
|
<data name="AutoTellTabs_SectionHeader" xml:space="preserve">
|
||||||
|
<value>Aktive Tells</value>
|
||||||
|
</data>
|
||||||
|
<data name="AutoTellTabs_HistorySeparator" xml:space="preserve">
|
||||||
|
<value>— Frühere Unterhaltungen —</value>
|
||||||
|
</data>
|
||||||
|
<data name="AutoTellTabs_HistoryLoadError" xml:space="preserve">
|
||||||
|
<value>Verlauf konnte nicht geladen werden.</value>
|
||||||
|
</data>
|
||||||
|
<data name="AutoTellTabs_GreetedTooltip" xml:space="preserve">
|
||||||
|
<value>Als begrüßt markiert. Klicken um die Markierung zu entfernen.</value>
|
||||||
|
</data>
|
||||||
|
<data name="AutoTellTabs_UnGreetedTooltip" xml:space="preserve">
|
||||||
|
<value>Als begrüßt markieren.</value>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Hellion Chat — Auto-Tell-Tabs (Chat-Einstellungstab) -->
|
||||||
|
<data name="ChatLog_AutoTellTabs_Section_Title" xml:space="preserve">
|
||||||
|
<value>Auto-Tell-Tabs</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChatLog_AutoTellTabs_Enable_Name" xml:space="preserve">
|
||||||
|
<value>Bei jedem /tell automatisch einen Tab pro Gesprächspartner öffnen</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChatLog_AutoTellTabs_Enable_Description" xml:space="preserve">
|
||||||
|
<value>Sobald du einen /tell empfängst oder sendest, wird automatisch ein temporärer Tab für diesen Spieler geöffnet. Die Tabs verschwinden beim Logout.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChatLog_AutoTellTabs_Limit_Name" xml:space="preserve">
|
||||||
|
<value>Maximale Anzahl der Auto-Tell-Tabs</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChatLog_AutoTellTabs_Limit_Description" xml:space="preserve">
|
||||||
|
<value>Beim Erreichen werden begrüßte Tabs mit der ältesten Aktivität zuerst geschlossen. Änderungen greifen beim nächsten /tell.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChatLog_AutoTellTabs_Compact_Name" xml:space="preserve">
|
||||||
|
<value>Kompakte Anzeige</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChatLog_AutoTellTabs_Compact_Description" xml:space="preserve">
|
||||||
|
<value>Zeigt nur einen dünnen Separator zwischen normalen Tabs und Auto-Tell-Tabs, ohne Sektions-Header.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChatLog_AutoTellTabs_PreloadHint" xml:space="preserve">
|
||||||
|
<value>Die Anzahl der vorgeladenen Tells lässt sich im Datenschutz-Tab einstellen.</value>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Hellion Chat — Auto-Tell-Tabs (Datenschutz-Einstellungstab) -->
|
||||||
|
<data name="Privacy_AutoTellTabs_Section_Title" xml:space="preserve">
|
||||||
|
<value>Tell-Verlauf in Auto-Tabs</value>
|
||||||
|
</data>
|
||||||
|
<data name="Privacy_AutoTellTabs_Preload_Name" xml:space="preserve">
|
||||||
|
<value>Anzahl der vorgeladenen Tells</value>
|
||||||
|
</data>
|
||||||
|
<data name="Privacy_AutoTellTabs_Preload_Description" xml:space="preserve">
|
||||||
|
<value>Wie viele frühere Tell-Nachrichten beim Öffnen eines Auto-Tell-Tabs aus der Datenbank geladen werden. 0 deaktiviert die Vorladung.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Privacy_AutoTellTabs_Preload_Hint" xml:space="preserve">
|
||||||
|
<value>Greift nur, wenn Auto-Tell-Tabs im Chat-Tab aktiviert sind.</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -366,4 +366,67 @@
|
|||||||
<data name="About_Translators_TreeNode" xml:space="preserve">
|
<data name="About_Translators_TreeNode" xml:space="preserve">
|
||||||
<value>Chat 2 community translators (upstream)</value>
|
<value>Chat 2 community translators (upstream)</value>
|
||||||
</data>
|
</data>
|
||||||
|
|
||||||
|
<!-- Hellion Chat — Auto-Tell-Tabs (runtime strings) -->
|
||||||
|
<data name="AutoTellTabs_Migration_Title" xml:space="preserve">
|
||||||
|
<value>Auto-Tell-Tabs</value>
|
||||||
|
</data>
|
||||||
|
<data name="AutoTellTabs_Migration_Content" xml:space="preserve">
|
||||||
|
<value>Auto-Tell-Tabs are enabled by default starting with version 0.4.0. You can disable or fine-tune them in the Chat tab.</value>
|
||||||
|
</data>
|
||||||
|
<data name="AutoTellTabs_SectionHeader" xml:space="preserve">
|
||||||
|
<value>Active Tells</value>
|
||||||
|
</data>
|
||||||
|
<data name="AutoTellTabs_HistorySeparator" xml:space="preserve">
|
||||||
|
<value>— Earlier conversations —</value>
|
||||||
|
</data>
|
||||||
|
<data name="AutoTellTabs_HistoryLoadError" xml:space="preserve">
|
||||||
|
<value>History could not be loaded.</value>
|
||||||
|
</data>
|
||||||
|
<data name="AutoTellTabs_GreetedTooltip" xml:space="preserve">
|
||||||
|
<value>Marked as greeted. Click to remove the marker.</value>
|
||||||
|
</data>
|
||||||
|
<data name="AutoTellTabs_UnGreetedTooltip" xml:space="preserve">
|
||||||
|
<value>Mark as greeted.</value>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Hellion Chat — Auto-Tell-Tabs (Chat settings tab) -->
|
||||||
|
<data name="ChatLog_AutoTellTabs_Section_Title" xml:space="preserve">
|
||||||
|
<value>Auto-Tell-Tabs</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChatLog_AutoTellTabs_Enable_Name" xml:space="preserve">
|
||||||
|
<value>Open a tab automatically for each tell partner</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChatLog_AutoTellTabs_Enable_Description" xml:space="preserve">
|
||||||
|
<value>When you receive or send a /tell, a temporary tab dedicated to that player is opened automatically. Tabs vanish on logout.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChatLog_AutoTellTabs_Limit_Name" xml:space="preserve">
|
||||||
|
<value>Maximum number of auto tell tabs</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChatLog_AutoTellTabs_Limit_Description" xml:space="preserve">
|
||||||
|
<value>When the limit is reached, greeted tabs with the oldest activity are dropped first. The change applies on the next /tell.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChatLog_AutoTellTabs_Compact_Name" xml:space="preserve">
|
||||||
|
<value>Compact display</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChatLog_AutoTellTabs_Compact_Description" xml:space="preserve">
|
||||||
|
<value>Show only a thin separator between persistent tabs and auto tell tabs, without the section header.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChatLog_AutoTellTabs_PreloadHint" xml:space="preserve">
|
||||||
|
<value>The number of preloaded tells is configured in the Privacy tab.</value>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Hellion Chat — Auto-Tell-Tabs (Privacy settings tab) -->
|
||||||
|
<data name="Privacy_AutoTellTabs_Section_Title" xml:space="preserve">
|
||||||
|
<value>Tell history in auto tabs</value>
|
||||||
|
</data>
|
||||||
|
<data name="Privacy_AutoTellTabs_Preload_Name" xml:space="preserve">
|
||||||
|
<value>Number of preloaded tells</value>
|
||||||
|
</data>
|
||||||
|
<data name="Privacy_AutoTellTabs_Preload_Description" xml:space="preserve">
|
||||||
|
<value>How many earlier tell messages are loaded from the database when an auto tell tab is opened. 0 disables the preload.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Privacy_AutoTellTabs_Preload_Hint" xml:space="preserve">
|
||||||
|
<value>Only takes effect when auto tell tabs are enabled in the Chat tab.</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
Reference in New Issue
Block a user