"use client"; import { Button, Card } from "flowbite-react"; import { useEffect, useState } from "react"; import { ENDPOINTS } from "#/api/config"; // import { VoiceoverSelector } from "./VoiceoverSelector"; // import { SourceSelector } from "./SourceSelector"; // import { EpisodeSelector } from "./EpisodeSelector"; // import { Spinner } from "../Spinner/Spinner"; // import { useUserPlayerPreferencesStore } from "#/store/player"; import HlsVideo from "hls-video-element/react"; import VideoJS from "videojs-video-element/react"; // import MediaThemeSutro from "./MediaThemeSutro"; // import { getAnonEpisodesWatched } from "./ReleasePlayer"; // import { tryCatchPlayer, tryCatchAPI } from "#/api/utils"; import Styles from "./MediaPlayer.module.css"; import { MediaController, MediaControlBar, MediaTimeRange, MediaTimeDisplay, MediaVolumeRange, MediaPlayButton, MediaSeekForwardButton, MediaMuteButton, MediaFullscreenButton, MediaCastButton, MediaPreviewTimeDisplay, MediaPipButton, MediaAirplayButton, MediaChromeDialog, } from "media-chrome/react"; import { MediaPlaybackRateMenu, MediaRenditionMenu, MediaSettingsMenu, MediaSettingsMenuButton, MediaSettingsMenuItem, } from "media-chrome/react/menu"; import { VoiceoverSelectorMenu } from "./VoiceoverSelectorMenu"; export const ReleasePlayerCustom = (props: { id: number; token: string | null; }) => { const [voiceover, setVoiceover] = useState({ selected: null, available: null, }); const [source, setSource] = useState({ selected: null, available: null, }); const [episode, setEpisode] = useState({ selected: null, available: null, }); const [playerProps, SetPlayerProps] = useState({ src: null, poster: null, type: null, useCustom: false, }); const [playerError, setPlayerError] = useState(null); // const [playbackRate, setPlaybackRate] = useState(1); // const [isErrorDetailsOpen, setIsErrorDetailsOpen] = useState(false); // const [isLoading, setIsLoading] = useState(true); // const playerPreferenceStore = useUserPlayerPreferencesStore(); // const preferredVO = playerPreferenceStore.getPreferredVoiceover(props.id); // const preferredSource = playerPreferenceStore.getPreferredPlayer(props.id); // old info fetching // useEffect(() => { // const __getInfo = async () => { // let url = `${ENDPOINTS.release.episode}/${props.id}/${voiceover.selected.id}`; // const src = await _fetchAPI( // url, // "Не удалось получить информацию о источниках" // ); // if (src) { // const selectedSrc = // src.sources.find((source: any) => source.name === preferredSource) || // src.sources[0]; // if (selectedSrc.episodes_count == 0) { // const remSources = src.sources.filter( // (source: any) => source.id !== selectedSrc.id // ); // setSource({ // selected: remSources[0], // available: remSources, // }); // return; // } // setSource({ // selected: selectedSrc, // available: src.sources, // }); // } // }; // if (voiceover.selected) { // __getInfo(); // } // // eslint-disable-next-line react-hooks/exhaustive-deps // }, [voiceover.selected]); // useEffect(() => { // const __getInfo = async () => { // let url = `${ENDPOINTS.release.episode}/${props.id}/${voiceover.selected.id}/${source.selected.id}`; // if (props.token) { // url += `?token=${props.token}`; // } // const episodes = await _fetchAPI( // url, // "Не удалось получить информацию о эпизодах" // ); // if (episodes) { // let anonEpisodesWatched = getAnonEpisodesWatched( // props.id, // source.selected.id, // voiceover.selected.id // ); // let lastEpisodeWatched = Math.max.apply( // 0, // Object.keys( // anonEpisodesWatched[props.id][source.selected.id][ // voiceover.selected.id // ] // ) // ); // let selectedEpisode = // episodes.episodes.find( // (episode: any) => episode.position == lastEpisodeWatched // ) || episodes.episodes[0]; // setEpisode({ // selected: selectedEpisode, // available: episodes.episodes, // }); // } // }; // if (source.selected) { // __getInfo(); // } // // eslint-disable-next-line react-hooks/exhaustive-deps // }, [source.selected]); // useEffect(() => { // const __getInfo = async () => { // if (source.selected.name == "Kodik") { // const { manifest, poster } = await _fetchKodikManifest( // episode.selected.url // ); // if (manifest) { // SetPlayerProps({ // src: manifest, // poster: poster, // useCustom: true, // type: "hls", // }); // setIsLoading(false); // } // return; // } // if (source.selected.name == "Libria") { // const { manifest, poster } = await _fetchAnilibriaManifest( // episode.selected.url // ); // if (manifest) { // SetPlayerProps({ // src: manifest, // poster: poster, // useCustom: true, // type: "hls", // }); // setIsLoading(false); // } // return; // } // if (source.selected.name == "Sibnet") { // const { manifest, poster } = await _fetchSibnetManifest( // episode.selected.url // ); // if (manifest) { // SetPlayerProps({ // src: manifest, // poster: poster, // useCustom: true, // type: "mp4", // }); // setIsLoading(false); // } // return; // } // SetPlayerProps({ // src: episode.selected.url, // poster: null, // useCustom: false, // type: null, // }); // setIsLoading(false); // }; // if (episode.selected) { // setIsLoading(true); // setPlayerError(null); // __getInfo(); // } // // eslint-disable-next-line react-hooks/exhaustive-deps // }, [episode.selected]); return ( {/*
{isLoading ? !playerError ? :

Ошибка: {playerError.message}

{!isErrorDetailsOpen ? :

{playerError.detail}

}
: playerProps.useCustom ? !playerError ? {playerProps.type == "hls" ? { // @ts-ignore setPlaybackRate(e.target.playbackRate || 1); }} /> : { // @ts-ignore setPlaybackRate(e.target.playbackRate || 1); }} > } :

Ошибка: {playerError.message}

{!isErrorDetailsOpen ? :

{playerError.detail}

}
: