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,
+ })
+ )
+ }
+ />
+