mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-02-28 06:22:45 -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: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: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",
|
||||
"generate:config-example": "pnpm run build && node dist/generate-config-example.js",
|
||||
"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,
|
||||
};
|
||||
}
|
||||
|
||||
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,
|
||||
MPV_REQUEST_ID_SECONDARY_SUB_VISIBILITY,
|
||||
} from "./core/services/mpv-service";
|
||||
import { updateMpvSubtitleRenderMetricsService } from "./core/services/mpv-render-metrics-service";
|
||||
import { applyMpvSubtitleRenderMetricsPatchService } from "./core/services/mpv-render-metrics-service";
|
||||
import {
|
||||
handleMpvCommandFromIpcService,
|
||||
} from "./core/services/ipc-command-service";
|
||||
@@ -636,30 +636,10 @@ function handleInitialArgs(): void {
|
||||
function updateMpvSubtitleRenderMetrics(
|
||||
patch: Partial<MpvSubtitleRenderMetrics>,
|
||||
): void {
|
||||
const next = updateMpvSubtitleRenderMetricsService(
|
||||
const { next, changed } = applyMpvSubtitleRenderMetricsPatchService(
|
||||
mpvSubtitleRenderMetrics,
|
||||
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;
|
||||
mpvSubtitleRenderMetrics = next;
|
||||
broadcastToOverlayWindows(
|
||||
|
||||
Reference in New Issue
Block a user