mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-05-26 00:55:16 -07:00
refactor: deduplicate mpv plugin config, fix CSS font fallbacks
- Extract shared getMpvPluginRuntimeConfig() helper to eliminate duplicate inline objects - Call ensureImmersionTrackerStarted() before markActiveVideoWatched action - Quote multi-word font names and add sans-serif generic fallback in subtitle sidebar CSS - Add main-wiring tests asserting deduplication and tracker start ordering
This commit is contained in:
+18
-22
@@ -1222,17 +1222,7 @@ const youtubePlaybackRuntime = createYoutubePlaybackRuntime({
|
||||
resolveInstalledPluginBeforeLaunch: (detection, mpvPath) =>
|
||||
promptForLegacyMpvPluginRemovalBeforeWindowsLaunch(mpvPath, detection),
|
||||
},
|
||||
{
|
||||
socketPath: appState.mpvSocketPath,
|
||||
binaryPath: getResolvedConfig().mpv.subminerBinaryPath,
|
||||
backend: getResolvedConfig().mpv.backend,
|
||||
autoStart: getResolvedConfig().mpv.autoStartSubMiner,
|
||||
autoStartVisibleOverlay: getResolvedConfig().auto_start_overlay,
|
||||
autoStartPauseUntilReady: getResolvedConfig().mpv.pauseUntilOverlayReady,
|
||||
texthookerEnabled: getResolvedConfig().texthooker.launchAtStartup,
|
||||
aniskipEnabled: getResolvedConfig().mpv.aniskipEnabled,
|
||||
aniskipButtonKey: getResolvedConfig().mpv.aniskipButtonKey,
|
||||
},
|
||||
getMpvPluginRuntimeConfig(),
|
||||
),
|
||||
waitForYoutubeMpvConnected: (timeoutMs) => waitForYoutubeMpvConnected(timeoutMs),
|
||||
prepareYoutubePlaybackInMpv: (request) => prepareYoutubePlaybackInMpv(request),
|
||||
@@ -1243,6 +1233,21 @@ const youtubePlaybackRuntime = createYoutubePlaybackRuntime({
|
||||
clearScheduled: (timer) => clearTimeout(timer),
|
||||
});
|
||||
|
||||
function getMpvPluginRuntimeConfig() {
|
||||
const config = getResolvedConfig();
|
||||
return {
|
||||
socketPath: appState.mpvSocketPath,
|
||||
binaryPath: config.mpv.subminerBinaryPath,
|
||||
backend: config.mpv.backend,
|
||||
autoStart: config.mpv.autoStartSubMiner,
|
||||
autoStartVisibleOverlay: config.auto_start_overlay,
|
||||
autoStartPauseUntilReady: config.mpv.pauseUntilOverlayReady,
|
||||
texthookerEnabled: config.texthooker.launchAtStartup,
|
||||
aniskipEnabled: config.mpv.aniskipEnabled,
|
||||
aniskipButtonKey: config.mpv.aniskipButtonKey,
|
||||
};
|
||||
}
|
||||
|
||||
let firstRunSetupMessage: string | null = null;
|
||||
const resolveWindowsMpvShortcutRuntimePaths = () =>
|
||||
resolveWindowsMpvShortcutPaths({
|
||||
@@ -2650,17 +2655,7 @@ const {
|
||||
getLaunchMode: () => getResolvedConfig().mpv.launchMode,
|
||||
platform: process.platform,
|
||||
execPath: process.execPath,
|
||||
getPluginRuntimeConfig: () => ({
|
||||
socketPath: appState.mpvSocketPath,
|
||||
binaryPath: getResolvedConfig().mpv.subminerBinaryPath,
|
||||
backend: getResolvedConfig().mpv.backend,
|
||||
autoStart: getResolvedConfig().mpv.autoStartSubMiner,
|
||||
autoStartVisibleOverlay: getResolvedConfig().auto_start_overlay,
|
||||
autoStartPauseUntilReady: getResolvedConfig().mpv.pauseUntilOverlayReady,
|
||||
texthookerEnabled: getResolvedConfig().texthooker.launchAtStartup,
|
||||
aniskipEnabled: getResolvedConfig().mpv.aniskipEnabled,
|
||||
aniskipButtonKey: getResolvedConfig().mpv.aniskipButtonKey,
|
||||
}),
|
||||
getPluginRuntimeConfig: () => getMpvPluginRuntimeConfig(),
|
||||
defaultMpvLogPath: DEFAULT_MPV_LOG_PATH,
|
||||
defaultMpvArgs: MPV_JELLYFIN_DEFAULT_ARGS,
|
||||
removeSocketPath: (socketPath) => {
|
||||
@@ -5143,6 +5138,7 @@ async function dispatchSessionAction(request: SessionActionDispatchRequest): Pro
|
||||
toggleSubtitleSidebar: () => toggleSubtitleSidebar(),
|
||||
markLastCardAsAudioCard: () => markLastCardAsAudioCard(),
|
||||
markActiveVideoWatched: async () => {
|
||||
ensureImmersionTrackerStarted();
|
||||
const marked = (await appState.immersionTracker?.markActiveVideoWatched()) ?? false;
|
||||
if (marked) {
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user