diff --git a/src/component/Viewers/MusicPlayer/MusicPlayer.tsx b/src/component/Viewers/MusicPlayer/MusicPlayer.tsx index 4f48dec..3ff13f2 100644 --- a/src/component/Viewers/MusicPlayer/MusicPlayer.tsx +++ b/src/component/Viewers/MusicPlayer/MusicPlayer.tsx @@ -106,6 +106,25 @@ const MusicPlayer = () => { [loopMode, playIndex, playerState, index], ); + const manualNavigate = useCallback( + (isNext: boolean) => { + if (!playerState) { + return; + } + + if (loopMode === LoopMode.single_repeat) { + if (isNext) { + playIndex(((index ?? 0) + 1) % playerState?.files.length); + } else { + playIndex(((index ?? 0) - 1 + playerState?.files.length) % playerState?.files.length); + } + } else { + loopProceed(isNext); + } + }, + [loopMode, playIndex, playerState, index, loopProceed], + ); + const onPlayEnded = useCallback(() => { if (loopMode !== LoopMode.play_once) { loopProceed(true); @@ -181,6 +200,7 @@ const MusicPlayer = () => { void; volume: number; loopProceed: (isNext: boolean) => void; + manualNavigate: (isNext: boolean) => void; loopMode: number; toggleLoopMode: () => void; setLoopMode: (mode: number) => void; @@ -195,6 +196,7 @@ export const PlayerPopup = ({ setVolumeLevel, loopMode, loopProceed, + manualNavigate, toggleLoopMode, setLoopMode, playbackSpeed, @@ -253,8 +255,8 @@ export const PlayerPopup = ({ thumbSrc, onPlay: togglePause, onPause: togglePause, - onPrevious: () => loopProceed(false), - onNext: () => loopProceed(true), + onPrevious: () => manualNavigate(false), + onNext: () => manualNavigate(true), onSeek, }); @@ -406,7 +408,7 @@ export const PlayerPopup = ({ justifyContent: "center", }} > - loopProceed(false)}> + manualNavigate(false)}> @@ -416,7 +418,7 @@ export const PlayerPopup = ({ )} - loopProceed(true)}> + manualNavigate(true)}>