Added adaptive formats to youtubejs patch

This commit is contained in:
WardPearce
2024-10-17 13:21:47 +13:00
parent 9f990ac956
commit b90dba70a1
7 changed files with 76 additions and 33 deletions
@@ -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')
@@ -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')
+35 -19
View File
@@ -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"
}
+2 -1
View File
@@ -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"
}
}
}
+1 -1
View File
@@ -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}`
});
+32 -4
View File
@@ -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<VideoPlay> {
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<VideoPlay> {
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<VideoPlay> {
});
});
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<VideoPlay> {
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,
@@ -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 @@
<div class="space"></div>
<div class="grid">
{#if 'videos' in displayContent}
{#each displayContent.videos as video}
<div class="s12 m6 l2">
<article class="no-padding" style="height: 100%;">
<Thumbnail {video} />
</article>
</div>
{/each}
<VideoList videos={displayContent.videos} />
{:else}
{#each displayContent.playlists as playlist}
<div class="s12 m6 l2">