/* eslint-disable react/prop-types */ import { useEffect, useState } from "react"; import BouncingLoader from "../ui/bouncingloader/Bouncingloader"; export default function IframePlayer({ episodeId, serverName, servertype, animeInfo, episodeNum, episodes, playNext, autoNext, }) { const baseURL = serverName.toLowerCase() === "hd-1" ? import.meta.env.VITE_BASE_IFRAME_URL : serverName.toLowerCase() === "hd-4" ? import.meta.env.VITE_BASE_IFRAME_URL_2 : undefined; const [loading, setLoading] = useState(true); const [iframeLoaded, setIframeLoaded] = useState(false); const [iframeSrc, setIframeSrc] = useState(""); const [currentEpisodeIndex, setCurrentEpisodeIndex] = useState( episodes?.findIndex( (episode) => episode.id.match(/ep=(\d+)/)?.[1] === episodeId ) ); useEffect(() => { const loadIframeUrl = async () => { setLoading(true); setIframeLoaded(false); setIframeSrc(""); setIframeSrc(`${baseURL}/${episodeId}/${servertype}`); }; loadIframeUrl(); // eslint-disable-next-line react-hooks/exhaustive-deps }, [episodeId, servertype, serverName, animeInfo]); useEffect(() => { if (episodes?.length > 0) { const newIndex = episodes.findIndex( (episode) => episode.id.match(/ep=(\d+)/)?.[1] === episodeId ); setCurrentEpisodeIndex(newIndex); } }, [episodeId, episodes]); useEffect(() => { const handleMessage = (event) => { const { currentTime, duration } = event.data; if (typeof currentTime === "number" && typeof duration === "number") { if ( currentTime >= duration && currentEpisodeIndex < episodes?.length - 1 && autoNext ) { playNext(episodes[currentEpisodeIndex + 1].id.match(/ep=(\d+)/)?.[1]); } } }; window.addEventListener("message", handleMessage); return () => { window.removeEventListener("message", handleMessage); }; }, [autoNext, currentEpisodeIndex, episodes, playNext]); useEffect(() => { setLoading(true); setIframeLoaded(false); return () => { const continueWatching = JSON.parse(localStorage.getItem("continueWatching")) || []; const newEntry = { id: animeInfo?.id, data_id: animeInfo?.data_id, episodeId, episodeNum, adultContent: animeInfo?.adultContent, poster: animeInfo?.poster, title: animeInfo?.title, japanese_title: animeInfo?.japanese_title, }; if (!newEntry.data_id) return; const existingIndex = continueWatching.findIndex( (item) => item.data_id === newEntry.data_id ); if (existingIndex !== -1) { continueWatching[existingIndex] = newEntry; } else { continueWatching.push(newEntry); } localStorage.setItem("continueWatching", JSON.stringify(continueWatching)); }; // eslint-disable-next-line react-hooks/exhaustive-deps }, [episodeId, servertype]); return (