fix double events after remote-stop

caused by listeners not being removed
This commit is contained in:
austinried 2021-08-04 21:18:10 +09:00
parent e15a2ebcfc
commit a0b49ec75f

View File

@ -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())