// src/main/ipc/meeting-mode-handlers.ts // Phase 14: Meeting Mode IPC 핸들러 import { ipcMain } from 'electron' import { IPC_CHANNELS } from '@shared/ipc-channels' import { ErrorCode, ipcSuccess, ipcError } from '@shared/errors' import { getMeetingModeService } from '../services/MeetingModeService' import { getLogger } from '../services/LoggerService' import type { MeetingAddMemoParams, MeetingGetSessionsParams, MeetingGetSessionParams, MeetingDeleteSessionParams, MeetingExportParams, } from '@shared/types' const logger = getLogger('meeting-mode-handlers') export function registerMeetingModeHandlers(): void { const ch = IPC_CHANNELS.MEETING_MODE ipcMain.handle(ch.START_RECORDING, async () => { try { const result = await getMeetingModeService().startRecording() return ipcSuccess(result) } catch (err) { logger.error(`startRecording 실패: ${err instanceof Error ? err.message : String(err)}`) return ipcError(ErrorCode.MeetingAlreadyRecording, err instanceof Error ? err.message : String(err)) } }) ipcMain.handle(ch.STOP_RECORDING, async () => { try { await getMeetingModeService().stopRecording() return ipcSuccess(undefined) } catch (err) { logger.error(`stopRecording 실패: ${err instanceof Error ? err.message : String(err)}`) return ipcError(ErrorCode.MeetingNotRecording, err instanceof Error ? err.message : String(err)) } }) ipcMain.handle(ch.ADD_MEMO, async (_event, params: MeetingAddMemoParams) => { try { const memo = await getMeetingModeService().addMemo(params.content) return ipcSuccess(memo) } catch (err) { logger.error(`addMemo 실패: ${err instanceof Error ? err.message : String(err)}`) return ipcError(ErrorCode.MeetingNotRecording, err instanceof Error ? err.message : String(err)) } }) ipcMain.handle(ch.GET_STATE, () => { try { return ipcSuccess(getMeetingModeService().getStateInfo()) } catch (err) { return ipcError(ErrorCode.UnknownError, err instanceof Error ? err.message : String(err)) } }) ipcMain.handle(ch.GET_SESSIONS, (_event, params: MeetingGetSessionsParams) => { try { return ipcSuccess(getMeetingModeService().getSessions(params.page, params.pageSize)) } catch (err) { return ipcError(ErrorCode.UnknownError, err instanceof Error ? err.message : String(err)) } }) ipcMain.handle(ch.GET_SESSION, (_event, params: MeetingGetSessionParams) => { try { return ipcSuccess(getMeetingModeService().getSession(params.sessionId)) } catch (err) { return ipcError(ErrorCode.MeetingSessionNotFound, err instanceof Error ? err.message : String(err)) } }) ipcMain.handle(ch.DELETE_SESSION, (_event, params: MeetingDeleteSessionParams) => { try { getMeetingModeService().deleteSession(params.sessionId) return ipcSuccess(undefined) } catch (err) { return ipcError(ErrorCode.MeetingSessionNotFound, err instanceof Error ? err.message : String(err)) } }) ipcMain.handle(ch.UPDATE_TITLE, (_event, params: { sessionId: string; title: string }) => { try { getMeetingModeService().updateTitle(params.sessionId, params.title) return ipcSuccess(undefined) } catch (err) { return ipcError(ErrorCode.MeetingSessionNotFound, err instanceof Error ? err.message : String(err)) } }) ipcMain.handle(ch.EXPORT_PDF, async (_event, params: MeetingExportParams) => { try { const filePath = await getMeetingModeService().exportPdf(params.sessionId) return ipcSuccess(filePath) } catch (err) { logger.error(`exportPdf 실패: ${err instanceof Error ? err.message : String(err)}`) return ipcError(ErrorCode.MeetingPdfFailed, err instanceof Error ? err.message : String(err)) } }) ipcMain.handle(ch.EXPORT_MARKDOWN, async (_event, params: MeetingExportParams) => { try { const filePath = await getMeetingModeService().exportMarkdown(params.sessionId) return ipcSuccess(filePath) } catch (err) { logger.error(`exportMarkdown 실패: ${err instanceof Error ? err.message : String(err)}`) return ipcError(ErrorCode.MeetingExportFailed, err instanceof Error ? err.message : String(err)) } }) logger.info('Meeting Mode IPC handlers registered') }