返回 oh-my-ppt
import-handlers.ts
根目录 / src / main / session / import-handlers.ts
1 import { BrowserWindow, dialog, ipcMain, type WebContents } from 'electron'
2 import log from 'electron-log/main.js'
3 import type { IpcContext } from '../ipc/context'
4 import { importSessionFile } from '../session-import/session-importer'
5
6 export function registerSessionImportHandlers(ctx: IpcContext): void {
7 const { mainWindow } = ctx
8
9 const resolveOwnerWindow = (sender: WebContents): BrowserWindow =>
10 BrowserWindow.fromWebContents(sender) ?? BrowserWindow.getFocusedWindow() ?? mainWindow
11
12 ipcMain.handle('session:importFile', async (event) => {
13 const ownerWindow = resolveOwnerWindow(event.sender)
14 log.info('[session:importFile] open dialog')
15 const openResult = await dialog.showOpenDialog(ownerWindow, {
16 title: '导入会话文件',
17 buttonLabel: '导入',
18 properties: ['openFile'],
19 filters: [
20 { name: 'OhMyPPT 会话文件', extensions: ['zip', 'exe'] },
21 { name: '所有文件', extensions: ['*'] }
22 ]
23 })
24
25 if (openResult.canceled || openResult.filePaths.length === 0) {
26 log.info('[session:importFile] cancelled')
27 return { success: false, cancelled: true }
28 }
29
30 try {
31 log.info('[session:importFile] selected file', {
32 filePath: openResult.filePaths[0]
33 })
34 return await importSessionFile(ctx, openResult.filePaths[0])
35 } catch (error) {
36 log.error('[session:importFile] failed', {
37 filePath: openResult.filePaths[0],
38 message: error instanceof Error ? error.message : String(error)
39 })
40 throw error
41 }
42 })
43 }
44
44 lines TYPESCRIPT