From b5bf0b2ccad217eb4a6ae61bc0371dd5a1e87afb Mon Sep 17 00:00:00 2001 From: Pinapelz Date: Tue, 16 Dec 2025 22:19:45 -0800 Subject: add true message caching - caches only valid message. setting also reflects this --- src/main/index.ts | 8 +++++--- src/renderer/src/App.tsx | 48 ++++++++++++++++++++++++++++++------------------ 2 files changed, 35 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/main/index.ts b/src/main/index.ts index 344465f..0aa3e63 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -2,16 +2,18 @@ import { app, BrowserWindow, shell, ipcMain } from 'electron' import { join } from 'path' import { electronApp, optimizer, is, platform } from '@electron-toolkit/utils' import { WebSocketServer, WebSocket } from 'ws' + import icon from '../../resources/icon.png?asset' let mainWindow: BrowserWindow -let store: import('electron-store').default<{ channelNicknames: Record }> +let store: any async function initStore(): Promise { const Store = (await import('electron-store')).default store = new Store({ defaults: { - channelNicknames: {} + channelNicknames: {}, + maxMessages: 300 } }) } @@ -104,7 +106,7 @@ function setupIpcHandlers(): void { // Get max messages ipcMain.handle('config:get-max-messages', () => { - return store.get('maxMessages', 300) // Default to 100 if not set + return store.get('maxMessages', 300) // Default to 300 if not set }) // Set max messages diff --git a/src/renderer/src/App.tsx b/src/renderer/src/App.tsx index e458f89..e3ade35 100644 --- a/src/renderer/src/App.tsx +++ b/src/renderer/src/App.tsx @@ -10,7 +10,6 @@ function App(): React.JSX.Element { const [isMouseInWindow, setIsMouseInWindow] = useState(true) const [maxMessages, setMaxMessages] = useState(300) - // Load channel nicknames and max messages on mount useEffect(() => { const loadConfig = async (): Promise => { try { @@ -27,17 +26,29 @@ function App(): React.JSX.Element { loadConfig() }, []) + useEffect(() => { + setMessages((prev) => { + const filteredMessages = prev.filter((msg) => channelNicknames[msg.channel]) + return filteredMessages.slice(0, maxMessages) + }) + }, [maxMessages, channelNicknames]) + useEffect(() => { const listener = (...args: unknown[]): void => { const data = args[0] as DiscordMessage if (data) { setMessages((prev) => { + if (!channelNicknames[data.channel]) { + return prev + } + const existingMessage = prev.find((msg) => msg.id === data.id) if (existingMessage) { return prev } - return [data, ...prev.slice(0, maxMessages - 1)] + const newMessages = [data, ...prev] + return newMessages.slice(0, maxMessages) }) } } @@ -46,7 +57,7 @@ function App(): React.JSX.Element { return () => { window.electron.ipcRenderer.removeListener('new-discord-message', listener) } - }, [maxMessages]) + }, [maxMessages, channelNicknames]) return (
channelNicknames[msg.channel]) - .filter( - (msg) => - !( - (msg.content === '' || msg.content === undefined) && - !msg.sticker_id && - (!msg.attachments || msg.attachments.length === 0) - ) - ) - .slice(0, 30) + const filteredMessages = messages.filter( + (msg) => + !( + (msg.content === '' || msg.content === undefined) && + !msg.sticker_id && + (!msg.attachments || msg.attachments.length === 0) + ) + ) if (filteredMessages.length === 0) { return ( @@ -127,11 +134,16 @@ function App(): React.JSX.Element { { + onClose={async () => { setIsConfigOpen(false) // Reload config after changes - window.electron.config.getChannelNicknames().then(setChannelNicknames) - window.electron.config.getMaxMessages().then(setMaxMessages) + const [newNicknames, newMaxMessages] = await Promise.all([ + window.electron.config.getChannelNicknames(), + window.electron.config.getMaxMessages() + ]) + + setChannelNicknames(newNicknames) + setMaxMessages(newMaxMessages) }} />
-- cgit v1.2.3