import type { RuntimeOptionApplyResult, RuntimeOptionId } from '../types'; import { handleMpvCommandFromIpc } from '../core/services'; import { createMpvCommandRuntimeServiceDeps } from './dependencies'; import { SPECIAL_COMMANDS } from '../config'; import { resolveProxyCommandOsdRuntime } from './runtime/mpv-proxy-osd'; type MpvPropertyClientLike = { connected: boolean; requestProperty: (name: string) => Promise; }; export interface MpvCommandFromIpcRuntimeDeps { triggerSubsyncFromConfig: () => void; openRuntimeOptionsPalette: () => void; openYoutubeTrackPicker: () => void | Promise; cycleRuntimeOption: (id: RuntimeOptionId, direction: 1 | -1) => RuntimeOptionApplyResult; showMpvOsd: (text: string) => void; replayCurrentSubtitle: () => void; playNextSubtitle: () => void; shiftSubDelayToAdjacentSubtitle: (direction: 'next' | 'previous') => Promise; sendMpvCommand: (command: (string | number)[]) => void; getMpvClient: () => MpvPropertyClientLike | null; isMpvConnected: () => boolean; hasRuntimeOptionsManager: () => boolean; } export function handleMpvCommandFromIpcRuntime( command: (string | number)[], deps: MpvCommandFromIpcRuntimeDeps, ): void { handleMpvCommandFromIpc( command, createMpvCommandRuntimeServiceDeps({ specialCommands: SPECIAL_COMMANDS, triggerSubsyncFromConfig: deps.triggerSubsyncFromConfig, openRuntimeOptionsPalette: deps.openRuntimeOptionsPalette, openYoutubeTrackPicker: deps.openYoutubeTrackPicker, runtimeOptionsCycle: deps.cycleRuntimeOption, showMpvOsd: deps.showMpvOsd, mpvReplaySubtitle: deps.replayCurrentSubtitle, mpvPlayNextSubtitle: deps.playNextSubtitle, shiftSubDelayToAdjacentSubtitle: (direction) => deps.shiftSubDelayToAdjacentSubtitle(direction), mpvSendCommand: deps.sendMpvCommand, resolveProxyCommandOsd: (nextCommand) => resolveProxyCommandOsdRuntime(nextCommand, deps.getMpvClient), isMpvConnected: deps.isMpvConnected, hasRuntimeOptionsManager: deps.hasRuntimeOptionsManager, }), ); }