Files
musicland/src/screens/Playbacks/components/usePlaybackPlayer.js
T
2026-01-12 16:01:32 +01:00

62 lines
1.4 KiB
JavaScript

import { useEffect, useMemo, useState } from 'react'
import { useVideoPlayer } from 'expo-video'
const usePlaybackPlayer = ({ item, isActive }) => {
const baseVideoUrl = item?.playbackUrl || null
const videoUrl = baseVideoUrl
const videoPlayer = useVideoPlayer(videoUrl || null, (player) => {
player.loop = false
player.muted = false
player.timeUpdateEventInterval = 0.2
})
const shouldAutoPlay = isActive
useEffect(() => {
if (!videoPlayer) return
if (shouldAutoPlay) {
try {
videoPlayer.currentTime = 0
videoPlayer.play()
} catch (e) {}
} else if (videoPlayer?.playing) {
try {
videoPlayer.pause()
} catch (e) {}
}
}, [shouldAutoPlay, videoPlayer])
useEffect(() => {
return () => {
try {
if (videoPlayer?.playing) videoPlayer.pause()
} catch (e) {}
}
}, [videoPlayer])
const [currentTimeS, setCurrentTimeS] = useState(0)
useEffect(() => {
if (!isActive) return
const id = global.setInterval(() => {
try {
setCurrentTimeS(Number(videoPlayer?.currentTime || 0))
} catch (e) {}
}, 250)
return () => global.clearInterval(id)
}, [isActive, videoPlayer])
const playerState = useMemo(
() => ({
videoUrl,
videoPlayer,
currentTimeS,
}),
[videoPlayer, videoUrl, currentTimeS]
)
return playerState
}
export default usePlaybackPlayer