@@ -301,28 +301,32 @@ const SpotifyRemote: SpotifyRemoteApi = {
301
301
nativeModule . eventStartObserving ( eventType ) ;
302
302
}
303
303
eventListeners [ eventType ] . add ( sub ) ;
304
- return this ;
304
+ const _remove = sub . remove ;
305
+ // rewrite sub.remove so we can add stopObserving API
306
+ sub . remove = ( ) => {
307
+ _remove . call ( sub ) ;
308
+ eventListeners [ eventType ] . delete ( sub ) ;
309
+ if ( this . listenerCount ( eventType ) === 0 ) {
310
+ nativeModule . eventStopObserving ( eventType ) ;
311
+ }
312
+ } ;
313
+ return sub ;
305
314
} ,
306
315
removeListener ( eventType , listener ) {
307
316
eventListeners [ eventType ] . forEach ( ( eventListener ) => {
308
- if ( ! listener || eventListener . listener === listener ) {
309
- eventListener . remove ( ) ;
310
- eventListeners [ eventType ] . delete ( eventListener ) ;
311
- }
317
+ if ( eventListener . listener === listener ) eventListener . remove ( ) ;
312
318
} ) ;
313
- if ( this . listenerCount ( eventType ) === 0 ) {
314
- nativeModule . eventStopObserving ( eventType ) ;
315
- }
316
- return this ;
317
319
} ,
318
320
removeAllListeners ( eventType ) {
319
321
const eventsToRemove = eventType ? [ eventType ] : this . eventNames ( ) ;
320
- eventsToRemove . forEach ( ( eventType ) => this . removeListener ( eventType ) ) ;
321
- return this ;
322
+ for ( const eventToRemove of eventsToRemove ) {
323
+ eventListeners [ eventToRemove ] . forEach ( ( eventListener ) => {
324
+ eventListener . remove ( ) ;
325
+ } ) ;
326
+ }
322
327
} ,
323
328
emit ( eventType , ...args ) {
324
- nativeEventEmitter . emit ( eventType , ...args ) ;
325
- return true ;
329
+ return nativeEventEmitter . emit ( eventType , ...args ) ;
326
330
} ,
327
331
listenerCount ( eventType ) {
328
332
return eventListeners [ eventType ] . size ;
0 commit comments