diff --git a/ChatTwo/Http/MessageProtocol/OutgoingMessage.cs b/ChatTwo/Http/MessageProtocol/OutgoingMessage.cs index 11c5ad0..f74f349 100644 --- a/ChatTwo/Http/MessageProtocol/OutgoingMessage.cs +++ b/ChatTwo/Http/MessageProtocol/OutgoingMessage.cs @@ -9,6 +9,8 @@ public class ChannelListEvent(ChannelList channelList) : BaseEvent("channel-list public class SwitchChannelEvent(SwitchChannel switchChannel) : BaseEvent("switch-channel", JsonConvert.SerializeObject(switchChannel)); +public class BulkMessagesEvent(Messages messages) : BaseEvent("bulk-messages", JsonConvert.SerializeObject(messages)); + public class NewMessageEvent(Messages messages) : BaseEvent("new-message", JsonConvert.SerializeObject(messages)); public class BaseEvent(string eventType, string? data = null) diff --git a/ChatTwo/Http/ServerCore.cs b/ChatTwo/Http/ServerCore.cs index 84a3722..3c9d850 100644 --- a/ChatTwo/Http/ServerCore.cs +++ b/ChatTwo/Http/ServerCore.cs @@ -56,6 +56,22 @@ public class ServerCore : IAsyncDisposable } } + internal void SendBulkMessageList() + { + try + { + Plugin.Framework.RunOnTick(() => + { + foreach (var eventServer in EventConnections) + eventServer.OutboundQueue.Enqueue(new BulkMessagesEvent(new Messages(Processing.ReadMessageList().Result))); + }); + } + catch (Exception ex) + { + Plugin.Log.Error(ex, "Sending channel switch over SSE failed."); + } + } + internal void SendChannelSwitch(Chunk[] channelName) { try diff --git a/ChatTwo/Http/static/start.js b/ChatTwo/Http/static/start.js index ba6ebac..8fde8be 100644 --- a/ChatTwo/Http/static/start.js +++ b/ChatTwo/Http/static/start.js @@ -12,6 +12,7 @@ class SSEConnection { updateChannelHint(JSON.parse(event.data).channel) }); + // New messages that are able to be directly processed this.socket.addEventListener('new-message', (event) => { for (let message of JSON.parse(event.data).messages) { @@ -19,6 +20,16 @@ class SSEConnection { } }); + // New messages, that require a clean message list before processing + this.socket.addEventListener('bulk-messages', (event) => { + clearMessages(); + + for (let message of JSON.parse(event.data).messages) + { + addMessage(message); + } + }); + this.socket.addEventListener('channel-list', (event) => { updateChannelOptions(JSON.parse(event.data).channels) }); diff --git a/ChatTwo/PayloadHandler.cs b/ChatTwo/PayloadHandler.cs index 6b9b0c2..3bbf2d5 100755 --- a/ChatTwo/PayloadHandler.cs +++ b/ChatTwo/PayloadHandler.cs @@ -159,7 +159,9 @@ public sealed class PayloadHandler { return; } - ImGui.Checkbox(Language.Context_ScreenshotMode, ref LogWindow.ScreenshotMode); + // ScreenshotMode changed, so we inform the webinterface about the new message format + if (ImGui.Checkbox(Language.Context_ScreenshotMode, ref LogWindow.ScreenshotMode)) + LogWindow.Plugin.ServerCore.SendBulkMessageList(); if (ImGui.Selectable(Language.Context_HideChat)) LogWindow.UserHide();