Remove code duplication

This commit is contained in:
Stein Magnus Jodal 2012-10-29 09:48:53 +01:00
parent b352a6ed4f
commit 2e6e53b14d
3 changed files with 26 additions and 24 deletions

View File

@ -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]

View File

@ -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):
"""

View File

@ -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: