diff --git a/app/playbackservice.ts b/app/playbackservice.ts index 50dd85c..80dc87b 100644 --- a/app/playbackservice.ts +++ b/app/playbackservice.ts @@ -22,15 +22,29 @@ const setCurrentTrackIdx = (idx?: number) => { } module.exports = async function () { - const unsubCurrentTrack = useStore.subscribe( - (currentTrack?: TrackExt) => { - if (currentTrack) { - useStore.getState().scrobbleTrack(currentTrack.id) - } - }, - state => state.currentTrack, + const unsubs: (() => void)[] = [] + + unsubs.push( + useStore.subscribe( + (currentTrack?: TrackExt) => { + if (currentTrack) { + useStore.getState().scrobbleTrack(currentTrack.id) + } + }, + state => state.currentTrack, + ), ) + const { emitter } = TrackPlayer.addEventListener(Event.RemoteStop, () => { + for (const unsub of unsubs) { + unsub() + } + reset() + trackPlayerCommands.enqueue(TrackPlayer.destroy) + }) + + unsubs.push(() => emitter.removeAllListeners()) + TrackPlayer.addEventListener(Event.RemotePlay, () => trackPlayerCommands.enqueue(TrackPlayer.play)) TrackPlayer.addEventListener(Event.RemotePause, () => trackPlayerCommands.enqueue(TrackPlayer.pause)) @@ -54,12 +68,6 @@ module.exports = async function () { } }) - TrackPlayer.addEventListener(Event.RemoteStop, () => { - unsubCurrentTrack() - reset() - trackPlayerCommands.enqueue(TrackPlayer.destroy) - }) - TrackPlayer.addEventListener(Event.PlaybackState, () => { trackPlayerCommands.enqueue(async () => { setPlayerState(await getPlayerState())