mirror of
https://github.com/sussy-code/smov.git
synced 2024-12-21 14:47:41 +01:00
Merge pull request #637 from movie-web/provider-update
Update provider package
This commit is contained in:
commit
9b14a82f3a
10 changed files with 30 additions and 33 deletions
|
@ -28,7 +28,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@formkit/auto-animate": "^0.8.1",
|
"@formkit/auto-animate": "^0.8.1",
|
||||||
"@headlessui/react": "^1.7.17",
|
"@headlessui/react": "^1.7.17",
|
||||||
"@movie-web/providers": "^1.1.5",
|
"@movie-web/providers": "^2.0.1",
|
||||||
"@noble/hashes": "^1.3.3",
|
"@noble/hashes": "^1.3.3",
|
||||||
"@react-spring/web": "^9.7.3",
|
"@react-spring/web": "^9.7.3",
|
||||||
"@scure/bip39": "^1.2.2",
|
"@scure/bip39": "^1.2.2",
|
||||||
|
|
|
@ -18,8 +18,8 @@ dependencies:
|
||||||
specifier: ^1.7.17
|
specifier: ^1.7.17
|
||||||
version: 1.7.17(react-dom@18.2.0)(react@18.2.0)
|
version: 1.7.17(react-dom@18.2.0)(react@18.2.0)
|
||||||
'@movie-web/providers':
|
'@movie-web/providers':
|
||||||
specifier: ^1.1.5
|
specifier: ^2.0.1
|
||||||
version: 1.1.5
|
version: 2.0.1
|
||||||
'@noble/hashes':
|
'@noble/hashes':
|
||||||
specifier: ^1.3.3
|
specifier: ^1.3.3
|
||||||
version: 1.3.3
|
version: 1.3.3
|
||||||
|
@ -1912,14 +1912,14 @@ packages:
|
||||||
'@jridgewell/resolve-uri': 3.1.1
|
'@jridgewell/resolve-uri': 3.1.1
|
||||||
'@jridgewell/sourcemap-codec': 1.4.15
|
'@jridgewell/sourcemap-codec': 1.4.15
|
||||||
|
|
||||||
/@movie-web/providers@1.1.5:
|
/@movie-web/providers@2.0.1:
|
||||||
resolution: {integrity: sha512-JnqU6nVsEZ83UVcsizqzcr/vtwvHHlZt9vYwGiJEAyaUgaXJPZz3C90qzaRZ8CVWydUTRAmjRP3daRFtC1nKHw==}
|
resolution: {integrity: sha512-PB1OxSsm4zwD6fuWBCmuqwMpt1UnlKssVZ8jGl6gHioS9/qFXR9Rsd8SnWISQWxF6lVRUp0DBXHfCrXGY/jwhA==}
|
||||||
dependencies:
|
dependencies:
|
||||||
cheerio: 1.0.0-rc.12
|
cheerio: 1.0.0-rc.12
|
||||||
crypto-js: 4.2.0
|
crypto-js: 4.2.0
|
||||||
form-data: 4.0.0
|
form-data: 4.0.0
|
||||||
iso-639-1: 3.1.0
|
iso-639-1: 3.1.0
|
||||||
nanoid: 3.3.6
|
nanoid: 3.3.7
|
||||||
node-fetch: 2.7.0
|
node-fetch: 2.7.0
|
||||||
unpacker: 1.0.1
|
unpacker: 1.0.1
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
|
@ -5234,17 +5234,10 @@ packages:
|
||||||
stylis: 4.3.0
|
stylis: 4.3.0
|
||||||
dev: false
|
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:
|
/nanoid@3.3.7:
|
||||||
resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
|
resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
|
||||||
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
|
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
dev: true
|
|
||||||
|
|
||||||
/nanoid@5.0.4:
|
/nanoid@5.0.4:
|
||||||
resolution: {integrity: sha512-vAjmBf13gsmhXSgBrtIclinISzFFy22WwCYoyilZlsrRXNIHSwgFQ1bEdjRwMT3aoadeIF6HMuDRlOxzfXV8ig==}
|
resolution: {integrity: sha512-vAjmBf13gsmhXSgBrtIclinISzFFy22WwCYoyilZlsrRXNIHSwgFQ1bEdjRwMT3aoadeIF6HMuDRlOxzfXV8ig==}
|
||||||
|
|
|
@ -22,6 +22,7 @@ const alwaysVisibleQualities: Record<SourceQuality, boolean> = {
|
||||||
"480": true,
|
"480": true,
|
||||||
"720": true,
|
"720": true,
|
||||||
"1080": true,
|
"1080": true,
|
||||||
|
"4k": false,
|
||||||
};
|
};
|
||||||
|
|
||||||
function useIsIosHls() {
|
function useIsIosHls() {
|
||||||
|
|
|
@ -73,8 +73,8 @@ export function useEmbedScraping(
|
||||||
setSourceId(sourceId);
|
setSourceId(sourceId);
|
||||||
setCaption(null);
|
setCaption(null);
|
||||||
setSource(
|
setSource(
|
||||||
convertRunoutputToSource({ stream: result.stream }),
|
convertRunoutputToSource({ stream: result.stream[0] }),
|
||||||
convertProviderCaption(result.stream.captions),
|
convertProviderCaption(result.stream[0].captions),
|
||||||
progress,
|
progress,
|
||||||
);
|
);
|
||||||
router.close();
|
router.close();
|
||||||
|
@ -132,8 +132,8 @@ export function useSourceScraping(sourceId: string | null, routerId: string) {
|
||||||
if (result.stream) {
|
if (result.stream) {
|
||||||
setCaption(null);
|
setCaption(null);
|
||||||
setSource(
|
setSource(
|
||||||
convertRunoutputToSource({ stream: result.stream }),
|
convertRunoutputToSource({ stream: result.stream[0] }),
|
||||||
convertProviderCaption(result.stream.captions),
|
convertProviderCaption(result.stream[0].captions),
|
||||||
progress,
|
progress,
|
||||||
);
|
);
|
||||||
setSourceId(sourceId);
|
setSourceId(sourceId);
|
||||||
|
@ -187,8 +187,8 @@ export function useSourceScraping(sourceId: string | null, routerId: string) {
|
||||||
setSourceId(sourceId);
|
setSourceId(sourceId);
|
||||||
setCaption(null);
|
setCaption(null);
|
||||||
setSource(
|
setSource(
|
||||||
convertRunoutputToSource({ stream: embedResult.stream }),
|
convertRunoutputToSource({ stream: embedResult.stream[0] }),
|
||||||
convertProviderCaption(embedResult.stream.captions),
|
convertProviderCaption(embedResult.stream[0].captions),
|
||||||
progress,
|
progress,
|
||||||
);
|
);
|
||||||
router.close();
|
router.close();
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { RunOutput } from "@movie-web/providers";
|
import { Stream } from "@movie-web/providers";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
SourceFileStream,
|
SourceFileStream,
|
||||||
|
@ -7,6 +7,7 @@ import {
|
||||||
} from "@/stores/player/utils/qualities";
|
} from "@/stores/player/utils/qualities";
|
||||||
|
|
||||||
const allowedQualitiesMap: Record<SourceQuality, SourceQuality> = {
|
const allowedQualitiesMap: Record<SourceQuality, SourceQuality> = {
|
||||||
|
"4k": "4k",
|
||||||
"1080": "1080",
|
"1080": "1080",
|
||||||
"480": "480",
|
"480": "480",
|
||||||
"360": "360",
|
"360": "360",
|
||||||
|
@ -21,7 +22,7 @@ function isAllowedQuality(inp: string): inp is SourceQuality {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function convertRunoutputToSource(out: {
|
export function convertRunoutputToSource(out: {
|
||||||
stream: RunOutput["stream"];
|
stream: Stream;
|
||||||
}): SourceSliceSource {
|
}): SourceSliceSource {
|
||||||
if (out.stream.type === "hls") {
|
if (out.stream.type === "hls") {
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -60,8 +60,10 @@ function useBaseScrape() {
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const startEvent = useCallback((id: ScraperEvent<"start">) => {
|
const startEvent = useCallback((id: ScraperEvent<"start">) => {
|
||||||
|
const lastIdTmp = lastId.current;
|
||||||
setSources((s) => {
|
setSources((s) => {
|
||||||
if (s[id]) s[id].status = "pending";
|
if (s[id]) s[id].status = "pending";
|
||||||
|
if (lastIdTmp && s[lastIdTmp]) s[lastIdTmp].status = "success";
|
||||||
return { ...s };
|
return { ...s };
|
||||||
});
|
});
|
||||||
setCurrentSource(id);
|
setCurrentSource(id);
|
||||||
|
|
|
@ -14,7 +14,6 @@ import {
|
||||||
import { Loading } from "@/components/layout/Loading";
|
import { Loading } from "@/components/layout/Loading";
|
||||||
import { MwLink } from "@/components/text/Link";
|
import { MwLink } from "@/components/text/Link";
|
||||||
import { useBackendUrl } from "@/hooks/auth/useBackendUrl";
|
import { useBackendUrl } from "@/hooks/auth/useBackendUrl";
|
||||||
import { conf } from "@/setup/config";
|
|
||||||
|
|
||||||
interface TrustBackendPartProps {
|
interface TrustBackendPartProps {
|
||||||
onNext?: (meta: MetaResponse) => void;
|
onNext?: (meta: MetaResponse) => void;
|
||||||
|
@ -25,7 +24,7 @@ export function TrustBackendPart(props: TrustBackendPartProps) {
|
||||||
const backendUrl = useBackendUrl();
|
const backendUrl = useBackendUrl();
|
||||||
const hostname = useMemo(() => new URL(backendUrl).hostname, [backendUrl]);
|
const hostname = useMemo(() => new URL(backendUrl).hostname, [backendUrl]);
|
||||||
const result = useAsync(() => {
|
const result = useAsync(() => {
|
||||||
return getBackendMeta(conf().BACKEND_URL);
|
return getBackendMeta(backendUrl);
|
||||||
}, [backendUrl]);
|
}, [backendUrl]);
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
|
|
@ -75,11 +75,8 @@ export function ScrapingPart(props: ScrapingProps) {
|
||||||
})();
|
})();
|
||||||
}, [startScraping, props, report, isMounted]);
|
}, [startScraping, props, report, isMounted]);
|
||||||
|
|
||||||
const currentProvider = sourceOrder.find(
|
|
||||||
(s) => sources[s.id].status === "pending",
|
|
||||||
);
|
|
||||||
let currentProviderIndex = sourceOrder.findIndex(
|
let currentProviderIndex = sourceOrder.findIndex(
|
||||||
(provider) => currentProvider?.id === provider.id,
|
(s) => s.id === currentSource || s.children.includes(currentSource ?? ""),
|
||||||
);
|
);
|
||||||
if (currentProviderIndex === -1)
|
if (currentProviderIndex === -1)
|
||||||
currentProviderIndex = sourceOrder.length - 1;
|
currentProviderIndex = sourceOrder.length - 1;
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
|
import { Qualities } from "@movie-web/providers";
|
||||||
|
|
||||||
import { QualityStore } from "@/stores/quality";
|
import { QualityStore } from "@/stores/quality";
|
||||||
|
|
||||||
export type SourceQuality = "unknown" | "360" | "480" | "720" | "1080";
|
export type SourceQuality = Qualities;
|
||||||
|
|
||||||
export type StreamType = "hls" | "mp4";
|
export type StreamType = "hls" | "mp4";
|
||||||
|
|
||||||
|
@ -30,6 +32,7 @@ const qualitySorting: Record<SourceQuality, number> = {
|
||||||
"480": 20,
|
"480": 20,
|
||||||
"720": 30,
|
"720": 30,
|
||||||
"1080": 40,
|
"1080": 40,
|
||||||
|
"4k": 25, // 4k has lower priority, you need faster internet for it
|
||||||
};
|
};
|
||||||
const sortedQualities: SourceQuality[] = Object.entries(qualitySorting)
|
const sortedQualities: SourceQuality[] = Object.entries(qualitySorting)
|
||||||
.sort((a, b) => b[1] - a[1])
|
.sort((a, b) => b[1] - a[1])
|
||||||
|
@ -98,7 +101,8 @@ export function selectQuality(
|
||||||
throw new Error("couldn't select quality");
|
throw new Error("couldn't select quality");
|
||||||
}
|
}
|
||||||
|
|
||||||
const qualityMap: Record<SourceQuality, string> = {
|
const qualityNameMap: Record<SourceQuality, string> = {
|
||||||
|
"4k": "4K",
|
||||||
"1080": "1080p",
|
"1080": "1080p",
|
||||||
"360": "360p",
|
"360": "360p",
|
||||||
"480": "480p",
|
"480": "480p",
|
||||||
|
@ -106,8 +110,8 @@ const qualityMap: Record<SourceQuality, string> = {
|
||||||
unknown: "unknown",
|
unknown: "unknown",
|
||||||
};
|
};
|
||||||
|
|
||||||
export const allQualities = Object.keys(qualityMap) as SourceQuality[];
|
export const allQualities = Object.keys(qualityNameMap) as SourceQuality[];
|
||||||
|
|
||||||
export function qualityToString(quality: SourceQuality): string {
|
export function qualityToString(quality: SourceQuality): string {
|
||||||
return qualityMap[quality];
|
return qualityNameMap[quality];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import {
|
import {
|
||||||
ProviderBuilderOptions,
|
Fetcher,
|
||||||
ProviderControls,
|
ProviderControls,
|
||||||
makeProviders,
|
makeProviders,
|
||||||
makeSimpleProxyFetcher,
|
makeSimpleProxyFetcher,
|
||||||
|
@ -49,7 +49,7 @@ async function fetchButWithApiTokens(
|
||||||
}
|
}
|
||||||
|
|
||||||
function makeLoadBalancedSimpleProxyFetcher() {
|
function makeLoadBalancedSimpleProxyFetcher() {
|
||||||
const fetcher: ProviderBuilderOptions["fetcher"] = async (a, b) => {
|
const fetcher: Fetcher = async (a, b) => {
|
||||||
const currentFetcher = makeSimpleProxyFetcher(
|
const currentFetcher = makeSimpleProxyFetcher(
|
||||||
getLoadbalancedProxyUrl(),
|
getLoadbalancedProxyUrl(),
|
||||||
fetchButWithApiTokens,
|
fetchButWithApiTokens,
|
||||||
|
|
Loading…
Reference in a new issue