From acab319589b6d41534914c5ca85633dff5418ee1 Mon Sep 17 00:00:00 2001 From: Yun Chan Date: Wed, 8 Apr 2026 08:51:24 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20MeetingModePage=20=EB=A0=8C=EB=8D=94?= =?UTF-8?q?=EB=A7=81=20=ED=81=AC=EB=9E=98=EC=8B=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit d3roPalette.indicator → d3roPalette.tag, d3roTypo.reading → d3roTypo.body, PhosphorText variant="reading" → "body", ScreenPanel sx prop 제거. bootstrap.ts require() → dynamic import() 변환. --- src/main/bootstrap.ts | 20 +++++++++++++------- src/renderer/pages/MeetingModePage.tsx | 24 +++++++++++++----------- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/main/bootstrap.ts b/src/main/bootstrap.ts index 9dbaedb..2760d09 100644 --- a/src/main/bootstrap.ts +++ b/src/main/bootstrap.ts @@ -275,13 +275,19 @@ async function initMeetingSummaryWiring(): Promise { captionService.on('session-saved', (summary: { sessionId: string }) => { // 회의 모드가 CaptionService를 사용 중이면 MeetingSummary 자동 생성 건너뛰기 - const { getMeetingModeService } = require('./services/MeetingModeService') as { getMeetingModeService: () => { isMeetingModeActive: () => boolean } } - if (getMeetingModeService().isMeetingModeActive()) { - logger.info('Skipping auto meeting summary: meeting mode active') - return - } - summaryService.onCaptionSessionSaved(summary).catch((err) => { - logger.warn('Auto meeting summary failed:', err) + import('./services/MeetingModeService').then(({ getMeetingModeService }) => { + if (getMeetingModeService().isMeetingModeActive()) { + logger.info('Skipping auto meeting summary: meeting mode active') + return + } + summaryService.onCaptionSessionSaved(summary).catch((err) => { + logger.warn('Auto meeting summary failed:', err) + }) + }).catch(() => { + // MeetingModeService 로드 실패 시 기본 동작 수행 + summaryService.onCaptionSessionSaved(summary).catch((err) => { + logger.warn('Auto meeting summary failed:', err) + }) }) }) } catch (err) { diff --git a/src/renderer/pages/MeetingModePage.tsx b/src/renderer/pages/MeetingModePage.tsx index 8178b10..9d4e854 100644 --- a/src/renderer/pages/MeetingModePage.tsx +++ b/src/renderer/pages/MeetingModePage.tsx @@ -304,7 +304,7 @@ export function MeetingModePage(): React.ReactElement { {/* 상단 바 */} - + {formatTime(elapsedMs)} @@ -333,7 +333,8 @@ export function MeetingModePage(): React.ReactElement { {/* 메인 패널: 전사 + 메모 */} {/* 좌: 실시간 전사 */} - + + {t('meeting.transcript')} @@ -343,7 +344,7 @@ export function MeetingModePage(): React.ReactElement { flex: 1, overflow: 'auto', fontFamily: d3roFontMono, - fontSize: d3roTypo.reading.fontSize, + fontSize: d3roTypo.body.size, color: d3roPalette.text.primary, lineHeight: 1.8, }} @@ -363,6 +364,7 @@ export function MeetingModePage(): React.ReactElement { ))} + {/* 우: 메모 입력 */} @@ -383,7 +385,7 @@ export function MeetingModePage(): React.ReactElement { {formatTime(memo.timestampMs)} - + {memo.content} @@ -467,7 +469,7 @@ export function MeetingModePage(): React.ReactElement { {/* 요약 */} {t('meeting.summary')} - + {detail.minutes.summary} @@ -477,7 +479,7 @@ export function MeetingModePage(): React.ReactElement { {t('meeting.decisions')} {detail.minutes.decisions.map((d, i) => ( - + {'• '}{d} ))} @@ -489,7 +491,7 @@ export function MeetingModePage(): React.ReactElement { {t('meeting.actionItems')} {detail.minutes.actionItems.map((item, i) => ( - + {'☐ '}{item.assignee ? `${item.assignee}: ` : ''}{item.task} {item.deadline ? ` (${item.deadline})` : ''} @@ -506,7 +508,7 @@ export function MeetingModePage(): React.ReactElement { {tl.time} - + {tl.type === 'memo' ? '📝 ' : ''}{tl.content} @@ -519,10 +521,10 @@ export function MeetingModePage(): React.ReactElement { {/* 에러 메시지 */} {detail.status === 'error' && detail.errorMessage && ( - + {t('meeting.error')} - {detail.errorMessage} + {detail.errorMessage} )} @@ -535,7 +537,7 @@ export function MeetingModePage(): React.ReactElement { {formatTime(m.timestampMs)} - {m.content} + {m.content} ))}