import { RuntimeOptionApplyResult, RuntimeOptionId, RuntimeOptionValue, } from "../../types"; export interface RuntimeOptionsManagerLike { setOptionValue: ( id: RuntimeOptionId, value: RuntimeOptionValue, ) => RuntimeOptionApplyResult; cycleOption: ( id: RuntimeOptionId, direction: 1 | -1, ) => RuntimeOptionApplyResult; } export function applyRuntimeOptionResultRuntimeService( result: RuntimeOptionApplyResult, showMpvOsd: (text: string) => void, ): RuntimeOptionApplyResult { if (result.ok && result.osdMessage) { showMpvOsd(result.osdMessage); } return result; } export function setRuntimeOptionFromIpcRuntimeService( manager: RuntimeOptionsManagerLike | null, id: RuntimeOptionId, value: RuntimeOptionValue, showMpvOsd: (text: string) => void, ): RuntimeOptionApplyResult { if (!manager) { return { ok: false, error: "Runtime options manager unavailable" }; } const result = applyRuntimeOptionResultRuntimeService( manager.setOptionValue(id, value), showMpvOsd, ); if (!result.ok && result.error) { showMpvOsd(result.error); } return result; } export function cycleRuntimeOptionFromIpcRuntimeService( manager: RuntimeOptionsManagerLike | null, id: RuntimeOptionId, direction: 1 | -1, showMpvOsd: (text: string) => void, ): RuntimeOptionApplyResult { if (!manager) { return { ok: false, error: "Runtime options manager unavailable" }; } const result = applyRuntimeOptionResultRuntimeService( manager.cycleOption(id, direction), showMpvOsd, ); if (!result.ok && result.error) { showMpvOsd(result.error); } return result; }