diff --git a/src/screens/Library/MusicDetails.js b/src/screens/Library/MusicDetails.js index e52a189..6cad752 100644 --- a/src/screens/Library/MusicDetails.js +++ b/src/screens/Library/MusicDetails.js @@ -106,11 +106,6 @@ const MusicDetails = ({ route }) => { seekBy: seekTrackBy, } = useTrackController(trackDescriptor); - const progressInfo = useMemo( - () => ({ pos: positionMs, dur: durationMs }), - [positionMs, durationMs] - ); - // Karaoke aligned words (from timestamps) const alignedWords = useMemo(() => { try { @@ -176,11 +171,11 @@ const MusicDetails = ({ route }) => { return `${m}:${s}`; }; - const handleTogglePlay = useCallback(async () => { + const togglePlay = useCallback(async () => { if (!trackDescriptor) return; try { if (!isCurrentTrack) { - await ensureLoaded({ startPositionMs: progressInfo.pos, autoPlay: true }); + await ensureLoaded({ startPositionMs: positionMs, autoPlay: true }); return; } if (isTrackPlaying) { @@ -195,7 +190,7 @@ const MusicDetails = ({ route }) => { trackDescriptor, isCurrentTrack, ensureLoaded, - progressInfo.pos, + positionMs, isTrackPlaying, pauseTrack, resumeTrack, @@ -206,10 +201,7 @@ const MusicDetails = ({ route }) => { try { wasPlayingBeforeSeek.current = isTrackPlaying; if (!isCurrentTrack) { - await ensureLoaded({ - startPositionMs: progressInfo.pos, - autoPlay: false, - }); + await ensureLoaded({ startPositionMs: positionMs, autoPlay: false }); } if (isTrackPlaying) { await pauseTrack(); @@ -222,13 +214,13 @@ const MusicDetails = ({ route }) => { isTrackPlaying, isCurrentTrack, ensureLoaded, - progressInfo.pos, + positionMs, pauseTrack, ]); const handleSliderSeek = useCallback( async (ratio) => { - const dur = progressInfo.dur || 0; + const dur = durationMs || 0; if (!trackDescriptor || dur <= 0) return; const targetMs = Math.max(0, Math.floor(dur * ratio)); try { @@ -241,14 +233,14 @@ const MusicDetails = ({ route }) => { console.log("MusicDetails seek error", e?.message); } }, - [progressInfo.dur, trackDescriptor, isCurrentTrack, ensureLoaded, seekTrackTo] + [durationMs, trackDescriptor, isCurrentTrack, ensureLoaded, seekTrackTo] ); const handleSliderSeekEnd = useCallback(async () => { try { if (wasPlayingBeforeSeek.current) { if (!isCurrentTrack) { - await ensureLoaded({ startPositionMs: progressInfo.pos, autoPlay: true }); + await ensureLoaded({ startPositionMs: positionMs, autoPlay: true }); } else { await resumeTrack(); } @@ -258,13 +250,13 @@ const MusicDetails = ({ route }) => { } finally { wasPlayingBeforeSeek.current = false; } - }, [ensureLoaded, isCurrentTrack, progressInfo.pos, resumeTrack]); + }, [ensureLoaded, isCurrentTrack, positionMs, resumeTrack]); const handleSeekBySeconds = useCallback( async (deltaSeconds) => { if (!trackDescriptor) return; const deltaMs = Number(deltaSeconds || 0) * 1000; - const target = Math.max(0, (progressInfo.pos || 0) + deltaMs); + const target = Math.max(0, (positionMs || 0) + deltaMs); try { if (!isCurrentTrack) { await ensureLoaded({ startPositionMs: target, autoPlay: true }); @@ -277,7 +269,7 @@ const MusicDetails = ({ route }) => { }, [ trackDescriptor, - progressInfo.pos, + positionMs, isCurrentTrack, ensureLoaded, seekTrackBy, @@ -341,8 +333,8 @@ const MusicDetails = ({ route }) => { // Current time in seconds for highlighting const currentTimeS = useMemo( - () => Math.max(0, (progressInfo.pos || 0) / 1000), - [progressInfo.pos] + () => Math.max(0, (positionMs || 0) / 1000), + [positionMs] ); // Preview lead: show words 0.5s earlier const visibleTimeS = useMemo( @@ -657,11 +649,11 @@ const MusicDetails = ({ route }) => { {songUrl && ( { alignItems: "center", justifyContent: "center", }} - onPress={handleTogglePlay} + onPress={togglePlay} >