mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-03-26 12:11:26 -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
101 lines
4.6 KiB
TypeScript
101 lines
4.6 KiB
TypeScript
import type { CliArgs } from '../../cli/args';
|
|
import type { CliCommandContextFactoryDeps } from './cli-command-context';
|
|
|
|
export function createBuildCliCommandContextDepsHandler(deps: {
|
|
setLogLevel?: (level: NonNullable<CliArgs['logLevel']>) => void;
|
|
getSocketPath: () => string;
|
|
setSocketPath: (socketPath: string) => void;
|
|
getMpvClient: CliCommandContextFactoryDeps['getMpvClient'];
|
|
showOsd: (text: string) => void;
|
|
texthookerService: CliCommandContextFactoryDeps['texthookerService'];
|
|
getTexthookerPort: () => number;
|
|
setTexthookerPort: (port: number) => void;
|
|
shouldOpenBrowser: () => boolean;
|
|
openExternal: (url: string) => Promise<unknown>;
|
|
logBrowserOpenError: (url: string, error: unknown) => void;
|
|
isOverlayInitialized: () => boolean;
|
|
initializeOverlay: () => void;
|
|
toggleVisibleOverlay: () => void;
|
|
openFirstRunSetup: () => void;
|
|
setVisibleOverlay: (visible: boolean) => void;
|
|
copyCurrentSubtitle: () => void;
|
|
startPendingMultiCopy: (timeoutMs: number) => void;
|
|
mineSentenceCard: () => Promise<void>;
|
|
startPendingMineSentenceMultiple: (timeoutMs: number) => void;
|
|
updateLastCardFromClipboard: () => Promise<void>;
|
|
refreshKnownWordCache: () => Promise<void>;
|
|
triggerFieldGrouping: () => Promise<void>;
|
|
triggerSubsyncFromConfig: () => Promise<void>;
|
|
markLastCardAsAudioCard: () => Promise<void>;
|
|
getAnilistStatus: CliCommandContextFactoryDeps['getAnilistStatus'];
|
|
clearAnilistToken: CliCommandContextFactoryDeps['clearAnilistToken'];
|
|
openAnilistSetup: CliCommandContextFactoryDeps['openAnilistSetup'];
|
|
openJellyfinSetup: CliCommandContextFactoryDeps['openJellyfinSetup'];
|
|
getAnilistQueueStatus: CliCommandContextFactoryDeps['getAnilistQueueStatus'];
|
|
retryAnilistQueueNow: CliCommandContextFactoryDeps['retryAnilistQueueNow'];
|
|
generateCharacterDictionary: CliCommandContextFactoryDeps['generateCharacterDictionary'];
|
|
runStatsCommand: CliCommandContextFactoryDeps['runStatsCommand'];
|
|
runJellyfinCommand: (args: CliArgs) => Promise<void>;
|
|
runYoutubePlaybackFlow: CliCommandContextFactoryDeps['runYoutubePlaybackFlow'];
|
|
openYomitanSettings: () => void;
|
|
cycleSecondarySubMode: () => void;
|
|
openRuntimeOptionsPalette: () => void;
|
|
printHelp: () => void;
|
|
stopApp: () => void;
|
|
hasMainWindow: () => boolean;
|
|
getMultiCopyTimeoutMs: () => number;
|
|
schedule: (fn: () => void, delayMs: number) => ReturnType<typeof setTimeout>;
|
|
logInfo: (message: string) => void;
|
|
logWarn: (message: string) => void;
|
|
logError: (message: string, err: unknown) => void;
|
|
}) {
|
|
return (): CliCommandContextFactoryDeps => ({
|
|
setLogLevel: deps.setLogLevel,
|
|
getSocketPath: deps.getSocketPath,
|
|
setSocketPath: deps.setSocketPath,
|
|
getMpvClient: deps.getMpvClient,
|
|
showOsd: deps.showOsd,
|
|
texthookerService: deps.texthookerService,
|
|
getTexthookerPort: deps.getTexthookerPort,
|
|
setTexthookerPort: deps.setTexthookerPort,
|
|
shouldOpenBrowser: deps.shouldOpenBrowser,
|
|
openExternal: deps.openExternal,
|
|
logBrowserOpenError: deps.logBrowserOpenError,
|
|
isOverlayInitialized: deps.isOverlayInitialized,
|
|
initializeOverlay: deps.initializeOverlay,
|
|
toggleVisibleOverlay: deps.toggleVisibleOverlay,
|
|
openFirstRunSetup: deps.openFirstRunSetup,
|
|
setVisibleOverlay: deps.setVisibleOverlay,
|
|
copyCurrentSubtitle: deps.copyCurrentSubtitle,
|
|
startPendingMultiCopy: deps.startPendingMultiCopy,
|
|
mineSentenceCard: deps.mineSentenceCard,
|
|
startPendingMineSentenceMultiple: deps.startPendingMineSentenceMultiple,
|
|
updateLastCardFromClipboard: deps.updateLastCardFromClipboard,
|
|
refreshKnownWordCache: deps.refreshKnownWordCache,
|
|
triggerFieldGrouping: deps.triggerFieldGrouping,
|
|
triggerSubsyncFromConfig: deps.triggerSubsyncFromConfig,
|
|
markLastCardAsAudioCard: deps.markLastCardAsAudioCard,
|
|
getAnilistStatus: deps.getAnilistStatus,
|
|
clearAnilistToken: deps.clearAnilistToken,
|
|
openAnilistSetup: deps.openAnilistSetup,
|
|
openJellyfinSetup: deps.openJellyfinSetup,
|
|
getAnilistQueueStatus: deps.getAnilistQueueStatus,
|
|
retryAnilistQueueNow: deps.retryAnilistQueueNow,
|
|
generateCharacterDictionary: deps.generateCharacterDictionary,
|
|
runStatsCommand: deps.runStatsCommand,
|
|
runJellyfinCommand: deps.runJellyfinCommand,
|
|
runYoutubePlaybackFlow: deps.runYoutubePlaybackFlow,
|
|
openYomitanSettings: deps.openYomitanSettings,
|
|
cycleSecondarySubMode: deps.cycleSecondarySubMode,
|
|
openRuntimeOptionsPalette: deps.openRuntimeOptionsPalette,
|
|
printHelp: deps.printHelp,
|
|
stopApp: deps.stopApp,
|
|
hasMainWindow: deps.hasMainWindow,
|
|
getMultiCopyTimeoutMs: deps.getMultiCopyTimeoutMs,
|
|
schedule: deps.schedule,
|
|
logInfo: deps.logInfo,
|
|
logWarn: deps.logWarn,
|
|
logError: deps.logError,
|
|
});
|
|
}
|