From f16671df06a3af1f20f72d3f01b4134aaf5a9fb4 Mon Sep 17 00:00:00 2001 From: Selis Date: Tue, 19 Dec 2023 18:26:49 +0100 Subject: [PATCH] A few more settings (#15625) --- tgui/packages/tgui-panel/Panel.jsx | 4 +- tgui/packages/tgui-panel/chat/middleware.js | 28 +- tgui/packages/tgui-panel/chat/renderer.js | 12 +- .../tgui-panel/settings/SettingsPanel.jsx | 73 ++++- .../packages/tgui-panel/settings/constants.ts | 5 +- tgui/packages/tgui-panel/settings/reducer.js | 3 + tgui/public/tgui-panel.bundle.js | 252 +++++++++--------- 7 files changed, 236 insertions(+), 141 deletions(-) diff --git a/tgui/packages/tgui-panel/Panel.jsx b/tgui/packages/tgui-panel/Panel.jsx index 83150ab6ef1..22460c24283 100644 --- a/tgui/packages/tgui-panel/Panel.jsx +++ b/tgui/packages/tgui-panel/Panel.jsx @@ -83,13 +83,13 @@ export const Panel = (props, context) => { - {game.connectionLostAt && ( + {settings.showReconnectWarning && game.connectionLostAt && ( }> You are either AFK, experiencing lag or the connection has closed. )} - {game.roundRestartedAt && ( + {settings.showReconnectWarning && game.roundRestartedAt && ( The connection has been closed because the server is restarting. Please wait while you automatically reconnect. diff --git a/tgui/packages/tgui-panel/chat/middleware.js b/tgui/packages/tgui-panel/chat/middleware.js index ffcc40a6e76..9d54c9d8027 100644 --- a/tgui/packages/tgui-panel/chat/middleware.js +++ b/tgui/packages/tgui-panel/chat/middleware.js @@ -66,6 +66,31 @@ const loadChatFromStorage = async (store) => { } if (archivedMessages) { chatRenderer.archivedMessages = archivedMessages; + + /* FIXME Implement this later on + const settings = selectSettings(store.getState()); + const filteredMessages = []; + + // Checks if the setting is actually set or set to -1 (infinite) + // Otherwise make it grow infinitely + if (settings.logRetainDays || settings.logRetainDays === -1) { + const limit = new Date(); + limit.setDate(limit.getMinutes() - settings.logRetainDays); + + for (let message of archivedMessages) { + const timestamp = new Date(message.createdAt); + timestamp.setDate(timestamp.getMinutes() - settings.logRetainDays); + + if (timestamp.getDate() < limit.getDate()) { + filteredMessages.push(message); + } + } + + archivedMessages.length = 0; + } + + chatRenderer.archivedMessages = filteredMessages; + */ } store.dispatch(loadChat(state)); }; @@ -179,7 +204,8 @@ export const chatMiddleware = (store) => { return next(action); } if (type === saveChatToDisk.type) { - chatRenderer.saveToDisk(); + const settings = selectSettings(store.getState()); + chatRenderer.saveToDisk(settings.logLineCount); return; } if (type === purgeChatMessageArchive.type) { diff --git a/tgui/packages/tgui-panel/chat/renderer.js b/tgui/packages/tgui-panel/chat/renderer.js index def5a2aed6c..645c7a09286 100644 --- a/tgui/packages/tgui-panel/chat/renderer.js +++ b/tgui/packages/tgui-panel/chat/renderer.js @@ -552,7 +552,7 @@ class ChatRenderer { }); } - saveToDisk() { + saveToDisk(logLineCount) { // Allow only on IE11 if (Byond.IS_LTE_IE10) { return; @@ -572,8 +572,16 @@ class ChatRenderer { cssText += 'body, html { background-color: #141414 }\n'; // Compile chat log as HTML text let messagesHtml = ''; + + let tmpMsgArray = []; + if (logLineCount > 0) { + tmpMsgArray = this.archivedMessages.slice(-logLineCount); + } else { + tmpMsgArray = this.archivedMessages; + } + // for (let message of this.visibleMessages) { // TODO: Actually having a better message archiving maybe for exports? - for (let message of this.archivedMessages) { + for (let message of tmpMsgArray) { // if (message.node) { // messagesHtml += message.node.outerHTML + '\n'; // } diff --git a/tgui/packages/tgui-panel/settings/SettingsPanel.jsx b/tgui/packages/tgui-panel/settings/SettingsPanel.jsx index c52d36e102b..0ab17b07a85 100644 --- a/tgui/packages/tgui-panel/settings/SettingsPanel.jsx +++ b/tgui/packages/tgui-panel/settings/SettingsPanel.jsx @@ -42,6 +42,7 @@ export const SettingsPanel = (props, context) => { {activeTab === 'general' && } + {activeTab === 'export' && } {activeTab === 'chatPage' && } {activeTab === 'textHighlight' && } @@ -50,17 +51,10 @@ export const SettingsPanel = (props, context) => { }; export const SettingsGeneral = (props, context) => { - const { theme, fontFamily, fontSize, lineHeight } = useSelector( - context, - selectSettings - ); + const { theme, fontFamily, fontSize, lineHeight, showReconnectWarning } = + useSelector(context, selectSettings); const dispatch = useDispatch(context); const [freeFont, setFreeFont] = useLocalState(context, 'freeFont', false); - const [purgeConfirm, setPurgeConfirm] = useLocalState( - context, - 'purgeConfirm', - 0 - ); return (
@@ -155,6 +149,67 @@ export const SettingsGeneral = (props, context) => { } /> + + + dispatch( + updateSettings({ + showReconnectWarning: !showReconnectWarning, + }) + ) + } + /> + + +
+ ); +}; + +export const ExportTab = (props, context) => { + const dispatch = useDispatch(context); + const { logRetainDays, logLineCount } = useSelector(context, selectSettings); + const [purgeConfirm, setPurgeConfirm] = useLocalState( + context, + 'purgeConfirm', + 0 + ); + return ( +
+ + {/* FIXME: Implement this later on + + + dispatch( + updateSettings({ + logRetainDays: value, + }) + ) + } + /> + + */} + + + dispatch( + updateSettings({ + logLineCount: value, + }) + ) + } + /> +