diff --git a/librespot/audio/__init__.py b/librespot/audio/__init__.py index 874a330..3fdb6f8 100644 --- a/librespot/audio/__init__.py +++ b/librespot/audio/__init__.py @@ -7,7 +7,7 @@ from librespot.cache import CacheManager from librespot.crypto import Packet from librespot.metadata import EpisodeId, PlayableId, TrackId from librespot.proto import Metadata_pb2 as Metadata, StorageResolve_pb2 as StorageResolve -from librespot.structure import AudioDecrypt, AudioQualityPicker, Closeable, GeneralAudioStream, GeneralWritableStream, HaltListener, NoopAudioDecrypt, PacketsReceiver +from librespot.structure import AudioDecrypt, AudioQualityPicker, Closeable, FeederException, GeneralAudioStream, GeneralWritableStream, HaltListener, NoopAudioDecrypt, PacketsReceiver import concurrent.futures import io import logging @@ -779,7 +779,7 @@ class PlayableContentFeeder: self.logger.fatal( "Couldn't find any suitable audio file, available: {}".format( track.file)) - raise + raise FeederException() return self.load_stream(file, track, None, preload, halt_listener) def pick_alternative_if_necessary( diff --git a/librespot/core.py b/librespot/core.py index 6b0cd82..0d27b09 100644 --- a/librespot/core.py +++ b/librespot/core.py @@ -343,10 +343,11 @@ class DealerClient(Closeable): def remove_request_listener(self, listener: RequestListener) -> None: with self.__request_listeners_lock: + request_listeners = {} for key, value in self.__request_listeners.items(): - if value == listener: - self.__request_listeners.pop(key) - break + if value != listener: + request_listeners[key] = value + self.__request_listeners = request_listeners def wait_for_listener(self) -> None: with self.__message_listeners_lock: diff --git a/librespot/structure.py b/librespot/structure.py index e20c417..9171ada 100644 --- a/librespot/structure.py +++ b/librespot/structure.py @@ -29,6 +29,10 @@ class Closeable: raise NotImplementedError +class FeederException(Exception): + pass + + class GeneralAudioStream: def stream(self) -> AbsChunkedInputStream: raise NotImplementedError