mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-07-31 19:21:33 -07:00
feat(config): add configuration window (#70)
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
function normalizeMediaPath(mediaPath: string | null | undefined): string | null {
|
||||
if (typeof mediaPath !== 'string') {
|
||||
return null;
|
||||
}
|
||||
const trimmed = mediaPath.trim();
|
||||
return trimmed.length > 0 ? trimmed : null;
|
||||
}
|
||||
|
||||
export function createAutoplayTokenizationWarmRelease(deps: {
|
||||
isTokenizationWarmupReady: () => boolean;
|
||||
startTokenizationWarmups: () => Promise<void>;
|
||||
getCurrentMediaPath: () => string | null | undefined;
|
||||
primeCurrentSubtitle?: (mediaPath: string) => void | Promise<void>;
|
||||
signalAutoplayReady: () => void;
|
||||
warn: (message: string, error: unknown) => void;
|
||||
}): (mediaPath: string | null | undefined) => void {
|
||||
const signalIfCurrent = (mediaPath: string): void => {
|
||||
const currentMediaPath = normalizeMediaPath(deps.getCurrentMediaPath());
|
||||
if (!currentMediaPath || currentMediaPath !== mediaPath) {
|
||||
return;
|
||||
}
|
||||
deps.signalAutoplayReady();
|
||||
};
|
||||
|
||||
const primeSubtitleForRelease = (mediaPath: string): Promise<void> | null => {
|
||||
if (!deps.primeCurrentSubtitle) {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
return Promise.resolve(deps.primeCurrentSubtitle(mediaPath)).catch((error) => {
|
||||
deps.warn('Startup subtitle priming failed before autoplay readiness release:', error);
|
||||
});
|
||||
} catch (error) {
|
||||
deps.warn('Startup subtitle priming failed before autoplay readiness release:', error);
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
return (mediaPath) => {
|
||||
const normalizedPath = normalizeMediaPath(mediaPath);
|
||||
if (!normalizedPath) {
|
||||
return;
|
||||
}
|
||||
const primePromise = primeSubtitleForRelease(normalizedPath);
|
||||
if (deps.isTokenizationWarmupReady()) {
|
||||
if (!primePromise) {
|
||||
signalIfCurrent(normalizedPath);
|
||||
return;
|
||||
}
|
||||
void primePromise.then(() => {
|
||||
signalIfCurrent(normalizedPath);
|
||||
});
|
||||
return;
|
||||
}
|
||||
const warmupPromise = deps.startTokenizationWarmups();
|
||||
const readinessPromise = primePromise
|
||||
? Promise.all([primePromise, warmupPromise]).then(() => {})
|
||||
: warmupPromise;
|
||||
void readinessPromise
|
||||
.then(() => {
|
||||
signalIfCurrent(normalizedPath);
|
||||
})
|
||||
.catch((error) => {
|
||||
deps.warn('Startup tokenization warmup failed before autoplay readiness release:', error);
|
||||
});
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user