Skip to content

Commit 9462a3e

Browse files
committed
fix: more accurately return current track
1 parent f90e9be commit 9462a3e

File tree

1 file changed

+26
-15
lines changed

1 file changed

+26
-15
lines changed

src/utility/useCurrentTrack.ts

+26-15
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { useTypedSelector } from '@/store';
22
import { AlbumTrack } from '@/store/music/types';
3-
import { useCallback, useEffect, useMemo, useState } from 'react';
3+
import { useEffect, useMemo, useState } from 'react';
44
import TrackPlayer, { Event, useTrackPlayerEvents, Track } from 'react-native-track-player';
55

66
interface CurrentTrackResponse {
@@ -24,22 +24,33 @@ export default function useCurrentTrack(): CurrentTrackResponse {
2424
entities[track?.backendId]
2525
), [track?.backendId, entities]);
2626

27-
// Retrieve the current track from the queue using the index
28-
const retrieveCurrentTrack = useCallback(async () => {
29-
const queue = await TrackPlayer.getQueue();
30-
const currentTrackIndex = await TrackPlayer.getActiveTrackIndex();
31-
if (currentTrackIndex !== undefined) {
32-
setTrack(queue[currentTrackIndex]);
33-
setIndex(currentTrackIndex);
34-
} else {
35-
setTrack(undefined);
36-
setIndex(undefined);
27+
// Then execute the function on component mount and track changes
28+
useEffect(() => {
29+
// Async function that retrieves the current track whenever the hook is
30+
// first executed
31+
async function getTrack() {
32+
const queue = await TrackPlayer.getQueue();
33+
const currentTrackIndex = await TrackPlayer.getActiveTrackIndex();
34+
if (currentTrackIndex !== undefined) {
35+
setTrack(queue[currentTrackIndex]);
36+
setIndex(currentTrackIndex);
37+
} else {
38+
setTrack(undefined);
39+
setIndex(undefined);
40+
}
3741
}
38-
}, [setTrack, setIndex]);
3942

40-
// Then execute the function on component mount and track changes
41-
useEffect(() => { retrieveCurrentTrack(); }, [retrieveCurrentTrack]);
42-
useTrackPlayerEvents([ Event.PlaybackActiveTrackChanged, Event.PlaybackState ], retrieveCurrentTrack);
43+
getTrack();
44+
}, []);
45+
46+
// Listen for update events
47+
useTrackPlayerEvents([ Event.PlaybackActiveTrackChanged, Event.PlaybackState ], (e) => {
48+
// GUARD: Listen for active track changed events
49+
if (e.type === Event.PlaybackActiveTrackChanged) {
50+
setIndex(e.index);
51+
setTrack(e.track);
52+
}
53+
});
4354

4455
return { track, index, albumTrack };
4556
}

0 commit comments

Comments
 (0)