Remove code duplication
This commit is contained in:
parent
b352a6ed4f
commit
2e6e53b14d
@ -30,25 +30,44 @@ class Core(pykka.ThreadingActor, AudioListener):
|
||||
def __init__(self, audio=None, backends=None):
|
||||
super(Core, self).__init__()
|
||||
|
||||
self._backends = backends
|
||||
self.backends = Backends(backends)
|
||||
|
||||
self.current_playlist = CurrentPlaylistController(core=self)
|
||||
|
||||
self.library = LibraryController(backends=backends, core=self)
|
||||
self.library = LibraryController(backends=self.backends, core=self)
|
||||
|
||||
self.playback = PlaybackController(
|
||||
audio=audio, backends=backends, core=self)
|
||||
audio=audio, backends=self.backends, core=self)
|
||||
|
||||
self.stored_playlists = StoredPlaylistsController(
|
||||
backends=backends, core=self)
|
||||
backends=self.backends, core=self)
|
||||
|
||||
@property
|
||||
def uri_schemes(self):
|
||||
"""List of URI schemes we can handle"""
|
||||
futures = [backend.uri_schemes for backend in self._backends]
|
||||
futures = [b.uri_schemes for b in self.backends]
|
||||
results = pykka.get_all(futures)
|
||||
uri_schemes = itertools.chain(*results)
|
||||
return sorted(uri_schemes)
|
||||
|
||||
def reached_end_of_stream(self):
|
||||
self.playback.on_end_of_track()
|
||||
|
||||
|
||||
class Backends(object):
|
||||
def __init__(self, backends):
|
||||
self._backends = backends
|
||||
|
||||
uri_schemes_by_backend = {
|
||||
backend: backend.uri_schemes.get()
|
||||
for backend in backends}
|
||||
self.by_uri_scheme = {
|
||||
uri_scheme: backend
|
||||
for backend, uri_schemes in uri_schemes_by_backend.items()
|
||||
for uri_scheme in uri_schemes}
|
||||
|
||||
def __len__(self):
|
||||
return len(self._backends)
|
||||
|
||||
def __getitem__(self, key):
|
||||
return self._backends[key]
|
||||
|
||||
@ -11,19 +11,11 @@ class LibraryController(object):
|
||||
|
||||
def __init__(self, backends, core):
|
||||
self.backends = backends
|
||||
uri_schemes_by_backend = {
|
||||
backend: backend.uri_schemes.get()
|
||||
for backend in backends}
|
||||
self.backends_by_uri_scheme = {
|
||||
uri_scheme: backend
|
||||
for backend, uri_schemes in uri_schemes_by_backend.items()
|
||||
for uri_scheme in uri_schemes}
|
||||
|
||||
self.core = core
|
||||
|
||||
def _get_backend(self, uri):
|
||||
uri_scheme = urlparse.urlparse(uri).scheme
|
||||
return self.backends_by_uri_scheme.get(uri_scheme)
|
||||
return self.backends.by_uri_scheme.get(uri_scheme)
|
||||
|
||||
def find_exact(self, **query):
|
||||
"""
|
||||
|
||||
@ -77,16 +77,7 @@ class PlaybackController(object):
|
||||
|
||||
def __init__(self, audio, backends, core):
|
||||
self.audio = audio
|
||||
|
||||
self.backends = backends
|
||||
uri_schemes_by_backend = {
|
||||
backend: backend.uri_schemes.get()
|
||||
for backend in backends}
|
||||
self.backends_by_uri_scheme = {
|
||||
uri_scheme: backend
|
||||
for backend, uri_schemes in uri_schemes_by_backend.items()
|
||||
for uri_scheme in uri_schemes}
|
||||
|
||||
self.core = core
|
||||
|
||||
self._state = PlaybackState.STOPPED
|
||||
@ -99,7 +90,7 @@ class PlaybackController(object):
|
||||
return None
|
||||
uri = self.current_cp_track.track.uri
|
||||
uri_scheme = urlparse.urlparse(uri).scheme
|
||||
return self.backends_by_uri_scheme[uri_scheme]
|
||||
return self.backends.by_uri_scheme[uri_scheme]
|
||||
|
||||
def _get_cpid(self, cp_track):
|
||||
if cp_track is None:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user