feat(desktop): enhance error handling and logging for session synchronization and window mode transitions
Desktop Client Build / Resolve Build Metadata (push) Successful in 24s
Desktop Client Build / Build Desktop Client (push) Successful in 22m50s
Desktop Client Build / Publish Client Artifacts to NAS (push) Successful in 27s

This commit is contained in:
2026-06-04 16:39:30 +08:00
parent ae455ea21c
commit b40434018a
6 changed files with 85 additions and 22 deletions
@@ -62,6 +62,7 @@ const SOHU_ORIGIN = 'https://mp.sohu.com'
const SOHU_MANAGE_URL = `${SOHU_ORIGIN}/mpfe/v4/contentManagement/first/page?newsType=1`
const SOHU_PUBLISH_URL = `${SOHU_ORIGIN}/mpbp/bp/news/v4/news/publish/v2`
const SOHU_DRAFT_URL = `${SOHU_ORIGIN}/mpbp/bp/news/v4/news/draft/v2`
const SOHU_NOT_LOGGED_IN_MESSAGE = '搜狐号账号登录态已失效,请重新登录搜狐号后再重试。'
function stringId(value: unknown): string {
if (typeof value === 'number') {
@@ -296,7 +297,7 @@ function failureResult(
summary: '搜狐号登录态失效,无法执行发布。',
error: {
code: 'sohuhao_not_logged_in',
message,
message: SOHU_NOT_LOGGED_IN_MESSAGE,
},
}
}
+44 -15
View File
@@ -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) => {