diff --git a/package.json b/package.json index 1649434d..e957477a 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "dependencies": { "@formkit/auto-animate": "^0.8.1", "@headlessui/react": "^1.7.17", - "@movie-web/providers": "^1.1.5", + "@movie-web/providers": "^2.0.0", "@noble/hashes": "^1.3.3", "@react-spring/web": "^9.7.3", "@scure/bip39": "^1.2.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 50176963..c0c2ae78 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,8 +18,8 @@ dependencies: specifier: ^1.7.17 version: 1.7.17(react-dom@18.2.0)(react@18.2.0) '@movie-web/providers': - specifier: ^1.1.5 - version: 1.1.5 + specifier: ^2.0.0 + version: 2.0.0 '@noble/hashes': specifier: ^1.3.3 version: 1.3.3 @@ -1912,14 +1912,14 @@ packages: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 - /@movie-web/providers@1.1.5: - resolution: {integrity: sha512-JnqU6nVsEZ83UVcsizqzcr/vtwvHHlZt9vYwGiJEAyaUgaXJPZz3C90qzaRZ8CVWydUTRAmjRP3daRFtC1nKHw==} + /@movie-web/providers@2.0.0: + resolution: {integrity: sha512-+LF7kTLhtpewLdQssnYojW/Dia0UtAkrK9ZvmFSnLIEQoVjVv1vsJUT2JqkjvEC/TM1SnM2N6H+eKLJU4yN2cQ==} dependencies: cheerio: 1.0.0-rc.12 crypto-js: 4.2.0 form-data: 4.0.0 iso-639-1: 3.1.0 - nanoid: 3.3.6 + nanoid: 3.3.7 node-fetch: 2.7.0 unpacker: 1.0.1 transitivePeerDependencies: @@ -5234,17 +5234,10 @@ packages: stylis: 4.3.0 dev: false - /nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: false - /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - dev: true /nanoid@5.0.4: resolution: {integrity: sha512-vAjmBf13gsmhXSgBrtIclinISzFFy22WwCYoyilZlsrRXNIHSwgFQ1bEdjRwMT3aoadeIF6HMuDRlOxzfXV8ig==} diff --git a/src/components/player/atoms/settings/QualityView.tsx b/src/components/player/atoms/settings/QualityView.tsx index 87f8af9b..d649fb79 100644 --- a/src/components/player/atoms/settings/QualityView.tsx +++ b/src/components/player/atoms/settings/QualityView.tsx @@ -22,6 +22,7 @@ const alwaysVisibleQualities: Record = { "480": true, "720": true, "1080": true, + "4k": false, }; function useIsIosHls() { diff --git a/src/components/player/hooks/useSourceSelection.ts b/src/components/player/hooks/useSourceSelection.ts index 6ae19e51..e28507cf 100644 --- a/src/components/player/hooks/useSourceSelection.ts +++ b/src/components/player/hooks/useSourceSelection.ts @@ -73,8 +73,8 @@ export function useEmbedScraping( setSourceId(sourceId); setCaption(null); setSource( - convertRunoutputToSource({ stream: result.stream }), - convertProviderCaption(result.stream.captions), + convertRunoutputToSource({ stream: result.stream[0] }), + convertProviderCaption(result.stream[0].captions), progress, ); router.close(); @@ -132,8 +132,8 @@ export function useSourceScraping(sourceId: string | null, routerId: string) { if (result.stream) { setCaption(null); setSource( - convertRunoutputToSource({ stream: result.stream }), - convertProviderCaption(result.stream.captions), + convertRunoutputToSource({ stream: result.stream[0] }), + convertProviderCaption(result.stream[0].captions), progress, ); setSourceId(sourceId); @@ -187,8 +187,8 @@ export function useSourceScraping(sourceId: string | null, routerId: string) { setSourceId(sourceId); setCaption(null); setSource( - convertRunoutputToSource({ stream: embedResult.stream }), - convertProviderCaption(embedResult.stream.captions), + convertRunoutputToSource({ stream: embedResult.stream[0] }), + convertProviderCaption(embedResult.stream[0].captions), progress, ); router.close(); diff --git a/src/components/player/utils/convertRunoutputToSource.ts b/src/components/player/utils/convertRunoutputToSource.ts index efc59f20..fba59e63 100644 --- a/src/components/player/utils/convertRunoutputToSource.ts +++ b/src/components/player/utils/convertRunoutputToSource.ts @@ -1,4 +1,4 @@ -import { RunOutput } from "@movie-web/providers"; +import { Stream } from "@movie-web/providers"; import { SourceFileStream, @@ -7,6 +7,7 @@ import { } from "@/stores/player/utils/qualities"; const allowedQualitiesMap: Record = { + "4k": "4k", "1080": "1080", "480": "480", "360": "360", @@ -21,7 +22,7 @@ function isAllowedQuality(inp: string): inp is SourceQuality { } export function convertRunoutputToSource(out: { - stream: RunOutput["stream"]; + stream: Stream; }): SourceSliceSource { if (out.stream.type === "hls") { return { diff --git a/src/stores/player/utils/qualities.ts b/src/stores/player/utils/qualities.ts index dbc7a3d2..cca60bbd 100644 --- a/src/stores/player/utils/qualities.ts +++ b/src/stores/player/utils/qualities.ts @@ -1,6 +1,8 @@ +import { Qualities } from "@movie-web/providers"; + import { QualityStore } from "@/stores/quality"; -export type SourceQuality = "unknown" | "360" | "480" | "720" | "1080"; +export type SourceQuality = Qualities; export type StreamType = "hls" | "mp4"; @@ -30,6 +32,7 @@ const qualitySorting: Record = { "480": 20, "720": 30, "1080": 40, + "4k": 50, }; const sortedQualities: SourceQuality[] = Object.entries(qualitySorting) .sort((a, b) => b[1] - a[1]) @@ -99,6 +102,7 @@ export function selectQuality( } const qualityMap: Record = { + "4k": "4k", "1080": "1080p", "360": "360p", "480": "480p", diff --git a/src/utils/providers.ts b/src/utils/providers.ts index 530495a7..e5c8503c 100644 --- a/src/utils/providers.ts +++ b/src/utils/providers.ts @@ -1,5 +1,5 @@ import { - ProviderBuilderOptions, + Fetcher, ProviderControls, makeProviders, makeSimpleProxyFetcher, @@ -49,7 +49,7 @@ async function fetchButWithApiTokens( } function makeLoadBalancedSimpleProxyFetcher() { - const fetcher: ProviderBuilderOptions["fetcher"] = async (a, b) => { + const fetcher: Fetcher = async (a, b) => { const currentFetcher = makeSimpleProxyFetcher( getLoadbalancedProxyUrl(), fetchButWithApiTokens,