diff --git a/materialious/src/lib/Api/index.ts b/materialious/src/lib/Api/index.ts index 32e8fb7f..d0bbef1b 100644 --- a/materialious/src/lib/Api/index.ts +++ b/materialious/src/lib/Api/index.ts @@ -7,6 +7,7 @@ import { deArrowThumbnailInstanceStore, instanceStore, interfaceRegionStore, + playerYouTubeJsAlways, playerYouTubeJsFallback, returnYTDislikesInstanceStore, synciousInstanceStore @@ -72,7 +73,9 @@ export async function getPopular(fetchOptions?: RequestInit): Promise { export async function getVideo(videoId: string, local: boolean = false, fetchOptions?: RequestInit): Promise { const resp = await fetch(setRegion(buildPath(`videos/${videoId}?local=${local}`)), fetchOptions); - if (!resp.ok && Capacitor.isNativePlatform() && get(playerYouTubeJsFallback)) { + if ( + (get(playerYouTubeJsAlways) && Capacitor.isNativePlatform()) || + (!resp.ok && get(playerYouTubeJsFallback) && Capacitor.isNativePlatform())) { return await patchYoutubeJs(videoId); } else { await fetchErrorHandle(resp); diff --git a/materialious/src/lib/Player.svelte b/materialious/src/lib/Player.svelte index 481f7c5b..2f189788 100644 --- a/materialious/src/lib/Player.svelte +++ b/materialious/src/lib/Player.svelte @@ -326,7 +326,7 @@ src = [{ src: data.video.dashUrl, type: 'application/dash+xml' }]; if (!data.video.fallbackPatch) { - if (Capacitor.getPlatform() !== 'electron' || proxyVideos) { + if (!Capacitor.isNativePlatform() || proxyVideos) { (src[0] as { src: string }).src += '?local=true'; } } diff --git a/materialious/src/lib/Settings.svelte b/materialious/src/lib/Settings.svelte index 18f7cfee..88110d49 100644 --- a/materialious/src/lib/Settings.svelte +++ b/materialious/src/lib/Settings.svelte @@ -29,6 +29,7 @@ playerProxyVideosStore, playerSavePlaybackPositionStore, playerTheatreModeByDefaultStore, + playerYouTubeJsAlways, playerYouTubeJsFallback, returnYTDislikesInstanceStore, returnYtDislikesStore, @@ -258,6 +259,40 @@
{$_('layout.player.title')}
+ {#if Capacitor.isNativePlatform()} +
+ +
+ +
+ +
+ {/if} +
- - {#if Capacitor.isNativePlatform()} -
- -
- {/if}
diff --git a/materialious/src/lib/i18n/locales/en.json b/materialious/src/lib/i18n/locales/en.json index ffc8e00d..79285e02 100644 --- a/materialious/src/lib/i18n/locales/en.json +++ b/materialious/src/lib/i18n/locales/en.json @@ -125,7 +125,8 @@ "backgroundPlay": "Play audio in background", "dash": "Dash", "silenceSkipper": "Silence skipper (Experimental)", - "youtubeJsFallback": "Local video processing fallback" + "youtubeJsFallback": "Local video processing fallback", + "youtubeJsAlways": "Always use local video processing" }, "bookmarklet": "Bookmarklet", "instanceUrl": "Instance URL", diff --git a/materialious/src/lib/patches/androidRequests.ts b/materialious/src/lib/patches/androidRequests.ts index 155a240e..30e18f44 100644 --- a/materialious/src/lib/patches/androidRequests.ts +++ b/materialious/src/lib/patches/androidRequests.ts @@ -14,7 +14,7 @@ if (Capacitor.getPlatform() === 'android') { typeof requestInput === 'string' ? requestInput : requestInput.toString(); // Check if the URL is already proxied, to avoid double proxying - if (!requestUrl.startsWith(corsAnywhereProxyUrl) && !requestUrl.startsWith('/')) { + if (!requestUrl.startsWith(corsAnywhereProxyUrl) && !requestUrl.startsWith('/') && !requestUrl.startsWith('blob:') && !requestUrl.startsWith('/')) { requestInput = corsAnywhereProxyUrl + requestUrl; } diff --git a/materialious/src/lib/store.ts b/materialious/src/lib/store.ts index 116481c9..fee4fb3c 100644 --- a/materialious/src/lib/store.ts +++ b/materialious/src/lib/store.ts @@ -39,6 +39,7 @@ export const playerTheatreModeByDefaultStore = persisted('theatreModeByDefault', export const playerAutoplayNextByDefaultStore = persisted('autoplayNextByDefault', false); export const playerMiniPlayerStore = persisted('miniPlayer', true); export const playerYouTubeJsFallback = persisted('youTubeJsFallback', true); +export const playerYouTubeJsAlways = persisted('youTubeJsAlways', false); export const returnYtDislikesStore = persisted('returnYtDislikes', false); export const returnYTDislikesInstanceStore: Writable = persisted(