Added logic for default language audio track

This commit is contained in:
WardPearce
2025-01-23 19:01:30 +13:00
parent 5a31383d78
commit 6eb55307aa
7 changed files with 1737 additions and 1339 deletions
+1678 -1336
View File
File diff suppressed because it is too large Load Diff
+2 -1
View File
@@ -62,6 +62,7 @@
"he": "^1.2.0",
"human-number": "^2.0.4",
"iso-3166": "^4.3.0",
"iso-639-1": "^3.1.4",
"material-dynamic-colors": "^1.1.1",
"media-captions": "^1.0.4",
"media-icons": "^0.10.0",
@@ -75,4 +76,4 @@
"vidstack": "^1.12.9",
"youtubei.js": "^12.2.0"
}
}
}
+14
View File
@@ -31,6 +31,7 @@
playerAndroidBgPlayer,
playerAndroidLockOrientation,
playerAutoPlayStore,
playerDefaultLanguage,
playerProxyVideosStore,
playerSavePlaybackPositionStore,
silenceSkipperStore,
@@ -349,6 +350,19 @@
}
player.addEventListener('dash-can-play', async () => {
const defaultLanguage = get(playerDefaultLanguage);
if (defaultLanguage) {
let trackIndex = 0;
for (const track of player.audioTracks) {
console.log(player.audioTracks);
if (track.label.toLowerCase().includes(defaultLanguage)) {
player.remoteControl.changeAudioTrack(trackIndex);
break;
}
trackIndex++;
}
}
if (get(playerAutoPlayStore)) {
player.play();
}
+34 -1
View File
@@ -5,10 +5,11 @@
import { Capacitor } from '@capacitor/core';
import ui from 'beercss';
import { iso31661 } from 'iso-3166';
import ISO6391 from 'iso-639-1';
import { onMount } from 'svelte';
import { _ } from 'svelte-i18n';
import { get } from 'svelte/store';
import { ensureNoTrailingSlash, letterCase, titleCases } from './misc';
import { ensureNoTrailingSlash, letterCase, titleCase, titleCases } from './misc';
import {
authStore,
darkModeStore,
@@ -31,6 +32,7 @@
playerAndroidLockOrientation,
playerAutoPlayStore,
playerAutoplayNextByDefaultStore,
playerDefaultLanguage,
playerListenByDefaultStore,
playerMiniPlayerStore,
playerProxyVideosStore,
@@ -63,6 +65,11 @@
let deArrowThumbnailUrl = get(deArrowThumbnailInstanceStore);
let region = get(interfaceRegionStore);
let forceCase = get(interfaceForceCase);
let defaultLanguage = get(playerDefaultLanguage);
const languageNames = ISO6391.getAllCodes().map((code) =>
ISO6391.getName(code).toLocaleLowerCase()
);
const sponsorCategories = [
{ name: $_('layout.sponsors.sponsor'), category: 'sponsor' },
@@ -126,6 +133,15 @@
checkWidth();
addEventListener('resize', () => checkWidth());
// Set default language if not set already based off browser.
if (!get(playerDefaultLanguage)) {
const languageCode = navigator.language || navigator.languages[0];
const languageName = ISO6391.getName(languageCode.split('-')[0]);
if (languageName) {
playerDefaultLanguage.set(languageName.toLowerCase());
}
}
});
</script>
@@ -381,6 +397,23 @@
{/if}
</div>
<div class="page padding" class:active={activeTab === 'player'}>
<div class="margin"></div>
<div class="field label suffix border">
<select
name="case"
bind:value={defaultLanguage}
on:change={() => playerDefaultLanguage.set(defaultLanguage)}
>
{#each languageNames as language}
<option selected={$playerDefaultLanguage === language} value={language}
>{titleCase(language)}</option
>
{/each}
</select>
<label for="case">{$_('player.defaultLanguage')}</label>
<i>arrow_drop_down</i>
</div>
<div class="field no-margin">
<nav class="no-padding">
<div class="max">
+6
View File
@@ -17,6 +17,7 @@ import {
playerAlwaysLoopStore,
playerAutoPlayStore,
playerAutoplayNextByDefaultStore,
playerDefaultLanguage,
playerListenByDefaultStore,
playerMiniPlayerStore,
playerProxyVideosStore,
@@ -201,6 +202,11 @@ const persistedStores: { name: string, store: Writable<any>, type: 'string' | 'b
name: 'displayThumbnailAvatars',
store: interfaceDisplayThumbnailAvatars,
type: 'boolean'
},
{
name: 'defaultLanguage',
store: playerDefaultLanguage,
type: 'boolean'
}
];
+2 -1
View File
@@ -88,7 +88,8 @@
"noPlaylists": "No playlists",
"unableToLoadComments": "Unable to load comments",
"addToPlaylist": "Add to playlist",
"youtubeJsFallBack": "Local video fallback being used"
"youtubeJsFallBack": "Local video fallback being used",
"defaultLanguage": "Default Language"
},
"layout": {
"interface": "Interface",
+1
View File
@@ -44,6 +44,7 @@ export const playerYouTubeJsFallback = persisted('youTubeJsFallback', true);
export const playerYouTubeJsAlways = persisted('youTubeJsAlways', false);
export const playerAndroidBgPlayer = persisted('androidBgPlayer', true);
export const playerAndroidLockOrientation = persisted('androidLockOrientation', true);
export const playerDefaultLanguage = persisted('defaultLanguage', '');
export const returnYtDislikesStore = persisted('returnYtDislikes', false);
export const returnYTDislikesInstanceStore: Writable<string | null | undefined> = persisted(