From a0b49ec75f5860ed06163ece8927e30030c9fa38 Mon Sep 17 00:00:00 2001 From: austinried <4966622+austinried@users.noreply.github.com> Date: Wed, 4 Aug 2021 21:18:10 +0900 Subject: [PATCH] fix double events after remote-stop caused by listeners not being removed --- app/playbackservice.ts | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) 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())