feat: fix timestamps
This commit is contained in:
@@ -354,7 +354,6 @@ const SongOptionCard = ({
|
||||
|
||||
const [progressInfo, setProgressInfo] = useState({ pos: 0, dur: 0 })
|
||||
const [isPlaying, setIsPlaying] = useState(false)
|
||||
const shouldResumeAfterSeekRef = useRef(false)
|
||||
|
||||
useEffect(() => {
|
||||
registerPlayer(index, player)
|
||||
@@ -402,27 +401,6 @@ const SongOptionCard = ({
|
||||
return () => clearInterval(id)
|
||||
}, [player])
|
||||
|
||||
const hasCapturedSeekStateRef = useRef(false)
|
||||
|
||||
const resumePlaybackIfNeeded = useCallback(async () => {
|
||||
if (!player) return
|
||||
const shouldResume = shouldResumeAfterSeekRef.current
|
||||
shouldResumeAfterSeekRef.current = false
|
||||
hasCapturedSeekStateRef.current = false // Reset capture flag
|
||||
|
||||
if (!shouldResume) return
|
||||
|
||||
try {
|
||||
if (player.resume) {
|
||||
await player.resume?.()
|
||||
} else {
|
||||
await player.play?.()
|
||||
}
|
||||
} catch (error) {
|
||||
console.log('SongReady resume after seek', error?.message)
|
||||
}
|
||||
}, [player])
|
||||
|
||||
const handleSeek = useCallback(
|
||||
async (targetMs) => {
|
||||
if (!player || !progressInfo?.dur) {
|
||||
@@ -443,26 +421,31 @@ const SongOptionCard = ({
|
||||
[player, progressInfo?.dur]
|
||||
)
|
||||
|
||||
const handleSeekStart = useCallback(async () => {
|
||||
const handleSeekStart = useCallback(() => {
|
||||
onSelect(index)
|
||||
}, [index, onSelect])
|
||||
|
||||
const handlePause = useCallback(async () => {
|
||||
if (!player) return
|
||||
|
||||
const isCurrentlyPlaying = !!player.playing || isPlaying
|
||||
|
||||
// Only capture state if we haven't already for this drag interaction
|
||||
if (!hasCapturedSeekStateRef.current) {
|
||||
hasCapturedSeekStateRef.current = true
|
||||
shouldResumeAfterSeekRef.current = isCurrentlyPlaying
|
||||
}
|
||||
|
||||
try {
|
||||
if (isCurrentlyPlaying) {
|
||||
await player.pause?.()
|
||||
await player.pause?.()
|
||||
} catch (error) {
|
||||
console.log('SongReady pause on seek', error?.message)
|
||||
}
|
||||
}, [player])
|
||||
|
||||
const handlePlay = useCallback(async () => {
|
||||
if (!player) return
|
||||
try {
|
||||
if (player.resume) {
|
||||
await player.resume?.()
|
||||
} else {
|
||||
await player.play?.()
|
||||
}
|
||||
} catch (error) {
|
||||
console.log('SongReady pause on seek start', error?.message)
|
||||
console.log('SongReady resume on seek', error?.message)
|
||||
}
|
||||
}, [index, isPlaying, onSelect, player])
|
||||
}, [player])
|
||||
|
||||
const handleToggle = () => {
|
||||
onSelect(index)
|
||||
@@ -521,7 +504,8 @@ const SongOptionCard = ({
|
||||
isPlaying={isPlaying}
|
||||
onSeekStart={handleSeekStart}
|
||||
onSeek={handleSeek}
|
||||
onSeekEnd={resumePlaybackIfNeeded}
|
||||
onPause={handlePause}
|
||||
onPlay={handlePlay}
|
||||
disabled={!url}
|
||||
/>
|
||||
</View>
|
||||
|
||||
Reference in New Issue
Block a user