mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-03-30 06:12:06 -07:00
* fix: harden preload argv parsing for popup windows * fix: align youtube playback with shared overlay startup * fix: unwrap mpv youtube streams for anki media mining * docs: update docs for youtube subtitle and mining flow * refactor: unify cli and runtime wiring for startup and youtube flow * feat: update subtitle sidebar overlay behavior * chore: add shared log-file source for diagnostics * fix(ci): add changelog fragment for immersion changes * fix: address CodeRabbit review feedback * fix: persist canonical title from youtube metadata * style: format stats library tab * fix: address latest review feedback * style: format stats library files * test: stub launcher youtube deps in CI * test: isolate launcher youtube flow deps * test: stub launcher youtube deps in failing case * test: force x11 backend in launcher ci harness * test: address latest review feedback * fix(launcher): preserve user YouTube ytdl raw options * docs(backlog): update task tracking notes * fix(immersion): special-case youtube media paths in runtime and tracking * feat(stats): improve YouTube media metadata and picker key handling * fix(ci): format stats media library hook * fix: address latest CodeRabbit review items * docs: update youtube release notes and docs * feat: auto-load youtube subtitles before manual picker * fix: restore app-owned youtube subtitle flow * docs: update youtube playback docs and config copy * refactor: remove legacy youtube launcher mode plumbing * fix: refine youtube subtitle startup binding * docs: clarify youtube subtitle startup behavior * fix: address PR #31 latest review follow-ups * fix: address PR #31 follow-up review comments * test: harden youtube picker test harness * udpate backlog * fix: add timeout to youtube metadata probe * docs: refresh youtube and stats docs * update backlog * update backlog * chore: release v0.9.0
52 lines
2.1 KiB
TypeScript
52 lines
2.1 KiB
TypeScript
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<unknown>;
|
|
};
|
|
|
|
export interface MpvCommandFromIpcRuntimeDeps {
|
|
triggerSubsyncFromConfig: () => void;
|
|
openRuntimeOptionsPalette: () => void;
|
|
openYoutubeTrackPicker: () => void | Promise<void>;
|
|
cycleRuntimeOption: (id: RuntimeOptionId, direction: 1 | -1) => RuntimeOptionApplyResult;
|
|
showMpvOsd: (text: string) => void;
|
|
replayCurrentSubtitle: () => void;
|
|
playNextSubtitle: () => void;
|
|
shiftSubDelayToAdjacentSubtitle: (direction: 'next' | 'previous') => Promise<void>;
|
|
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,
|
|
}),
|
|
);
|
|
}
|