Give the core controllers a list of backends

This commit is contained in:
Stein Magnus Jodal 2012-10-27 11:26:13 +02:00
parent 2d92a7a228
commit a5af7290ad
5 changed files with 34 additions and 56 deletions

View File

@ -32,13 +32,13 @@ class Core(pykka.ThreadingActor, AudioListener):
self.current_playlist = CurrentPlaylistController(core=self)
self.library = LibraryController(backend=backends[0], core=self)
self.library = LibraryController(backends=backends, core=self)
self.playback = PlaybackController(
audio=audio, backend=backends[0], core=self)
audio=audio, backends=backends, core=self)
self.stored_playlists = StoredPlaylistsController(
backend=backends[0], core=self)
backends=backends, core=self)
@property
def uri_schemes(self):

View File

@ -6,15 +6,11 @@ from mopidy.models import CpTrack
from . import listener
logger = logging.getLogger('mopidy.core')
class CurrentPlaylistController(object):
"""
:param backend: backend the controller is a part of
:type backend: :class:`mopidy.backends.base.Backend`
"""
pykka_traversable = True
def __init__(self, core):

View File

@ -1,15 +1,8 @@
class LibraryController(object):
"""
:param backend: backend the controller is a part of
:type backend: :class:`mopidy.backends.base.Backend`
:param provider: provider the controller should use
:type provider: instance of :class:`BaseLibraryProvider`
"""
pykka_traversable = True
def __init__(self, backend, core):
self.backend = backend
def __init__(self, backends, core):
self.backends = backends
self.core = core
def find_exact(self, **query):
@ -29,7 +22,7 @@ class LibraryController(object):
:type query: dict
:rtype: :class:`mopidy.models.Playlist`
"""
return self.backend.library.find_exact(**query).get()
return self.backends[0].library.find_exact(**query).get()
def lookup(self, uri):
"""
@ -39,7 +32,7 @@ class LibraryController(object):
:type uri: string
:rtype: :class:`mopidy.models.Track` or :class:`None`
"""
return self.backend.library.lookup(uri).get()
return self.backends[0].library.lookup(uri).get()
def refresh(self, uri=None):
"""
@ -48,7 +41,7 @@ class LibraryController(object):
:param uri: directory or track URI
:type uri: string
"""
return self.backend.library.refresh(uri).get()
return self.backends[0].library.refresh(uri).get()
def search(self, **query):
"""
@ -67,4 +60,4 @@ class LibraryController(object):
:type query: dict
:rtype: :class:`mopidy.models.Playlist`
"""
return self.backend.library.search(**query).get()
return self.backends[0].library.search(**query).get()

View File

@ -4,7 +4,7 @@ import random
from . import listener
logger = logging.getLogger('mopidy.backends.base')
logger = logging.getLogger('mopidy.core')
def option_wrapper(name, default):
@ -37,13 +37,6 @@ class PlaybackState(object):
class PlaybackController(object):
"""
:param backend: the backend
:type backend: :class:`mopidy.backends.base.Backend`
:param provider: provider the controller should use
:type provider: instance of :class:`BasePlaybackProvider`
"""
# pylint: disable = R0902
# Too many instance attributes
@ -81,10 +74,13 @@ class PlaybackController(object):
#: Playback continues after current song.
single = option_wrapper('_single', False)
def __init__(self, audio, backend, core):
def __init__(self, audio, backends, core):
self.audio = audio
self.backend = backend
self.backends = backends
self.core = core
self._state = PlaybackState.STOPPED
self._shuffled = []
self._first_shuffle = True
@ -295,7 +291,7 @@ class PlaybackController(object):
@property
def time_position(self):
"""Time position in milliseconds."""
return self.backend.playback.get_time_position().get()
return self.backends[0].playback.get_time_position().get()
@property
def volume(self):
@ -381,7 +377,7 @@ class PlaybackController(object):
def pause(self):
"""Pause playback."""
if self.backend.playback.pause().get():
if self.backends[0].playback.pause().get():
self.state = PlaybackState.PAUSED
self._trigger_track_playback_paused()
@ -413,7 +409,7 @@ class PlaybackController(object):
if cp_track is not None:
self.current_cp_track = cp_track
self.state = PlaybackState.PLAYING
if not self.backend.playback.play(cp_track.track).get():
if not self.backends[0].playback.play(cp_track.track).get():
# Track is not playable
if self.random and self._shuffled:
self._shuffled.remove(cp_track)
@ -440,7 +436,7 @@ class PlaybackController(object):
def resume(self):
"""If paused, resume playing the current track."""
if (self.state == PlaybackState.PAUSED and
self.backend.playback.resume().get()):
self.backends[0].playback.resume().get()):
self.state = PlaybackState.PLAYING
self._trigger_track_playback_resumed()
@ -466,7 +462,7 @@ class PlaybackController(object):
self.next()
return True
success = self.backend.playback.seek(time_position).get()
success = self.backends[0].playback.seek(time_position).get()
if success:
self._trigger_seeked(time_position)
return success
@ -480,7 +476,7 @@ class PlaybackController(object):
:type clear_current_track: boolean
"""
if self.state != PlaybackState.STOPPED:
if self.backend.playback.stop().get():
if self.backends[0].playback.stop().get():
self._trigger_track_playback_ended()
self.state = PlaybackState.STOPPED
if clear_current_track:

