AniX/app/components/ReleasePlayer/PlayerParsing.ts

147 lines
4.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { tryCatchPlayer, tryCatchAPI } from "#/api/utils";
import { env } from 'next-runtime-env';
export async function _fetchAPI(
url: string,
onErrorMsg: string,
setPlayerError: (state) => void,
onErrorCodes?: Record<number, string>
) {
const { data, error } = await tryCatchAPI(fetch(url));
if (error) {
let errorDetail = "Мы правда не знаем что произошло...";
if (error.name) {
if (error.name == "TypeError") {
errorDetail = "Не удалось подключиться к серверу";
} else {
errorDetail = `Неизвестная ошибка ${error.name}: ${error.message}`;
}
}
if (error.code) {
if (Object.keys(onErrorCodes).includes(error.code.toString())) {
errorDetail = onErrorCodes[error.code.toString()];
} else {
errorDetail = `API вернуло ошибку: ${error.code}`;
}
}
setPlayerError({
message: onErrorMsg,
detail: errorDetail,
});
return null;
}
return data;
}
export async function _fetchPlayer(
url: string,
setPlayerError: (state) => void
) {
const { data, error } = (await tryCatchPlayer(fetch(url))) as any;
if (error) {
let errorDetail = "Мы правда не знаем что произошло...";
if (error.name) {
if (error.name == "TypeError") {
errorDetail = "Не удалось подключиться к серверу";
} else {
errorDetail = `Неизвестная ошибка ${error.name}: ${error.message}`;
}
} else if (error.message) {
errorDetail = error.message;
}
setPlayerError({
message: "Не удалось получить ссылку на видео",
detail: errorDetail,
});
return null;
}
return data;
}
export const _fetchKodikManifest = async (
url: string,
setPlayerError: (state) => void
) => {
const NEXT_PUBLIC_PLAYER_PARSER_URL = env("NEXT_PUBLIC_PLAYER_PARSER_URL")
if (!NEXT_PUBLIC_PLAYER_PARSER_URL) {
setPlayerError({
message: "Плеер не настроен",
detail: "переменная 'NEXT_PUBLIC_PLAYER_PARSER_URL' не обнаружена",
});
return { manifest: null, poster: null };
}
const data = await _fetchPlayer(
`${NEXT_PUBLIC_PLAYER_PARSER_URL}/?url=${url}&player=kodik`,
setPlayerError
);
if (data) {
let manifest: string = data.manifest
if (!manifest.startsWith("http")) {
let file = new File([manifest], "manifest.m3u8", {
type: "application/x-mpegURL",
});
manifest = URL.createObjectURL(file);
}
return { manifest, poster: data.poster };
}
return { manifest: null, poster: null };
};
export const _fetchAnilibriaManifest = async (
url: string,
setPlayerError: (state) => void
) => {
const NEXT_PUBLIC_PLAYER_PARSER_URL = env("NEXT_PUBLIC_PLAYER_PARSER_URL")
if (!NEXT_PUBLIC_PLAYER_PARSER_URL) {
setPlayerError({
message: "Плеер не настроен",
detail: "переменная 'NEXT_PUBLIC_PLAYER_PARSER_URL' не обнаружена",
});
return { manifest: null, poster: null };
}
const data = await _fetchPlayer(
`${NEXT_PUBLIC_PLAYER_PARSER_URL}/?url=${encodeURIComponent(url)}&player=libria`,
setPlayerError
);
if (data) {
let file = new File([data.manifest], "manifest.m3u8", {
type: "application/x-mpegURL",
});
let manifest = URL.createObjectURL(file);
return { manifest, poster: data.poster };
}
return { manifest: null, poster: null };
};
export const _fetchSibnetManifest = async (
url: string,
setPlayerError: (state) => void
) => {
const NEXT_PUBLIC_PLAYER_PARSER_URL = env("NEXT_PUBLIC_PLAYER_PARSER_URL")
if (!NEXT_PUBLIC_PLAYER_PARSER_URL) {
setPlayerError({
message: "Плеер не настроен",
detail: "переменная 'NEXT_PUBLIC_PLAYER_PARSER_URL' не обнаружена",
});
return { manifest: null, poster: null };
}
const data = await _fetchPlayer(
`${NEXT_PUBLIC_PLAYER_PARSER_URL}/?url=${url}&player=sibnet`,
setPlayerError
);
if (data) {
return { manifest: data.manifest, poster: data.poster };
}
return { manifest: null, poster: null };
};