Give the core controllers a list of backends
This commit is contained in:
parent
2d92a7a228
commit
a5af7290ad
@ -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):
|
||||
|
||||
@ -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):
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user