1
1
import { useTypedSelector } from '@/store' ;
2
2
import { AlbumTrack } from '@/store/music/types' ;
3
- import { useCallback , useEffect , useMemo , useState } from 'react' ;
3
+ import { useEffect , useMemo , useState } from 'react' ;
4
4
import TrackPlayer , { Event , useTrackPlayerEvents , Track } from 'react-native-track-player' ;
5
5
6
6
interface CurrentTrackResponse {
@@ -24,22 +24,33 @@ export default function useCurrentTrack(): CurrentTrackResponse {
24
24
entities [ track ?. backendId ]
25
25
) , [ track ?. backendId , entities ] ) ;
26
26
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
+ }
37
41
}
38
- } , [ setTrack , setIndex ] ) ;
39
42
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
+ } ) ;
43
54
44
55
return { track, index, albumTrack } ;
45
56
}
0 commit comments