View File

@ -1,15 +1,8 @@
class StoredPlaylistsController(object):
"""
:param backend: backend the controller is a part of
:type backend: :class:`mopidy.backends.base.Backend`
:param provider: provider the controller should use
:type provider: instance of :class:`BaseStoredPlaylistsProvider`
"""
pykka_traversable = True
def __init__(self, backend, core):
self.backend = backend
def __init__(self, backends, core):
self.backends = backends
self.core = core
@property
@ -19,11 +12,11 @@ class StoredPlaylistsController(object):
Read/write. List of :class:`mopidy.models.Playlist`.
"""
return self.backend.stored_playlists.playlists.get()
return self.backends[0].stored_playlists.playlists.get()
@playlists.setter # noqa
def playlists(self, playlists):
self.backend.stored_playlists.playlists = playlists
self.backends[0].stored_playlists.playlists = playlists
def create(self, name):
"""
@ -33,7 +26,7 @@ class StoredPlaylistsController(object):
:type name: string
:rtype: :class:`mopidy.models.Playlist`
"""
return self.backend.stored_playlists.create(name).get()
return self.backends[0].stored_playlists.create(name).get()
def delete(self, playlist):
"""
@ -42,7 +35,7 @@ class StoredPlaylistsController(object):
:param playlist: the playlist to delete
:type playlist: :class:`mopidy.models.Playlist`
"""
return self.backend.stored_playlists.delete(playlist).get()
return self.backends[0].stored_playlists.delete(playlist).get()
def get(self, **criteria):
"""
@ -83,14 +76,13 @@ class StoredPlaylistsController(object):
:type uri: string
:rtype: :class:`mopidy.models.Playlist`
"""
return self.backend.stored_playlists.lookup(uri).get()
return self.backends[0].stored_playlists.lookup(uri).get()
def refresh(self):
"""
Refresh the stored playlists in
:attr:`mopidy.backends.base.StoredPlaylistsController.playlists`.
Refresh the stored playlists in :attr:`playlists`.
"""
return self.backend.stored_playlists.refresh().get()
return self.backends[0].stored_playlists.refresh().get()
def rename(self, playlist, new_name):
"""
@ -101,7 +93,8 @@ class StoredPlaylistsController(object):
:param new_name: the new name
:type new_name: string
"""
return self.backend.stored_playlists.rename(playlist, new_name).get()
return self.backends[0].stored_playlists.rename(
playlist, new_name).get()
def save(self, playlist):
"""
@ -110,4 +103,4 @@ class StoredPlaylistsController(object):
:param playlist: the playlist
:type playlist: :class:`mopidy.models.Playlist`
"""
return self.backend.stored_playlists.save(playlist).get()
return self.backends[0].stored_playlists.save(playlist).get()