Added logic for default language audio track
This commit is contained in:
Generated
+1678
-1336
File diff suppressed because it is too large
Load Diff
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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'
|
||||
}
|
||||
];
|
||||
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user