返回 oh-my-ppt
index.ts
根目录 / src / main / ipc / index.ts
1 import { BrowserWindow } from 'electron'
2 import type { PPTDatabase } from '../db/database'
3 import type { AgentManager } from '../agent-runtime/agent'
4 import { createIpcContext } from './context'
5 import { registerSessionHandlers } from '../session/handlers'
6 import { registerSessionImportHandlers } from '../session/import-handlers'
7 import { registerSessionSaveAsNewHandler } from '../session/save-as-new'
8 import { registerAssetHandlers, registerLocalAssetProtocol } from '../io/assets-handlers'
9 import { registerThumbnailHandlers } from '../io/thumbnails/handlers'
10 import { registerGenerationHandlers } from '../generation/handlers'
11 import { createGenerationContext } from '../generation/context'
12 import { registerExportHandlers } from '../io/export-handlers'
13 import { registerStyleHandlers } from '../styles/handlers'
14 import { registerStylePreviewHandlers } from '../styles/preview/handlers'
15 import { registerFontHandlers } from '../presentation/fonts/handlers'
16 import { registerSettingsHandlers } from '../config/settings-handlers'
17 import { registerImageModelHandlers } from '../config/image-model-handlers'
18 import { registerPreviewHandlers } from '../session/preview-handlers'
19 import { registerPageManagementHandlers } from '../session/page-management-handlers'
20 import { registerPageMergeHandlers } from '../session/page-merge-handlers'
21 import { registerFileHandlers } from '../io/file-handlers'
22 import { registerChartDataImportHandlers, registerEditorHandlers } from '../element-editor'
23 import { registerDocumentParseHandlers } from '../io/document-parse-handlers'
24 import { registerPptxImportHandlers } from '../io/pptx-import/handlers'
25 import { registerHistoryHandlers } from '../history/handlers'
26 import { registerPresentationHandlers } from '../session/presentation-handlers'
27 import { registerSpeechHandlers } from '../speech/handlers'
28 import { registerThinkingHandlers } from './thinking/thinking-handlers'
29 import { registerTemplateHandlers } from '../templates/template-handlers'
30 import { registerImageGenerationHandlers } from '../image-generation/handlers'
31 import { registerImageGenerationHistoryHandlers } from '../image-generation/handlers-history'
32 import { registerHtmlEditorHandlers } from '../html-editor/html-editor-handlers'
33 import { registerHtmlEditorAiHandlers } from '../html-editor/html-editor-ai-handlers'
34 import { JobCoordinator, TypedEventBus } from '../agent-runtime'
35 import { RuntimeEventBridge } from './runtime/event-bridge'
36 import { translateLegacyRuntimeEvent } from './runtime/event-contract'
37 import { DbModelUsageRecorder } from './runtime/model-usage-recorder'
38 import { registerDeckEditJobHandlers } from '../edit-jobs/deck-edit-job-service'
39 import { registerPageEditJobHandlers } from '../edit-jobs/page-edit-job-service'
40 import { registerPageBeautifyJobHandlers } from '../edit-jobs/page-beautify-job-service'
41 import { registerStyleSwitchJobHandlers } from '../edit-jobs/style-switch-job-service'
42 import { registerMasterHandlers } from '../session/master-handlers'
43
44 export { registerLocalAssetProtocol }
45
46 export function setupIPC(
47 mainWindow: BrowserWindow,
48 db: PPTDatabase,
49 agentManager: AgentManager
50 ): void {
51 const runtimeEvents = new TypedEventBus({
52 onListenerError: (error, event) => {
53 console.warn('[runtime:event] listener failed', {
54 type: event.type,
55 jobId: event.jobId,
56 message: error instanceof Error ? error.message : String(error)
57 })
58 }
59 })
60 const runtimeEventBridge = new RuntimeEventBridge(runtimeEvents)
61 runtimeEventBridge.registerWindowBroadcast({
62 subscriberId: 'legacy-generate-chunk-broadcast',
63 windows: () => BrowserWindow.getAllWindows(),
64 translate: translateLegacyRuntimeEvent,
65 onSendError: ({ windowId, error }) => {
66 console.warn('[generate:chunk] send failed', {
67 windowId,
68 message: error instanceof Error ? error.message : String(error)
69 })
70 }
71 })
72 const context = createIpcContext(mainWindow, db, agentManager, runtimeEvents, {
73 recorder: new DbModelUsageRecorder(db)
74 })
75 const jobCoordinator = new JobCoordinator()
76 const generationContext = createGenerationContext(context)
77
78 registerSessionHandlers(context)
79 registerSessionSaveAsNewHandler(context)
80 registerSessionImportHandlers(context)
81 registerMasterHandlers(context)
82 registerPageManagementHandlers(context)
83 registerPageMergeHandlers(context)
84 registerAssetHandlers(context)
85 registerThumbnailHandlers(context)
86 const pageEditJobs = registerPageEditJobHandlers(context, jobCoordinator)
87 registerPageBeautifyJobHandlers(context, jobCoordinator)
88 const deckEditJobs = registerDeckEditJobHandlers(context, jobCoordinator)
89 const styleSwitchJobs = registerStyleSwitchJobHandlers(context, jobCoordinator)
90 registerGenerationHandlers(
91 generationContext,
92 jobCoordinator,
93 styleSwitchJobs,
94 pageEditJobs,
95 deckEditJobs
96 )
97 registerExportHandlers(context)
98 registerStyleHandlers(context)
99 registerStylePreviewHandlers(context)
100 registerFontHandlers()
101 registerSettingsHandlers(context)
102 registerImageModelHandlers(context)
103 registerPreviewHandlers(context)
104 registerFileHandlers(context)
105 registerEditorHandlers(context)
106 registerChartDataImportHandlers(context)
107 registerDocumentParseHandlers(context)
108 registerPptxImportHandlers(context)
109 registerHistoryHandlers(context)
110 registerPresentationHandlers(context)
111 registerSpeechHandlers(context)
112 registerThinkingHandlers(context)
113 registerTemplateHandlers(context)
114 registerImageGenerationHandlers(context, jobCoordinator, runtimeEvents)
115 registerImageGenerationHistoryHandlers(context)
116 registerHtmlEditorHandlers(context)
117 registerHtmlEditorAiHandlers(context)
118 }
119
119 lines TYPESCRIPT