feat(desktop): move dictionary entries in and out as files

Users could only rebuild their spoken-word dictionary entry by entry. Import
and export now round-trip the whole list, reporting duplicate and invalid
entries per row instead of failing the batch, so a dictionary survives a
reinstall or a move to another machine.
This commit is contained in:
Yun Chan 2026-09-16 23:23:30 +09:00
parent 7953706142
commit 911c9f0229
5 changed files with 625 additions and 15 deletions

View file

@ -69,6 +69,9 @@ import type {
DictionaryUpdateParams,
DictionaryDeleteParams,
DictionarySearchParams,
DictionaryImportParams,
DictionaryImportResult,
DictionaryExportParams,
StatsSummary,
PermissionStatus,
// Phase 10
@ -156,7 +159,6 @@ import type {
MeetingDeleteSessionParams,
MeetingExportParams,
MeetingProcessingProgress,
CaptionSegment,
MeetingDocument,
MeetingDocTemplate,
MeetingGenerateDocParams,
@ -165,7 +167,7 @@ import type {
MeetingGetDocsParams,
MeetingUpdateTranscriptParams,
MeetingExportDocParams,
MeetingExportFormat,
MeetingExportTranscriptParams,
MeetingDocGeneratingProgress,
CreateMeetingDocTemplateParams,
UpdateMeetingDocTemplateParams,
@ -394,7 +396,11 @@ const electronAPI = {
delete: (params: DictionaryDeleteParams) =>
invoke<void>(IPC_CHANNELS.DICTIONARY.DELETE, params),
search: (params: DictionarySearchParams) =>
invoke<DictionaryPage>(IPC_CHANNELS.DICTIONARY.SEARCH, params)
invoke<DictionaryPage>(IPC_CHANNELS.DICTIONARY.SEARCH, params),
import: (params: DictionaryImportParams) =>
invoke<DictionaryImportResult>(IPC_CHANNELS.DICTIONARY.IMPORT, params),
export: (params: DictionaryExportParams) =>
invoke<string>(IPC_CHANNELS.DICTIONARY.EXPORT, params)
},
// ── Stats ──────────────────────────────────────────────
@ -714,7 +720,7 @@ const electronAPI = {
invoke<void>(IPC_CHANNELS.MEETING_MODE.DELETE_DOCUMENT, params),
exportDocument: (params: MeetingExportDocParams) =>
invoke<string>(IPC_CHANNELS.MEETING_MODE.EXPORT_DOCUMENT, params),
exportTranscript: (params: { sessionId: string; format: MeetingExportFormat }) =>
exportTranscript: (params: MeetingExportTranscriptParams) =>
invoke<string>(IPC_CHANNELS.MEETING_MODE.EXPORT_TRANSCRIPT, params),
editSegment: (params: { sessionId: string; segmentId: string; text: string }) =>
invoke<void>(IPC_CHANNELS.MEETING_MODE.EDIT_SEGMENT, params),