replay musics

This commit is contained in:
2025-11-03 14:01:35 +01:00
parent 460c91f1e6
commit 94a1f1ab16
7 changed files with 143 additions and 27 deletions
+25
View File
@@ -79,6 +79,9 @@ const DEFAULT_CONTEXT = {
seekBy: noopAsync,
stop: noopAsync,
setQueue: noop,
isLooping: false,
setLooping: noop,
toggleLooping: noop,
};
export const PlayerContext = createContext(DEFAULT_CONTEXT);
@@ -215,6 +218,7 @@ const PlayerProvider = ({ children }) => {
durationMs: 0,
});
const [error, setError] = useState(null);
const [isLooping, setIsLooping] = useState(false);
const autoPlayRef = useRef(false);
const pendingSeekValueRef = useRef(null);
@@ -295,6 +299,13 @@ const PlayerProvider = ({ children }) => {
run();
}, [player, currentTrack?.id]);
useEffect(() => {
if (!player) return;
try {
player.loop = !!isLooping;
} catch (_err) {}
}, [player, isLooping]);
const play = useCallback(
async (trackInput, options = {}) => {
const normalized = normalizeTrack(trackInput, options);
@@ -455,6 +466,14 @@ const PlayerProvider = ({ children }) => {
}
}, [player]);
const setLooping = useCallback((value) => {
setIsLooping(!!value);
}, []);
const toggleLooping = useCallback(() => {
setIsLooping((prev) => !prev);
}, []);
const contextValue = useMemo(
() => ({
currentTrack,
@@ -474,6 +493,9 @@ const PlayerProvider = ({ children }) => {
seekBy,
stop,
setQueue,
isLooping,
setLooping,
toggleLooping,
}),
[
currentTrack,
@@ -491,6 +513,9 @@ const PlayerProvider = ({ children }) => {
seekTo,
shouldHideOnRoute,
stop,
isLooping,
setLooping,
toggleLooping,
]
);