import { useEffect, useRef } from 'react' import Hls from 'hls.js' import { isIOS, isSafari } from '@/web/utils/common' import { motion } from 'framer-motion' import { useSnapshot } from 'valtio' import uiStates from '../states/uiStates' import useWindowFocus from '../hooks/useWindowFocus' import useSettings from '../hooks/useSettings' const VideoCover = ({ source, onPlay }: { source?: string; onPlay?: () => void }) => { const videoRef = useRef(null) const hls = useRef() const windowFocus = useWindowFocus() const { playAnimatedArtworkFromApple } = useSettings() useEffect(() => { if (source && Hls.isSupported() && videoRef.current && playAnimatedArtworkFromApple) { if (hls.current) hls.current.destroy() hls.current = new Hls() hls.current.loadSource(source) hls.current.attachMedia(videoRef.current) } return () => hls.current && hls.current.destroy() }, [source]) // Pause video cover when playing another video const { playingVideoID, isPauseVideos } = useSnapshot(uiStates) useEffect(() => { if (playingVideoID || isPauseVideos || !windowFocus) { videoRef?.current?.pause() } else { videoRef?.current?.play() } }, [playingVideoID, isPauseVideos, windowFocus]) return ( {isSafari ? ( ) : (
)}
) } export default VideoCover