mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-02-28 06:22:45 -08:00
refactor: extract runtime option ipc helpers
This commit is contained in:
53
src/core/services/runtime-options-runtime-service.test.ts
Normal file
53
src/core/services/runtime-options-runtime-service.test.ts
Normal file
@@ -0,0 +1,53 @@
|
||||
import test from "node:test";
|
||||
import assert from "node:assert/strict";
|
||||
import {
|
||||
applyRuntimeOptionResultRuntimeService,
|
||||
cycleRuntimeOptionFromIpcRuntimeService,
|
||||
setRuntimeOptionFromIpcRuntimeService,
|
||||
} from "./runtime-options-runtime-service";
|
||||
|
||||
test("applyRuntimeOptionResultRuntimeService emits success OSD message", () => {
|
||||
const osd: string[] = [];
|
||||
const result = applyRuntimeOptionResultRuntimeService(
|
||||
{ ok: true, osdMessage: "Updated" },
|
||||
(text) => {
|
||||
osd.push(text);
|
||||
},
|
||||
);
|
||||
|
||||
assert.equal(result.ok, true);
|
||||
assert.deepEqual(osd, ["Updated"]);
|
||||
});
|
||||
|
||||
test("setRuntimeOptionFromIpcRuntimeService returns unavailable when manager missing", () => {
|
||||
const osd: string[] = [];
|
||||
const result = setRuntimeOptionFromIpcRuntimeService(
|
||||
null,
|
||||
"anki.autoUpdateNewCards",
|
||||
true,
|
||||
(text) => {
|
||||
osd.push(text);
|
||||
},
|
||||
);
|
||||
assert.equal(result.ok, false);
|
||||
assert.equal(result.error, "Runtime options manager unavailable");
|
||||
assert.deepEqual(osd, []);
|
||||
});
|
||||
|
||||
test("cycleRuntimeOptionFromIpcRuntimeService reports errors once", () => {
|
||||
const osd: string[] = [];
|
||||
const result = cycleRuntimeOptionFromIpcRuntimeService(
|
||||
{
|
||||
setOptionValue: () => ({ ok: true }),
|
||||
cycleOption: () => ({ ok: false, error: "bad option" }),
|
||||
},
|
||||
"anki.kikuFieldGrouping",
|
||||
1,
|
||||
(text) => {
|
||||
osd.push(text);
|
||||
},
|
||||
);
|
||||
assert.equal(result.ok, false);
|
||||
assert.equal(result.error, "bad option");
|
||||
assert.deepEqual(osd, ["bad option"]);
|
||||
});
|
||||
64
src/core/services/runtime-options-runtime-service.ts
Normal file
64
src/core/services/runtime-options-runtime-service.ts
Normal file
@@ -0,0 +1,64 @@
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user