From bd0c4f4c2751448bcee17f4ec97aeb6a5f0f5cee Mon Sep 17 00:00:00 2001 From: Llywelwyn <82828093+Llywelwyn@users.noreply.github.com> Date: Wed, 6 Mar 2024 07:10:34 +0000 Subject: [PATCH] Readds the user-defined chat message limit, now for tgchat (#18582) * adds message pruning stuff to settings * cl --- html/changelogs/llywelwyn-messagelimit.yml | 41 +++++++++++++++++++ tgui/packages/tgui-panel/chat/constants.js | 1 - tgui/packages/tgui-panel/chat/middleware.js | 6 ++- tgui/packages/tgui-panel/chat/renderer.js | 8 +--- .../tgui-panel/settings/SettingsPanel.js | 20 ++++++++- tgui/packages/tgui-panel/settings/reducer.js | 1 + 6 files changed, 67 insertions(+), 10 deletions(-) create mode 100644 html/changelogs/llywelwyn-messagelimit.yml diff --git a/html/changelogs/llywelwyn-messagelimit.yml b/html/changelogs/llywelwyn-messagelimit.yml new file mode 100644 index 00000000000..8f502d9976f --- /dev/null +++ b/html/changelogs/llywelwyn-messagelimit.yml @@ -0,0 +1,41 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: Llywelwyn + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Added a tgchat setting to let players decide how many messages can be stored in chat before they start getting pruned." diff --git a/tgui/packages/tgui-panel/chat/constants.js b/tgui/packages/tgui-panel/chat/constants.js index 1f9ad04d89f..5d174e8e87a 100644 --- a/tgui/packages/tgui-panel/chat/constants.js +++ b/tgui/packages/tgui-panel/chat/constants.js @@ -4,7 +4,6 @@ * @license MIT */ -export const MAX_VISIBLE_MESSAGES = 2500; export const MAX_PERSISTED_MESSAGES = 1000; export const MESSAGE_SAVE_INTERVAL = 10000; export const MESSAGE_PRUNE_INTERVAL = 60000; diff --git a/tgui/packages/tgui-panel/chat/middleware.js b/tgui/packages/tgui-panel/chat/middleware.js index 03ad504056f..738bd1c169c 100644 --- a/tgui/packages/tgui-panel/chat/middleware.js +++ b/tgui/packages/tgui-panel/chat/middleware.js @@ -9,7 +9,7 @@ import { storage } from 'common/storage'; import { loadSettings, updateSettings, addHighlightSetting, removeHighlightSetting, updateHighlightSetting } from '../settings/actions'; import { selectSettings } from '../settings/selectors'; import { addChatPage, changeChatPage, changeScrollTracking, loadChat, rebuildChat, removeChatPage, saveChatToDisk, clearChatMessages, toggleAcceptedType, updateMessageCount } from './actions'; -import { MAX_PERSISTED_MESSAGES, MESSAGE_SAVE_INTERVAL } from './constants'; +import { MAX_PERSISTED_MESSAGES, MESSAGE_SAVE_INTERVAL, MESSAGE_PRUNE_INTERVAL } from './constants'; import { createMessage, serializeMessage } from './model'; import { chatRenderer } from './renderer'; import { selectChat, selectCurrentChatPage } from './selectors'; @@ -78,6 +78,10 @@ export const chatMiddleware = (store) => { setInterval(() => { saveChatToStorage(store); }, MESSAGE_SAVE_INTERVAL); + setInterval(() => { + const settings = selectSettings(store.getState()); + chatRenderer.pruneMessagesTo(settings.maxMessages, MAX_PERSISTED_MESSAGES); + }, MESSAGE_PRUNE_INTERVAL); return (next) => (action) => { const { type, payload } = action; if (!initialized) { diff --git a/tgui/packages/tgui-panel/chat/renderer.js b/tgui/packages/tgui-panel/chat/renderer.js index 73d41a48865..64858bce33d 100644 --- a/tgui/packages/tgui-panel/chat/renderer.js +++ b/tgui/packages/tgui-panel/chat/renderer.js @@ -7,7 +7,7 @@ import { EventEmitter } from 'common/events'; import { classes } from 'common/react'; import { createLogger } from 'tgui/logging'; -import { COMBINE_MAX_MESSAGES, COMBINE_MAX_TIME_WINDOW, IMAGE_RETRY_DELAY, IMAGE_RETRY_LIMIT, IMAGE_RETRY_MESSAGE_AGE, MAX_PERSISTED_MESSAGES, MAX_VISIBLE_MESSAGES, MESSAGE_PRUNE_INTERVAL, MESSAGE_TYPES, MESSAGE_TYPE_INTERNAL, MESSAGE_TYPE_UNKNOWN } from './constants'; +import { COMBINE_MAX_MESSAGES, COMBINE_MAX_TIME_WINDOW, IMAGE_RETRY_DELAY, IMAGE_RETRY_LIMIT, IMAGE_RETRY_MESSAGE_AGE, MAX_PERSISTED_MESSAGES, MESSAGE_TYPES, MESSAGE_TYPE_INTERNAL, MESSAGE_TYPE_UNKNOWN } from './constants'; import { render } from 'inferno'; import { canPageAcceptType, createMessage, isSameMessage } from './model'; import { highlightNode, linkifyNode } from './replaceInTextNode'; @@ -135,8 +135,6 @@ class ChatRenderer { this.scrollToBottom(); } }; - // Periodic message pruning - setInterval(() => this.pruneMessages(), MESSAGE_PRUNE_INTERVAL); } isReady() { @@ -513,10 +511,6 @@ class ChatRenderer { } } - pruneMessages() { - this.pruneMessagesTo(MAX_VISIBLE_MESSAGES, MAX_PERSISTED_MESSAGES); - } - rebuildChat() { if (!this.isReady()) { return; diff --git a/tgui/packages/tgui-panel/settings/SettingsPanel.js b/tgui/packages/tgui-panel/settings/SettingsPanel.js index 371870a3438..e2878d49d50 100644 --- a/tgui/packages/tgui-panel/settings/SettingsPanel.js +++ b/tgui/packages/tgui-panel/settings/SettingsPanel.js @@ -50,7 +50,7 @@ export const SettingsPanel = (props, context) => { }; export const SettingsGeneral = (props, context) => { - const { theme, fontFamily, fontSize, lineHeight } = useSelector( + const { theme, fontFamily, fontSize, lineHeight, maxMessages } = useSelector( context, selectSettings ); @@ -150,6 +150,24 @@ export const SettingsGeneral = (props, context) => { } /> + + toFixed(value)} + onChange={(e, value) => + dispatch( + updateSettings({ + maxMessages: value, + }) + ) + } + /> +