From b90dba70a1bbef25cc4cf7592f49122baedfba55 Mon Sep 17 00:00:00 2001 From: WardPearce Date: Thu, 17 Oct 2024 13:21:47 +1300 Subject: [PATCH] Added adaptive formats to youtubejs patch --- .../android/app/capacitor.build.gradle | 1 + .../android/capacitor.settings.gradle | 3 ++ materialious/package-lock.json | 54 ++++++++++++------- materialious/package.json | 3 +- materialious/src/lib/Player.svelte | 2 +- materialious/src/lib/patches/youtubejs.ts | 36 +++++++++++-- .../routes/(app)/channel/[slug]/+page.svelte | 10 +--- 7 files changed, 76 insertions(+), 33 deletions(-) diff --git a/materialious/android/app/capacitor.build.gradle b/materialious/android/app/capacitor.build.gradle index 8a82c063..675b2a5b 100644 --- a/materialious/android/app/capacitor.build.gradle +++ b/materialious/android/app/capacitor.build.gradle @@ -12,6 +12,7 @@ dependencies { implementation project(':capacitor-app') implementation project(':capacitor-browser') implementation project(':capacitor-clipboard') + implementation project(':capacitor-screen-orientation') implementation project(':capgo-inappbrowser') implementation project(':mediagrid-capacitor-native-audio') implementation project(':capacitor-nodejs') diff --git a/materialious/android/capacitor.settings.gradle b/materialious/android/capacitor.settings.gradle index ef657a94..eb22a4ad 100644 --- a/materialious/android/capacitor.settings.gradle +++ b/materialious/android/capacitor.settings.gradle @@ -11,6 +11,9 @@ project(':capacitor-browser').projectDir = new File('../node_modules/@capacitor/ include ':capacitor-clipboard' project(':capacitor-clipboard').projectDir = new File('../node_modules/@capacitor/clipboard/android') +include ':capacitor-screen-orientation' +project(':capacitor-screen-orientation').projectDir = new File('../node_modules/@capacitor/screen-orientation/android') + include ':capgo-inappbrowser' project(':capgo-inappbrowser').projectDir = new File('../node_modules/@capgo/inappbrowser/android') diff --git a/materialious/package-lock.json b/materialious/package-lock.json index 63ba7c70..364f1a23 100644 --- a/materialious/package-lock.json +++ b/materialious/package-lock.json @@ -1,12 +1,12 @@ { "name": "materialious", - "version": "1.6.9", + "version": "1.6.10", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "materialious", - "version": "1.6.9", + "version": "1.6.10", "dependencies": { "@capacitor-community/electron": "^5.0.1", "@capacitor/android": "6.1.2", @@ -15,6 +15,7 @@ "@capacitor/cli": "6.1.2", "@capacitor/clipboard": "^6.0.1", "@capacitor/core": "^6.1.2", + "@capacitor/screen-orientation": "^6.0.2", "@capgo/inappbrowser": "^6.6.8", "@ffmpeg/ffmpeg": "^0.12.10", "@mediagrid/capacitor-native-audio": "^1.0.0", @@ -2190,6 +2191,15 @@ "tslib": "^2.1.0" } }, + "node_modules/@capacitor/screen-orientation": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@capacitor/screen-orientation/-/screen-orientation-6.0.2.tgz", + "integrity": "sha512-CF+RFUIUYrvztlX+voHwvONdAbf/F9xuJWfMDnxjiGliu+oPTNLLTWxAFPmoyi3sVJcNoeQ+qwWzUfXa7ag59Q==", + "license": "MIT", + "peerDependencies": { + "@capacitor/core": "^6.0.0" + } + }, "node_modules/@capgo/inappbrowser": { "version": "6.6.8", "resolved": "https://registry.npmjs.org/@capgo/inappbrowser/-/inappbrowser-6.6.8.tgz", @@ -2794,10 +2804,11 @@ } }, "node_modules/@polka/url": { - "version": "1.0.0-next.25", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz", - "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==", - "dev": true + "version": "1.0.0-next.28", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", + "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", + "dev": true, + "license": "MIT" }, "node_modules/@prettier/plugin-xml": { "version": "2.2.0", @@ -3141,15 +3152,16 @@ } }, "node_modules/@sveltejs/kit": { - "version": "2.5.27", - "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.5.27.tgz", - "integrity": "sha512-CcbRTzl+65oWljAASL6UlxM4x3NWwd0fjq5fQOfP243vs50myFQ8lil0fr3Im6HeeQqYUCtnv8HjO8REWVPjTw==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.7.1.tgz", + "integrity": "sha512-TBVnkwgYQT3EafGQK6Eyh5FlLEBlRhCmqPTwcdOs+QdnyUc3eCAxRWtXlFxIWtmk6pqv11zdng8qTpThdTogew==", "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { "@types/cookie": "^0.6.0", "cookie": "^0.6.0", - "devalue": "^5.0.0", + "devalue": "^5.1.0", "esm-env": "^1.0.0", "import-meta-resolve": "^4.1.0", "kleur": "^4.1.5", @@ -3157,7 +3169,7 @@ "mrmime": "^2.0.0", "sade": "^1.8.1", "set-cookie-parser": "^2.6.0", - "sirv": "^2.0.4", + "sirv": "^3.0.0", "tiny-glob": "^0.2.9" }, "bin": { @@ -5614,10 +5626,11 @@ } }, "node_modules/devalue": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.0.0.tgz", - "integrity": "sha512-gO+/OMXF7488D+u3ue+G7Y4AA3ZmUnB3eHJXmBTgNHvr4ZNzl36A0ZtG+XCRNYCkYx/bFmw4qtkoFLa+wSrwAA==", - "dev": true + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz", + "integrity": "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==", + "dev": true, + "license": "MIT" }, "node_modules/dezalgo": { "version": "1.0.4", @@ -8866,6 +8879,7 @@ "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -13569,17 +13583,18 @@ } }, "node_modules/sirv": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", - "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.0.tgz", + "integrity": "sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==", "dev": true, + "license": "MIT", "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", "totalist": "^3.0.0" }, "engines": { - "node": ">= 10" + "node": ">=18" } }, "node_modules/sisteransi": { @@ -14807,6 +14822,7 @@ "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } diff --git a/materialious/package.json b/materialious/package.json index 841d84ce..8a6f85cc 100644 --- a/materialious/package.json +++ b/materialious/package.json @@ -50,6 +50,7 @@ "@capacitor/cli": "6.1.2", "@capacitor/clipboard": "^6.0.1", "@capacitor/core": "^6.1.2", + "@capacitor/screen-orientation": "^6.0.2", "@capgo/inappbrowser": "^6.6.8", "@ffmpeg/ffmpeg": "^0.12.10", "@mediagrid/capacitor-native-audio": "^1.0.0", @@ -74,4 +75,4 @@ "vidstack": "^1.12.9", "youtubei.js": "^10.5.0" } -} \ No newline at end of file +} diff --git a/materialious/src/lib/Player.svelte b/materialious/src/lib/Player.svelte index b098f1d8..b4d1c17f 100644 --- a/materialious/src/lib/Player.svelte +++ b/materialious/src/lib/Player.svelte @@ -195,7 +195,7 @@ kind: 'captions', language: caption.language_code, // Need if captions are generated when youtube.js is being used. - src: caption.url.startsWith('blob:') + src: caption.url.startsWith('http') ? caption.url : `${get(instanceStore)}${caption.url}` }); diff --git a/materialious/src/lib/patches/youtubejs.ts b/materialious/src/lib/patches/youtubejs.ts index 174db96b..eedfb662 100644 --- a/materialious/src/lib/patches/youtubejs.ts +++ b/materialious/src/lib/patches/youtubejs.ts @@ -1,4 +1,4 @@ -import type { Image, Thumbnail, VideoBase, VideoPlay } from '$lib/Api/model'; +import type { AdaptiveFormats, Captions, Image, Thumbnail, VideoBase, VideoPlay } from '$lib/Api/model'; import { numberWithCommas } from '$lib/misc'; import { interfaceRegionStore, poTokenCacheStore } from '$lib/store'; import { Capacitor } from '@capacitor/core'; @@ -85,6 +85,8 @@ export async function patchYoutubeJs(videoId: string): Promise { const video = await youtube.getInfo(videoId); + console.log(video); + if (!video.primary_info || !video.secondary_info) { throw new Error('Unable to pull video info from youtube.js'); } @@ -104,7 +106,8 @@ export async function patchYoutubeJs(videoId: string): Promise { let authorThumbnails: Image[]; if (video.basic_info.channel_id) { - authorThumbnails = (await youtube.getChannel(video.basic_info.channel_id)).metadata.avatar as Image[]; + const channel = await youtube.getChannel(video.basic_info.channel_id); + authorThumbnails = channel.metadata.avatar as Image[]; } else { authorThumbnails = []; } @@ -122,6 +125,31 @@ export async function patchYoutubeJs(videoId: string): Promise { }); }); + let captions: Captions[] = []; + video.captions?.caption_tracks?.forEach(caption => { + captions.push({ + label: caption.name.toString(), + language_code: caption.language_code, + url: caption.base_url + }); + }); + + let adaptiveFormats: AdaptiveFormats[] = []; + video.streaming_data?.adaptive_formats.forEach(format => { + adaptiveFormats.push({ + index: format.index_range?.start.toString() || '', + bitrate: format.bitrate.toString(), + init: format.init_range?.start.toString() || '', + url: format.url || '', + itag: format.itag.toString(), + type: format.mime_type, + clen: '', + lmt: '', + projectionType: 0, + resolution: format.width ? `${format.width}x${format.height}` : undefined + }); + }); + return { type: 'video', title: video.primary_info.title ? video.primary_info.title.toString() : '', @@ -136,11 +164,11 @@ export async function patchYoutubeJs(videoId: string): Promise { genre: video.basic_info.category || '', genreUrl: '', dashUrl: dashUri, - adaptiveFormats: [], + adaptiveFormats: adaptiveFormats, formatStreams: [], recommendedVideos: recommendedVideos, authorThumbnails: authorThumbnails, - captions: [], + captions: captions, authorId: video.basic_info.channel_id || '', authorUrl: `/channel/${video.basic_info.channel_id}`, authorVerified: false, diff --git a/materialious/src/routes/(app)/channel/[slug]/+page.svelte b/materialious/src/routes/(app)/channel/[slug]/+page.svelte index 17cf5471..5fd827ab 100644 --- a/materialious/src/routes/(app)/channel/[slug]/+page.svelte +++ b/materialious/src/routes/(app)/channel/[slug]/+page.svelte @@ -3,7 +3,7 @@ import type { ChannelContentPlaylists, ChannelContentVideos } from '$lib/Api/model'; import PageLoading from '$lib/PageLoading.svelte'; import PlaylistThumbnail from '$lib/PlaylistThumbnail.svelte'; - import Thumbnail from '$lib/Thumbnail.svelte'; + import VideoList from '$lib/VideoList.svelte'; import { cleanNumber, getBestThumbnail, proxyGoogleImage } from '$lib/misc'; import { activePageStore, authStore } from '$lib/store'; import { Clipboard } from '@capacitor/clipboard'; @@ -188,13 +188,7 @@
{#if 'videos' in displayContent} - {#each displayContent.videos as video} -
-
- -
-
- {/each} + {:else} {#each displayContent.playlists as playlist}