feat(desktop): enhance error handling and logging for session synchronization and window mode transitions
This commit is contained in:
@@ -757,13 +757,39 @@ async function createSettingsWindow(): Promise<ElectronBrowserWindow> {
|
||||
return window
|
||||
}
|
||||
|
||||
function flattenError(error: unknown): Error {
|
||||
function ipcErrorMessage(error: unknown): string {
|
||||
if (error instanceof Error) {
|
||||
const copy = new Error(error.message || 'ipc_handler_failed')
|
||||
return error.message || 'ipc_handler_failed'
|
||||
}
|
||||
if (typeof error === 'string') {
|
||||
return error || 'ipc_handler_failed'
|
||||
}
|
||||
if (
|
||||
error &&
|
||||
typeof error === 'object' &&
|
||||
'message' in error &&
|
||||
typeof (error as { message?: unknown }).message === 'string'
|
||||
) {
|
||||
return (error as { message: string }).message || 'ipc_handler_failed'
|
||||
}
|
||||
return 'ipc_handler_failed'
|
||||
}
|
||||
|
||||
function flattenError(channel: string, error: unknown): Error {
|
||||
const message = ipcErrorMessage(error)
|
||||
console.error('[desktop-main] ipc handler failed', {
|
||||
channel,
|
||||
name: error instanceof Error ? error.name : typeof error,
|
||||
message,
|
||||
stack: error instanceof Error ? error.stack : undefined,
|
||||
})
|
||||
|
||||
if (error instanceof Error) {
|
||||
const copy = new Error(message)
|
||||
copy.name = error.name
|
||||
return copy
|
||||
}
|
||||
return new Error(typeof error === 'string' ? error : 'ipc_handler_failed')
|
||||
return new Error(message)
|
||||
}
|
||||
|
||||
function safeHandle<Args extends unknown[], Result>(
|
||||
@@ -774,7 +800,7 @@ function safeHandle<Args extends unknown[], Result>(
|
||||
try {
|
||||
return await handler(...(args as unknown as Args))
|
||||
} catch (error) {
|
||||
throw flattenError(error)
|
||||
throw flattenError(channel, error)
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -1065,7 +1091,7 @@ function registerBridgeHandlers(): void {
|
||||
return setDesktopAppSetting(key, value)
|
||||
},
|
||||
)
|
||||
ipcMain.handle(
|
||||
safeHandle(
|
||||
'desktop:runtime-session-sync',
|
||||
(_event, session: DesktopRuntimeSessionSyncRequest | null) => {
|
||||
syncRuntimeSession(session)
|
||||
@@ -1105,16 +1131,19 @@ function registerBridgeHandlers(): void {
|
||||
await releaseRuntimeSession({ revoke: Boolean(revoke) })
|
||||
return null
|
||||
})
|
||||
ipcMain.handle('desktop:set-window-mode', async (event, mode: WindowMode, request?: unknown) => {
|
||||
if (mode === 'login' || mode === 'main') {
|
||||
await queueWindowModeSwitch(
|
||||
mode,
|
||||
normalizeWindowModeRequest(request),
|
||||
windowFromIpcEvent(event),
|
||||
)
|
||||
}
|
||||
return null
|
||||
})
|
||||
safeHandle(
|
||||
'desktop:set-window-mode',
|
||||
async (event: IpcMainInvokeEvent, mode: WindowMode, request?: unknown) => {
|
||||
if (mode === 'login' || mode === 'main') {
|
||||
await queueWindowModeSwitch(
|
||||
mode,
|
||||
normalizeWindowModeRequest(request),
|
||||
windowFromIpcEvent(event),
|
||||
)
|
||||
}
|
||||
return null
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
const hasSingleInstanceLock = initSingleInstance((argv) => {
|
||||
|
||||
Reference in New Issue
Block a user