mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-06-17 03:13:30 -07:00
fix(linux): auto-install managed plugin copy; include in asset updates (#127)
This commit is contained in:
+66
-1
@@ -352,7 +352,10 @@ import {
|
||||
clearYoutubePrimarySubtitleNotificationTimer,
|
||||
createYoutubePrimarySubtitleNotificationRuntime,
|
||||
} from './main/runtime/youtube-primary-subtitle-notification';
|
||||
import { createAutoplayReadyGate } from './main/runtime/autoplay-ready-gate';
|
||||
import {
|
||||
createAutoplayReadyGate,
|
||||
type AutoplayReadySignal,
|
||||
} from './main/runtime/autoplay-ready-gate';
|
||||
import { createAutoplaySubtitlePrimingRuntime } from './main/runtime/autoplay-subtitle-priming-runtime';
|
||||
import { createAutoplayTokenizationWarmRelease } from './main/runtime/autoplay-tokenization-warm-release';
|
||||
import { isVisibleOverlayAutoplayTargetReady } from './main/runtime/visible-overlay-autoplay-readiness';
|
||||
@@ -508,6 +511,11 @@ import {
|
||||
runUpdateCliCommand,
|
||||
writeUpdateCliCommandResponse,
|
||||
} from './main/runtime/update/update-cli-command';
|
||||
import {
|
||||
runEnsureLinuxRuntimePluginAssetsCliCommand,
|
||||
writeEnsureLinuxRuntimePluginAssetsCliCommandResponse,
|
||||
} from './main/runtime/linux-runtime-plugin-assets-cli-command';
|
||||
import { ensureLinuxRuntimePluginAssets } from './main/runtime/linux-runtime-plugin-assets';
|
||||
import { createUpdateServiceRuntime } from './main/runtime/update/update-service-runtime';
|
||||
import {
|
||||
createRefreshSubtitlePrefetchFromActiveTrackHandler,
|
||||
@@ -1169,6 +1177,33 @@ const waitForYoutubeMpvConnected = createWaitForMpvConnectedHandler({
|
||||
now: () => Date.now(),
|
||||
sleep: (delayMs) => new Promise((resolve) => setTimeout(resolve, delayMs)),
|
||||
});
|
||||
const POST_WARM_AUTOPLAY_SUBTITLE_PRIME_DELAYS_MS = [0, 75, 200, 500, 1_000] as const;
|
||||
|
||||
function schedulePostWarmAutoplaySubtitlePrime(signal: AutoplayReadySignal): void {
|
||||
if (signal.payload.text.trim() !== '__warm__') {
|
||||
return;
|
||||
}
|
||||
|
||||
const mediaPath = signal.mediaPath;
|
||||
for (const delayMs of POST_WARM_AUTOPLAY_SUBTITLE_PRIME_DELAYS_MS) {
|
||||
const timer = setTimeout(() => {
|
||||
const currentMediaPath =
|
||||
appState.currentMediaPath?.trim() || appState.mpvClient?.currentVideoPath?.trim() || null;
|
||||
if (currentMediaPath !== mediaPath || !overlayManager.getVisibleOverlayVisible()) {
|
||||
return;
|
||||
}
|
||||
void primeCurrentSubtitleForAutoplay(mediaPath).catch((error) => {
|
||||
logger.debug(
|
||||
`[autoplay-subtitle-prime] failed to prime current subtitle after warm readiness: ${
|
||||
error instanceof Error ? error.message : String(error)
|
||||
}`,
|
||||
);
|
||||
});
|
||||
}, delayMs);
|
||||
timer.unref?.();
|
||||
}
|
||||
}
|
||||
|
||||
const autoplayReadyGate = createAutoplayReadyGate({
|
||||
isAppOwnedFlowInFlight: () => youtubePrimarySubtitleNotificationRuntime.isAppOwnedFlowInFlight(),
|
||||
getCurrentMediaPath: () => appState.currentMediaPath,
|
||||
@@ -1194,6 +1229,9 @@ const autoplayReadyGate = createAutoplayReadyGate({
|
||||
});
|
||||
broadcastToOverlayWindows(IPC_CHANNELS.event.overlayPointerRecoveryRequest);
|
||||
},
|
||||
onAutoplayReadyReleased: (signal) => {
|
||||
schedulePostWarmAutoplaySubtitlePrime(signal);
|
||||
},
|
||||
isSignalTargetReady: (signal) =>
|
||||
isVisibleOverlayAutoplayTargetReady(
|
||||
{
|
||||
@@ -1758,6 +1796,7 @@ const autoplaySubtitlePrimingRuntime = createAutoplaySubtitlePrimingRuntime({
|
||||
},
|
||||
getCurrentSubText: () => appState.currentSubText,
|
||||
getCurrentSubtitleData: () => appState.currentSubtitleData,
|
||||
getActiveParsedSubtitleCues: () => appState.activeParsedSubtitleCues,
|
||||
setActiveParsedSubtitleMediaPath: (mediaPath) => {
|
||||
appState.activeParsedSubtitleMediaPath = mediaPath;
|
||||
},
|
||||
@@ -1781,6 +1820,10 @@ function primeCurrentSubtitleForVisibleOverlay(): Promise<void> {
|
||||
return autoplaySubtitlePrimingRuntime.primeCurrentSubtitleForVisibleOverlay();
|
||||
}
|
||||
|
||||
function primeCurrentSubtitleForAutoplay(mediaPath: string): Promise<void> {
|
||||
return autoplaySubtitlePrimingRuntime.primeCurrentSubtitleForAutoplay(mediaPath);
|
||||
}
|
||||
|
||||
function cancelVisibleOverlaySubtitleRefreshAfterFirstPaint(): void {
|
||||
autoplaySubtitlePrimingRuntime.cancelVisibleOverlaySubtitleRefreshAfterFirstPaint();
|
||||
}
|
||||
@@ -2526,6 +2569,10 @@ function resetLinuxVisibleOverlayStartupInputPrimer(): void {
|
||||
visibleOverlayInteractionRuntime.resetLinuxVisibleOverlayStartupInputPrimer();
|
||||
}
|
||||
|
||||
function startLinuxVisibleOverlayStartupInputGrace(): void {
|
||||
visibleOverlayInteractionRuntime.startLinuxVisibleOverlayStartupInputGrace();
|
||||
}
|
||||
|
||||
function applyLinuxOverlayInputShapeFromLatestMeasurement(): boolean {
|
||||
return visibleOverlayInteractionRuntime.applyLinuxOverlayInputShapeFromLatestMeasurement();
|
||||
}
|
||||
@@ -5765,6 +5812,21 @@ const { handleCliCommand, handleInitialArgs } = composeCliStartupHandlers({
|
||||
logWarn: (message, error) => logger.warn(message, error),
|
||||
});
|
||||
},
|
||||
runEnsureLinuxRuntimePluginAssetsCommand: async (
|
||||
argsFromCommand: CliArgs,
|
||||
source: CliCommandSource,
|
||||
) => {
|
||||
await runEnsureLinuxRuntimePluginAssetsCliCommand(
|
||||
argsFromCommand,
|
||||
{
|
||||
ensureLinuxRuntimePluginAssets: () => ensureLinuxRuntimePluginAssets(),
|
||||
writeResponse: (responsePath, payload) =>
|
||||
writeEnsureLinuxRuntimePluginAssetsCliCommandResponse(responsePath, payload),
|
||||
logWarn: (message, error) => logger.warn(message, error),
|
||||
},
|
||||
source,
|
||||
);
|
||||
},
|
||||
runYoutubePlaybackFlow: (request) => youtubePlaybackRuntime.runYoutubePlaybackFlow(request),
|
||||
openYomitanSettings: () => openYomitanSettings(),
|
||||
openConfigSettingsWindow: () => openConfigSettingsWindow(),
|
||||
@@ -6235,6 +6297,7 @@ function setVisibleOverlayVisible(visible: boolean): void {
|
||||
if (visible) {
|
||||
maybeStartOverlayLoadingOsd();
|
||||
resetLinuxVisibleOverlayStartupInputPrimer();
|
||||
startLinuxVisibleOverlayStartupInputGrace();
|
||||
restoreVisibleOverlayWindowShapeForShow();
|
||||
void ensureOverlayMpvSubtitlesHidden();
|
||||
void primeCurrentSubtitleForVisibleOverlay();
|
||||
@@ -6256,6 +6319,7 @@ function toggleVisibleOverlay(): void {
|
||||
} else {
|
||||
maybeStartOverlayLoadingOsd();
|
||||
resetLinuxVisibleOverlayStartupInputPrimer();
|
||||
startLinuxVisibleOverlayStartupInputGrace();
|
||||
restoreVisibleOverlayWindowShapeForShow();
|
||||
void ensureOverlayMpvSubtitlesHidden();
|
||||
void primeCurrentSubtitleForVisibleOverlay();
|
||||
@@ -6275,6 +6339,7 @@ function setOverlayVisible(visible: boolean): void {
|
||||
if (visible) {
|
||||
maybeStartOverlayLoadingOsd();
|
||||
resetLinuxVisibleOverlayStartupInputPrimer();
|
||||
startLinuxVisibleOverlayStartupInputGrace();
|
||||
restoreVisibleOverlayWindowShapeForShow();
|
||||
void ensureOverlayMpvSubtitlesHidden();
|
||||
void primeCurrentSubtitleForVisibleOverlay();
|
||||
|
||||
Reference in New Issue
Block a user