mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-02-27 18:22:41 -08:00
refactor: extract mpv render metrics runtime apply helper
This commit is contained in:
@@ -16,7 +16,7 @@
|
|||||||
"docs:build": "vitepress build docs",
|
"docs:build": "vitepress build docs",
|
||||||
"docs:preview": "vitepress preview docs --host 0.0.0.0 --port 4173 --strictPort",
|
"docs:preview": "vitepress preview docs --host 0.0.0.0 --port 4173 --strictPort",
|
||||||
"test:config": "pnpm run build && node --test dist/config/config.test.js",
|
"test:config": "pnpm run build && node --test dist/config/config.test.js",
|
||||||
"test:core": "pnpm run build && node --test dist/cli/args.test.js dist/cli/help.test.js dist/core/services/cli-command-service.test.js dist/core/services/numeric-shortcut-session-service.test.js dist/core/services/secondary-subtitle-service.test.js",
|
"test:core": "pnpm run build && node --test dist/cli/args.test.js dist/cli/help.test.js dist/core/services/cli-command-service.test.js dist/core/services/numeric-shortcut-session-service.test.js dist/core/services/secondary-subtitle-service.test.js dist/core/services/mpv-render-metrics-service.test.js",
|
||||||
"test:subtitle": "pnpm run build && node --test dist/subtitle/stages.test.js dist/subtitle/pipeline.test.js",
|
"test:subtitle": "pnpm run build && node --test dist/subtitle/stages.test.js dist/subtitle/pipeline.test.js",
|
||||||
"generate:config-example": "pnpm run build && node dist/generate-config-example.js",
|
"generate:config-example": "pnpm run build && node dist/generate-config-example.js",
|
||||||
"start": "pnpm run build && electron . --start",
|
"start": "pnpm run build && electron . --start",
|
||||||
|
|||||||
37
src/core/services/mpv-render-metrics-service.test.ts
Normal file
37
src/core/services/mpv-render-metrics-service.test.ts
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
import test from "node:test";
|
||||||
|
import assert from "node:assert/strict";
|
||||||
|
import { MpvSubtitleRenderMetrics } from "../../types";
|
||||||
|
import { applyMpvSubtitleRenderMetricsPatchService } from "./mpv-render-metrics-service";
|
||||||
|
|
||||||
|
const BASE: MpvSubtitleRenderMetrics = {
|
||||||
|
subPos: 100,
|
||||||
|
subFontSize: 38,
|
||||||
|
subScale: 1,
|
||||||
|
subMarginY: 34,
|
||||||
|
subMarginX: 19,
|
||||||
|
subFont: "sans-serif",
|
||||||
|
subSpacing: 0,
|
||||||
|
subBold: false,
|
||||||
|
subItalic: false,
|
||||||
|
subBorderSize: 2.5,
|
||||||
|
subShadowOffset: 0,
|
||||||
|
subAssOverride: "yes",
|
||||||
|
subScaleByWindow: true,
|
||||||
|
subUseMargins: true,
|
||||||
|
osdHeight: 720,
|
||||||
|
osdDimensions: null,
|
||||||
|
};
|
||||||
|
|
||||||
|
test("applyMpvSubtitleRenderMetricsPatchService returns unchanged on empty patch", () => {
|
||||||
|
const { next, changed } = applyMpvSubtitleRenderMetricsPatchService(BASE, {});
|
||||||
|
assert.equal(changed, false);
|
||||||
|
assert.deepEqual(next, BASE);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("applyMpvSubtitleRenderMetricsPatchService reports changed when patch modifies value", () => {
|
||||||
|
const { next, changed } = applyMpvSubtitleRenderMetricsPatchService(BASE, {
|
||||||
|
subPos: 95,
|
||||||
|
});
|
||||||
|
assert.equal(changed, true);
|
||||||
|
assert.equal(next.subPos, 95);
|
||||||
|
});
|
||||||
@@ -55,3 +55,28 @@ export function updateMpvSubtitleRenderMetricsService(
|
|||||||
osdDimensions: nextOsdDimensions,
|
osdDimensions: nextOsdDimensions,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function applyMpvSubtitleRenderMetricsPatchService(
|
||||||
|
current: MpvSubtitleRenderMetrics,
|
||||||
|
patch: Partial<MpvSubtitleRenderMetrics>,
|
||||||
|
): { next: MpvSubtitleRenderMetrics; changed: boolean } {
|
||||||
|
const next = updateMpvSubtitleRenderMetricsService(current, patch);
|
||||||
|
const changed =
|
||||||
|
next.subPos !== current.subPos ||
|
||||||
|
next.subFontSize !== current.subFontSize ||
|
||||||
|
next.subScale !== current.subScale ||
|
||||||
|
next.subMarginY !== current.subMarginY ||
|
||||||
|
next.subMarginX !== current.subMarginX ||
|
||||||
|
next.subFont !== current.subFont ||
|
||||||
|
next.subSpacing !== current.subSpacing ||
|
||||||
|
next.subBold !== current.subBold ||
|
||||||
|
next.subItalic !== current.subItalic ||
|
||||||
|
next.subBorderSize !== current.subBorderSize ||
|
||||||
|
next.subShadowOffset !== current.subShadowOffset ||
|
||||||
|
next.subAssOverride !== current.subAssOverride ||
|
||||||
|
next.subScaleByWindow !== current.subScaleByWindow ||
|
||||||
|
next.subUseMargins !== current.subUseMargins ||
|
||||||
|
next.osdHeight !== current.osdHeight ||
|
||||||
|
JSON.stringify(next.osdDimensions) !== JSON.stringify(current.osdDimensions);
|
||||||
|
return { next, changed };
|
||||||
|
}
|
||||||
|
|||||||
24
src/main.ts
24
src/main.ts
@@ -160,7 +160,7 @@ import {
|
|||||||
MpvIpcClient,
|
MpvIpcClient,
|
||||||
MPV_REQUEST_ID_SECONDARY_SUB_VISIBILITY,
|
MPV_REQUEST_ID_SECONDARY_SUB_VISIBILITY,
|
||||||
} from "./core/services/mpv-service";
|
} from "./core/services/mpv-service";
|
||||||
import { updateMpvSubtitleRenderMetricsService } from "./core/services/mpv-render-metrics-service";
|
import { applyMpvSubtitleRenderMetricsPatchService } from "./core/services/mpv-render-metrics-service";
|
||||||
import {
|
import {
|
||||||
handleMpvCommandFromIpcService,
|
handleMpvCommandFromIpcService,
|
||||||
} from "./core/services/ipc-command-service";
|
} from "./core/services/ipc-command-service";
|
||||||
@@ -636,30 +636,10 @@ function handleInitialArgs(): void {
|
|||||||
function updateMpvSubtitleRenderMetrics(
|
function updateMpvSubtitleRenderMetrics(
|
||||||
patch: Partial<MpvSubtitleRenderMetrics>,
|
patch: Partial<MpvSubtitleRenderMetrics>,
|
||||||
): void {
|
): void {
|
||||||
const next = updateMpvSubtitleRenderMetricsService(
|
const { next, changed } = applyMpvSubtitleRenderMetricsPatchService(
|
||||||
mpvSubtitleRenderMetrics,
|
mpvSubtitleRenderMetrics,
|
||||||
patch,
|
patch,
|
||||||
);
|
);
|
||||||
|
|
||||||
const changed =
|
|
||||||
next.subPos !== mpvSubtitleRenderMetrics.subPos ||
|
|
||||||
next.subFontSize !== mpvSubtitleRenderMetrics.subFontSize ||
|
|
||||||
next.subScale !== mpvSubtitleRenderMetrics.subScale ||
|
|
||||||
next.subMarginY !== mpvSubtitleRenderMetrics.subMarginY ||
|
|
||||||
next.subMarginX !== mpvSubtitleRenderMetrics.subMarginX ||
|
|
||||||
next.subFont !== mpvSubtitleRenderMetrics.subFont ||
|
|
||||||
next.subSpacing !== mpvSubtitleRenderMetrics.subSpacing ||
|
|
||||||
next.subBold !== mpvSubtitleRenderMetrics.subBold ||
|
|
||||||
next.subItalic !== mpvSubtitleRenderMetrics.subItalic ||
|
|
||||||
next.subBorderSize !== mpvSubtitleRenderMetrics.subBorderSize ||
|
|
||||||
next.subShadowOffset !== mpvSubtitleRenderMetrics.subShadowOffset ||
|
|
||||||
next.subAssOverride !== mpvSubtitleRenderMetrics.subAssOverride ||
|
|
||||||
next.subScaleByWindow !== mpvSubtitleRenderMetrics.subScaleByWindow ||
|
|
||||||
next.subUseMargins !== mpvSubtitleRenderMetrics.subUseMargins ||
|
|
||||||
next.osdHeight !== mpvSubtitleRenderMetrics.osdHeight ||
|
|
||||||
JSON.stringify(next.osdDimensions) !==
|
|
||||||
JSON.stringify(mpvSubtitleRenderMetrics.osdDimensions);
|
|
||||||
|
|
||||||
if (!changed) return;
|
if (!changed) return;
|
||||||
mpvSubtitleRenderMetrics = next;
|
mpvSubtitleRenderMetrics = next;
|
||||||
broadcastToOverlayWindows(
|
broadcastToOverlayWindows(
|
||||||
|
|||||||
Reference in New Issue
Block a user