aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPinapelz <yukais@pinapelz.com>2025-06-21 22:09:02 -0700
committerPinapelz <yukais@pinapelz.com>2025-06-21 22:09:20 -0700
commit1257a0f83190527725c595c0d872c332ecfdf3a8 (patch)
tree849a4f61eeb9927d3771856eb7d146a25855a204
parenta9eadcc3a53c96657963e1d3a17dba87c0e02739 (diff)
make max messages kept configurable
-rw-r--r--src/main/index.ts11
-rw-r--r--src/preload/index.d.ts2
-rw-r--r--src/preload/index.ts5
-rw-r--r--src/renderer/src/App.tsx17
-rw-r--r--src/renderer/src/components/ConfigModal.tsx45
5 files changed, 73 insertions, 7 deletions
diff --git a/src/main/index.ts b/src/main/index.ts
index 76c508a..344465f 100644
--- a/src/main/index.ts
+++ b/src/main/index.ts
@@ -102,6 +102,17 @@ function setupIpcHandlers(): void {
return true
})
+ // Get max messages
+ ipcMain.handle('config:get-max-messages', () => {
+ return store.get('maxMessages', 300) // Default to 100 if not set
+ })
+
+ // Set max messages
+ ipcMain.handle('config:set-max-messages', (_, maxMessagesKept: number) => {
+ store.set('maxMessages', maxMessagesKept)
+ return true
+ })
+
// Get all channel nicknames as array
ipcMain.handle('config:get-channel-list', () => {
const nicknames = store.get('channelNicknames')
diff --git a/src/preload/index.d.ts b/src/preload/index.d.ts
index dd64a3f..99f64a5 100644
--- a/src/preload/index.d.ts
+++ b/src/preload/index.d.ts
@@ -11,6 +11,8 @@ declare global {
setChannelNickname: (channelId: string, nickname: string) => Promise<boolean>
removeChannelNickname: (channelId: string) => Promise<boolean>
getChannelList: () => Promise<Array<{ id: string; nickname: string }>>
+ getMaxMessages: () => Promise<number>
+ setMaxMessages: (maxMessageNum: number) => Promise<boolean>
}
}
}
diff --git a/src/preload/index.ts b/src/preload/index.ts
index 84ff03c..793aa56 100644
--- a/src/preload/index.ts
+++ b/src/preload/index.ts
@@ -14,6 +14,9 @@ contextBridge.exposeInMainWorld('electron', {
ipcRenderer.invoke('config:set-channel-nickname', channelId, nickname),
removeChannelNickname: (channelId: string) =>
ipcRenderer.invoke('config:remove-channel-nickname', channelId),
- getChannelList: () => ipcRenderer.invoke('config:get-channel-list')
+ getChannelList: () => ipcRenderer.invoke('config:get-channel-list'),
+ getMaxMessages: () => ipcRenderer.invoke('config:get-max-messages'),
+ setMaxMessages: (maxMessageNum: number) =>
+ ipcRenderer.invoke('config:set-max-messages', maxMessageNum)
}
})
diff --git a/src/renderer/src/App.tsx b/src/renderer/src/App.tsx
index bbd949d..2297060 100644
--- a/src/renderer/src/App.tsx
+++ b/src/renderer/src/App.tsx
@@ -8,19 +8,23 @@ function App(): React.JSX.Element {
const [channelNicknames, setChannelNicknames] = useState<Record<string, string>>({})
const [isConfigOpen, setIsConfigOpen] = useState(false)
const [isMouseInWindow, setIsMouseInWindow] = useState(true)
+ const [maxMessages, setMaxMessages] = useState<number>(300)
- // Load channel nicknames on mount
+ // Load channel nicknames and max messages on mount
useEffect(() => {
- const loadChannelNicknames = async (): Promise<void> => {
+ const loadConfig = async (): Promise<void> => {
try {
const nicknames = await window.electron.config.getChannelNicknames()
setChannelNicknames(nicknames)
+
+ const maxMsgs = await window.electron.config.getMaxMessages()
+ setMaxMessages(maxMsgs)
} catch (error) {
- console.error('Failed to load channel nicknames:', error)
+ console.error('Failed to load config:', error)
}
}
- loadChannelNicknames()
+ loadConfig()
}, [])
useEffect(() => {
@@ -33,7 +37,7 @@ function App(): React.JSX.Element {
if (existingMessage) {
return prev
}
- return [data, ...prev.slice(0, 300)]
+ return [data, ...prev.slice(0, maxMessages - 1)]
})
}
}
@@ -125,8 +129,9 @@ function App(): React.JSX.Element {
isOpen={isConfigOpen}
onClose={() => {
setIsConfigOpen(false)
- // Reload channel nicknames after config changes
+ // Reload config after changes
window.electron.config.getChannelNicknames().then(setChannelNicknames)
+ window.electron.config.getMaxMessages().then(setMaxMessages)
}}
/>
</div>
diff --git a/src/renderer/src/components/ConfigModal.tsx b/src/renderer/src/components/ConfigModal.tsx
index f927045..7f5e3e8 100644
--- a/src/renderer/src/components/ConfigModal.tsx
+++ b/src/renderer/src/components/ConfigModal.tsx
@@ -18,10 +18,13 @@ export default function ConfigModal({
const [newChannelId, setNewChannelId] = useState('')
const [newNickname, setNewNickname] = useState('')
const [isLoading, setIsLoading] = useState(false)
+ const [maxMessages, setMaxMessages] = useState<number>(300)
+ const [tempMaxMessages, setTempMaxMessages] = useState<number>(300)
useEffect(() => {
if (isOpen) {
loadChannels()
+ loadMaxMessages()
}
}, [isOpen])
@@ -34,6 +37,25 @@ export default function ConfigModal({
}
}
+ const loadMaxMessages = async (): Promise<void> => {
+ try {
+ const maxMsgs = await window.electron.config.getMaxMessages()
+ setMaxMessages(maxMsgs)
+ setTempMaxMessages(maxMsgs)
+ } catch (error) {
+ console.error('Failed to load max messages:', error)
+ }
+ }
+
+ const handleSaveMaxMessages = async (): Promise<void> => {
+ try {
+ await window.electron.config.setMaxMessages(tempMaxMessages)
+ setMaxMessages(tempMaxMessages)
+ } catch (error) {
+ console.error('Failed to save max messages:', error)
+ }
+ }
+
const handleAddChannel = async (): Promise<void> => {
if (!newChannelId.trim() || !newNickname.trim()) {
return
@@ -82,6 +104,29 @@ export default function ConfigModal({
</div>
<div className="modal-body">
+ <div className="max-messages-section">
+ <h3>Message Limit</h3>
+ <div className="input-group">
+ <label>Maximum messages to keep in memory:</label>
+ <input
+ type="number"
+ min="10"
+ max="1000"
+ value={tempMaxMessages}
+ onChange={(e) => setTempMaxMessages(parseInt(e.target.value) || 300)}
+ />
+ <button
+ onClick={handleSaveMaxMessages}
+ disabled={tempMaxMessages === maxMessages}
+ >
+ Save
+ </button>
+ </div>
+ <p className="help-text">
+ Current: {maxMessages} messages. Higher values use more memory but keep more message history.
+ </p>
+ </div>
+
<div className="add-channel-section">
<h3>Add Channel</h3>
<div className="input-group">
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage