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 () { module.exports = async function () {
const unsubCurrentTrack = useStore.subscribe( const unsubs: (() => void)[] = []
(currentTrack?: TrackExt) => {
if (currentTrack) { unsubs.push(
useStore.getState().scrobbleTrack(currentTrack.id) useStore.subscribe(
} (currentTrack?: TrackExt) => {
}, if (currentTrack) {
state => state.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.RemotePlay, () => trackPlayerCommands.enqueue(TrackPlayer.play))
TrackPlayer.addEventListener(Event.RemotePause, () => trackPlayerCommands.enqueue(TrackPlayer.pause)) 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, () => { TrackPlayer.addEventListener(Event.PlaybackState, () => {
trackPlayerCommands.enqueue(async () => { trackPlayerCommands.enqueue(async () => {
setPlayerState(await getPlayerState()) setPlayerState(await getPlayerState())