type AnkiIntegrationLike = { refreshKnownWordCache: () => Promise; }; export function createUpdateLastCardFromClipboardHandler(deps: { getAnkiIntegration: () => TAnki; readClipboardText: () => string; showMpvOsd: (text: string) => void; updateLastCardFromClipboardCore: (options: { ankiIntegration: TAnki; readClipboardText: () => string; showMpvOsd: (text: string) => void; }) => Promise; }) { return async (): Promise => { await deps.updateLastCardFromClipboardCore({ ankiIntegration: deps.getAnkiIntegration(), readClipboardText: deps.readClipboardText, showMpvOsd: deps.showMpvOsd, }); }; } export function createRefreshKnownWordCacheHandler(deps: { getAnkiIntegration: () => AnkiIntegrationLike | null; missingIntegrationMessage: string; }) { return async (): Promise => { const anki = deps.getAnkiIntegration(); if (!anki) { throw new Error(deps.missingIntegrationMessage); } await anki.refreshKnownWordCache(); }; } export function createTriggerFieldGroupingHandler(deps: { getAnkiIntegration: () => TAnki; showMpvOsd: (text: string) => void; triggerFieldGroupingCore: (options: { ankiIntegration: TAnki; showMpvOsd: (text: string) => void; }) => Promise; }) { return async (): Promise => { await deps.triggerFieldGroupingCore({ ankiIntegration: deps.getAnkiIntegration(), showMpvOsd: deps.showMpvOsd, }); }; } export function createMarkLastCardAsAudioCardHandler(deps: { getAnkiIntegration: () => TAnki; showMpvOsd: (text: string) => void; markLastCardAsAudioCardCore: (options: { ankiIntegration: TAnki; showMpvOsd: (text: string) => void; }) => Promise; }) { return async (): Promise => { await deps.markLastCardAsAudioCardCore({ ankiIntegration: deps.getAnkiIntegration(), showMpvOsd: deps.showMpvOsd, }); }; } export function createMineSentenceCardHandler(deps: { getAnkiIntegration: () => TAnki; getMpvClient: () => TMpv; showMpvOsd: (text: string) => void; mineSentenceCardCore: (options: { ankiIntegration: TAnki; mpvClient: TMpv; showMpvOsd: (text: string) => void; }) => Promise; recordCardsMined: (count: number, noteIds?: number[]) => void; }) { return async (): Promise => { const created = await deps.mineSentenceCardCore({ ankiIntegration: deps.getAnkiIntegration(), mpvClient: deps.getMpvClient(), showMpvOsd: deps.showMpvOsd, }); if (created) { deps.recordCardsMined(1); } }; }