mirror of
https://github.com/sussy-code/smov.git
synced 2024-12-21 14:47:41 +01:00
Add cdn replacements
This commit is contained in:
parent
8619fe9780
commit
adddb84417
4 changed files with 27 additions and 4 deletions
|
@ -12,6 +12,7 @@ import {
|
|||
SourceQuality,
|
||||
getPreferredQuality,
|
||||
} from "@/stores/player/utils/qualities";
|
||||
import { processCdnLink } from "@/utils/cdn";
|
||||
import {
|
||||
canChangeVolume,
|
||||
canFullscreen,
|
||||
|
@ -101,7 +102,7 @@ export function makeVideoElementDisplayInterface(): DisplayInterface {
|
|||
function setupSource(vid: HTMLVideoElement, src: LoadableSource) {
|
||||
if (src.type === "hls") {
|
||||
if (canPlayHlsNatively(vid)) {
|
||||
vid.src = src.url;
|
||||
vid.src = processCdnLink(src.url);
|
||||
vid.currentTime = startAt;
|
||||
return;
|
||||
}
|
||||
|
@ -151,12 +152,12 @@ export function makeVideoElementDisplayInterface(): DisplayInterface {
|
|||
}
|
||||
|
||||
hls.attachMedia(vid);
|
||||
hls.loadSource(src.url);
|
||||
hls.loadSource(processCdnLink(src.url));
|
||||
vid.currentTime = startAt;
|
||||
return;
|
||||
}
|
||||
|
||||
vid.src = src.url;
|
||||
vid.src = processCdnLink(src.url);
|
||||
vid.currentTime = startAt;
|
||||
}
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@ import {
|
|||
DisplayMeta,
|
||||
} from "@/components/player/display/displayInterface";
|
||||
import { LoadableSource } from "@/stores/player/utils/qualities";
|
||||
import { processCdnLink } from "@/utils/cdn";
|
||||
import {
|
||||
canChangeVolume,
|
||||
canFullscreen,
|
||||
|
@ -112,7 +113,7 @@ export function makeChromecastDisplayInterface(
|
|||
metaData.title = meta.title;
|
||||
|
||||
const mediaInfo = new chrome.cast.media.MediaInfo("video", type);
|
||||
(mediaInfo as any).contentUrl = source.url;
|
||||
(mediaInfo as any).contentUrl = processCdnLink(source.url);
|
||||
mediaInfo.streamType = chrome.cast.media.StreamType.BUFFERED;
|
||||
mediaInfo.metadata = metaData;
|
||||
mediaInfo.customData = {
|
||||
|
|
|
@ -18,6 +18,7 @@ interface Config {
|
|||
BACKEND_URL: string;
|
||||
DISALLOWED_IDS: string;
|
||||
TURNSTILE_KEY: string;
|
||||
CDN_REPLACEMENTS: string;
|
||||
}
|
||||
|
||||
export interface RuntimeConfig {
|
||||
|
@ -32,6 +33,7 @@ export interface RuntimeConfig {
|
|||
BACKEND_URL: string;
|
||||
DISALLOWED_IDS: string[];
|
||||
TURNSTILE_KEY: string | null;
|
||||
CDN_REPLACEMENTS: Array<string[]>;
|
||||
}
|
||||
|
||||
const env: Record<keyof Config, undefined | string> = {
|
||||
|
@ -46,6 +48,7 @@ const env: Record<keyof Config, undefined | string> = {
|
|||
BACKEND_URL: import.meta.env.VITE_BACKEND_URL,
|
||||
DISALLOWED_IDS: import.meta.env.VITE_DISALLOWED_IDS,
|
||||
TURNSTILE_KEY: import.meta.env.VITE_TURNSTILE_KEY,
|
||||
CDN_REPLACEMENTS: import.meta.env.VITE_CDN_REPLACEMENTS,
|
||||
};
|
||||
|
||||
// loads from different locations, in order: environment (VITE_{KEY}), window (public/config.js)
|
||||
|
@ -84,5 +87,9 @@ export function conf(): RuntimeConfig {
|
|||
.split(",")
|
||||
.map((v) => v.trim())
|
||||
.filter((v) => v.length > 0), // Should be comma-seperated and contain the media type and ID, formatted like so: movie-753342,movie-753342,movie-753342
|
||||
CDN_REPLACEMENTS: getKey("CDN_REPLACEMENTS", "")
|
||||
.split(",")
|
||||
.map((v) => v.split(":").map((s) => s.trim()))
|
||||
.filter((v) => v.length > 0), // The format is <beforeA>:<afterA>,<beforeB>:<afterB>
|
||||
};
|
||||
}
|
||||
|
|
14
src/utils/cdn.ts
Normal file
14
src/utils/cdn.ts
Normal file
|
@ -0,0 +1,14 @@
|
|||
import { conf } from "@/setup/config";
|
||||
|
||||
export function processCdnLink(url: string): string {
|
||||
const parsedUrl = new URL(url);
|
||||
const replacements = conf().CDN_REPLACEMENTS;
|
||||
for (const [before, after] of replacements) {
|
||||
if (parsedUrl.hostname.endsWith(before)) {
|
||||
parsedUrl.host = after;
|
||||
return parsedUrl.toString();
|
||||
}
|
||||
}
|
||||
|
||||
return url;
|
||||
}
|
Loading…
Reference in a new issue