mirror of
https://github.com/mediacms-io/mediacms.git
synced 2025-11-10 09:28:53 -05:00
feat: Helper to match language robustly (handles en vs en-US, srclang fallback)
This commit is contained in:
parent
b95962cec8
commit
34bad434c8
@ -392,7 +392,7 @@ class UserPreferences {
|
||||
const savedLanguage = this.getPreference('subtitleLanguage');
|
||||
const enabled = this.getPreference('subtitleEnabled');
|
||||
|
||||
if (savedLanguage && enabled) {
|
||||
if (savedLanguage) {
|
||||
// Set flag to prevent auto-save during restoration
|
||||
this.isRestoringSubtitles = true;
|
||||
console.log('isRestoringSubtitles', this.isRestoringSubtitles);
|
||||
@ -418,11 +418,19 @@ class UserPreferences {
|
||||
}
|
||||
}
|
||||
|
||||
// Helper to match language robustly (handles en vs en-US, srclang fallback)
|
||||
const matchesLang = (track, target) => {
|
||||
const tl = String(track.language || track.srclang || '').toLowerCase();
|
||||
const sl = String(target || '').toLowerCase();
|
||||
if (!tl || !sl) return false;
|
||||
return tl === sl || tl.startsWith(sl + '-') || sl.startsWith(tl + '-');
|
||||
};
|
||||
|
||||
// Then enable the saved language
|
||||
let found = false;
|
||||
for (let i = 0; i < textTracks.length; i++) {
|
||||
const track = textTracks[i];
|
||||
if (track.kind === 'subtitles' && track.language === savedLanguage) {
|
||||
if (track.kind === 'subtitles' && matchesLang(track, savedLanguage)) {
|
||||
track.mode = 'showing';
|
||||
console.log('✓ Applied saved subtitle language:', savedLanguage, track.label);
|
||||
found = true;
|
||||
@ -432,10 +440,35 @@ class UserPreferences {
|
||||
|
||||
// Update subtitle button visual state immediately
|
||||
this.updateSubtitleButtonVisualState(player, true);
|
||||
// Ensure enabled flips to true after successful restore
|
||||
this.setPreference('subtitleEnabled', true, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback: if not found but enabled is true, enable the first available subtitles track
|
||||
if (!found && enabled) {
|
||||
for (let i = 0; i < textTracks.length; i++) {
|
||||
const track = textTracks[i];
|
||||
if (track.kind === 'subtitles') {
|
||||
track.mode = 'showing';
|
||||
console.log(
|
||||
'Fallback ✓ Enabled first available subtitles track:',
|
||||
track.label || track.language || track.srclang
|
||||
);
|
||||
// Save back the language we actually enabled for future precise matches
|
||||
const langToSave = track.language || track.srclang || null;
|
||||
if (langToSave) this.setPreference('subtitleLanguage', langToSave, true);
|
||||
// Ensure enabled flips to true after successful restore
|
||||
this.setPreference('subtitleEnabled', true, true);
|
||||
this.updateSubtitleMenuUI(player, track);
|
||||
this.updateSubtitleButtonVisualState(player, true);
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Clear the restoration flag after a longer delay to ensure all events have settled
|
||||
setTimeout(() => {
|
||||
this.isRestoringSubtitles = false;
|
||||
@ -455,6 +488,20 @@ class UserPreferences {
|
||||
|
||||
// Start attempting to apply subtitles immediately
|
||||
attemptToApplySubtitles();
|
||||
|
||||
// Also attempt when tracks are added/changed (iOS timing)
|
||||
try {
|
||||
const vEl =
|
||||
(player.tech_ && player.tech_.el_) ||
|
||||
(player.el && player.el().querySelector && player.el().querySelector('video'));
|
||||
const ttList = vEl && vEl.textTracks;
|
||||
if (ttList && typeof ttList.addEventListener === 'function') {
|
||||
const onAddTrack = () => setTimeout(() => attemptToApplySubtitles(1), 50);
|
||||
const onChange = () => setTimeout(() => attemptToApplySubtitles(1), 50);
|
||||
ttList.addEventListener('addtrack', onAddTrack, { once: true });
|
||||
ttList.addEventListener('change', onChange, { once: true });
|
||||
}
|
||||
} catch (e) {}
|
||||
} else {
|
||||
// Ensure subtitles are off on load when not enabled
|
||||
try {
|
||||
@ -555,7 +602,9 @@ class UserPreferences {
|
||||
customSettingsMenu.refreshSubtitlesSubmenu();
|
||||
} else if (attempt < 5) {
|
||||
// Retry after a short delay if menu not found
|
||||
console.log(`Custom settings menu not found, retrying in ${attempt * 200}ms... (attempt ${attempt})`);
|
||||
console.log(
|
||||
`Custom settings menu not found, retrying in ${attempt * 200}ms... (attempt ${attempt})`
|
||||
);
|
||||
setTimeout(() => attemptUpdate(attempt + 1), attempt * 200);
|
||||
} else {
|
||||
console.log('Custom settings menu not found after multiple attempts');
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user