From 254145f0e5517dd3e6532c2febe428d83cb4e578 Mon Sep 17 00:00:00 2001 From: SiriusXT <1160925501@qq.com> Date: Mon, 29 Dec 2025 16:26:50 +0800 Subject: [PATCH] chore(window): handle potential JSON parsing failures --- apps/server/src/services/options.ts | 14 ++++++++++++++ apps/server/src/services/tray.ts | 2 +- apps/server/src/services/window.ts | 4 +--- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/apps/server/src/services/options.ts b/apps/server/src/services/options.ts index 1cc67df5a..aaf758c87 100644 --- a/apps/server/src/services/options.ts +++ b/apps/server/src/services/options.ts @@ -72,6 +72,19 @@ function getOptionBool(name: FilterOptionsByType): boolean { return val === "true"; } +function getOptionJson(name: OptionNames) { + const val = getOptionOrNull(name); + + if (typeof val !== "string") { + return null; + } + try { + return JSON.parse(val); + } catch (e) { + return null; + } +} + function setOption(name: T, value: string | OptionDefinitions[T]) { const option = becca.getOption(name); @@ -137,6 +150,7 @@ export default { getOption, getOptionInt, getOptionBool, + getOptionJson, setOption, createOption, getOptions, diff --git a/apps/server/src/services/tray.ts b/apps/server/src/services/tray.ts index 008635794..739f522f9 100644 --- a/apps/server/src/services/tray.ts +++ b/apps/server/src/services/tray.ts @@ -197,7 +197,7 @@ function updateTrayMenu() { } function buildClosedWindowsMenu() { - const savedOpenNoteContexts = JSON.parse(optionService.getOption("openNoteContexts") || "[]"); + const savedOpenNoteContexts = optionService.getOptionJson("openNoteContexts") || "[]"; const openedWindowIds = windowService.getAllWindowIds(); const closedWindows = savedOpenNoteContexts .filter(win => !openedWindowIds.includes(win.windowId)) diff --git a/apps/server/src/services/window.ts b/apps/server/src/services/window.ts index ceaca56b6..1a1d055f0 100644 --- a/apps/server/src/services/window.ts +++ b/apps/server/src/services/window.ts @@ -37,9 +37,7 @@ function trackWindowFocus(win: BrowserWindow, windowId: string) { win.on("closed", () => { cls.wrap(() => { - const savedWindows = JSON.parse( - optionService.getOption("openNoteContexts") || "[]" - ); + const savedWindows = optionService.getOptionJson("openNoteContexts") || "[]"; const win = savedWindows.find(w => w.windowId === windowId); if (win) {