mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-05-26 00:55:16 -07:00
[codex] Prefer unlabeled external sidecars for local playback (#46)
Co-authored-by: bee <autumn@skerritt.blog>
This commit is contained in:
@@ -90,6 +90,10 @@ function isLikelyHearingImpaired(title: string): boolean {
|
||||
return HEARING_IMPAIRED_PATTERN.test(title);
|
||||
}
|
||||
|
||||
function isUnlabeledExternalTrack(track: NormalizedSubtitleTrack): boolean {
|
||||
return track.external && normalizeYoutubeLangCode(track.lang).length === 0;
|
||||
}
|
||||
|
||||
function pickBestTrackId(
|
||||
tracks: NormalizedSubtitleTrack[],
|
||||
preferredLanguages: string[],
|
||||
@@ -126,6 +130,19 @@ function pickBestTrackId(
|
||||
};
|
||||
}
|
||||
|
||||
function pickSingleUnlabeledExternalTrackId(
|
||||
tracks: NormalizedSubtitleTrack[],
|
||||
excludeId: number | null = null,
|
||||
): number | null {
|
||||
const fallbackCandidates = tracks.filter(
|
||||
(track) => track.id !== excludeId && isUnlabeledExternalTrack(track),
|
||||
);
|
||||
if (fallbackCandidates.length !== 1) {
|
||||
return null;
|
||||
}
|
||||
return fallbackCandidates[0]?.id ?? null;
|
||||
}
|
||||
|
||||
export function resolveManagedLocalSubtitleSelection(input: {
|
||||
trackList: unknown[] | null;
|
||||
primaryLanguages: string[];
|
||||
@@ -146,12 +163,13 @@ export function resolveManagedLocalSubtitleSelection(input: {
|
||||
);
|
||||
|
||||
const primary = pickBestTrackId(tracks, preferredPrimaryLanguages);
|
||||
const secondary = pickBestTrackId(tracks, preferredSecondaryLanguages, primary.trackId);
|
||||
const primaryTrackId = primary.trackId ?? pickSingleUnlabeledExternalTrackId(tracks);
|
||||
const secondary = pickBestTrackId(tracks, preferredSecondaryLanguages, primaryTrackId);
|
||||
|
||||
return {
|
||||
primaryTrackId: primary.trackId,
|
||||
primaryTrackId,
|
||||
secondaryTrackId: secondary.trackId,
|
||||
hasPrimaryMatch: primary.hasMatch,
|
||||
hasPrimaryMatch: primary.hasMatch || primaryTrackId !== null,
|
||||
hasSecondaryMatch: secondary.hasMatch,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user