Start multiple backends

This commit is contained in:
Stein Magnus Jodal 2012-09-28 02:23:54 +02:00
parent 956655f742
commit 2d92a7a228
12 changed files with 31 additions and 25 deletions

View File

@ -54,8 +54,8 @@ def main():
check_old_folders()
setup_settings(options.interactive)
audio = setup_audio()
backend = setup_backend(audio)
core = setup_core(audio, backend)
backends = setup_backends(audio)
core = setup_core(audio, backends)
setup_frontends(core)
loop.run()
except exceptions.SettingsError as ex:
@ -68,7 +68,7 @@ def main():
loop.quit()
stop_frontends()
stop_core()
stop_backend()
stop_backends()
stop_audio()
process.stop_remaining_actors()
@ -147,16 +147,22 @@ def stop_audio():
process.stop_actors_by_class(Audio)
def setup_backend(audio):
return importing.get_class(settings.BACKENDS[0]).start(audio=audio).proxy()
def setup_backends(audio):
backends = []
for backend_class_name in settings.BACKENDS:
backend_class = importing.get_class(backend_class_name)
backend = backend_class.start(audio=audio).proxy()
backends.append(backend)
return backends
def stop_backend():
process.stop_actors_by_class(importing.get_class(settings.BACKENDS[0]))
def stop_backends():
for backend_class_name in settings.BACKENDS:
process.stop_actors_by_class(importing.get_class(backend_class_name))
def setup_core(audio, backend):
return Core.start(audio=audio, backend=backend).proxy()
def setup_core(audio, backends):
return Core.start(audio=audio, backends=backends).proxy()
def stop_core():

View File

@ -25,25 +25,25 @@ class Core(pykka.ThreadingActor, AudioListener):
#: :class:`mopidy.core.StoredPlaylistsController`.
stored_playlists = None
def __init__(self, audio=None, backend=None):
def __init__(self, audio=None, backends=None):
super(Core, self).__init__()
self._backend = backend
self._backends = backends
self.current_playlist = CurrentPlaylistController(core=self)
self.library = LibraryController(backend=backend, core=self)
self.library = LibraryController(backend=backends[0], core=self)
self.playback = PlaybackController(
audio=audio, backend=backend, core=self)
audio=audio, backend=backends[0], core=self)
self.stored_playlists = StoredPlaylistsController(
backend=backend, core=self)
backend=backends[0], core=self)
@property
def uri_schemes(self):
"""List of URI schemes we can handle"""
return self._backend.uri_schemes.get()
return self._backends[0].uri_schemes.get()
def reached_end_of_stream(self):
self.playback.on_end_of_track()

View File

@ -16,7 +16,7 @@ class CurrentPlaylistControllerTest(object):
def setUp(self):
self.audio = mock.Mock(spec=audio.Audio)
self.backend = self.backend_class.start(audio=self.audio).proxy()
self.core = core.Core(audio=audio, backend=self.backend)
self.core = core.Core(audio=audio, backends=[self.backend])
self.controller = self.core.current_playlist
self.playback = self.core.playback

View File

@ -23,7 +23,7 @@ class LibraryControllerTest(object):
def setUp(self):
self.backend = self.backend_class.start(audio=None).proxy()
self.core = core.Core(backend=self.backend)
self.core = core.Core(backends=[self.backend])
self.library = self.core.library
def tearDown(self):

View File

@ -18,7 +18,7 @@ class PlaybackControllerTest(object):
def setUp(self):
self.audio = mock.Mock(spec=audio.Audio)
self.backend = self.backend_class.start(audio=self.audio).proxy()
self.core = core.Core(backend=self.backend)
self.core = core.Core(backends=[self.backend])
self.playback = self.core.playback
self.current_playlist = self.core.current_playlist

View File

@ -18,7 +18,7 @@ class StoredPlaylistsControllerTest(object):
self.audio = mock.Mock(spec=audio.Audio)
self.backend = self.backend_class.start(audio=self.audio).proxy()
self.core = core.Core(backend=self.backend)
self.core = core.Core(backends=[self.backend])
self.stored = self.core.stored_playlists
def tearDown(self):

View File

@ -13,7 +13,7 @@ class BackendEventsTest(unittest.TestCase):
def setUp(self):
self.audio = mock.Mock(spec=audio.Audio)
self.backend = dummy.DummyBackend.start(audio=audio).proxy()
self.core = core.Core.start(backend=self.backend).proxy()
self.core = core.Core.start(backends=[self.backend]).proxy()
def tearDown(self):
pykka.ActorRegistry.stop_all()

View File

@ -12,7 +12,7 @@ from tests import unittest
class MpdDispatcherTest(unittest.TestCase):
def setUp(self):
self.backend = dummy.DummyBackend.start(audio=None).proxy()
self.core = core.Core.start(backend=self.backend).proxy()
self.core = core.Core.start(backends=[self.backend]).proxy()
self.dispatcher = MpdDispatcher()
def tearDown(self):

View File

@ -23,7 +23,7 @@ class MockConnection(mock.Mock):
class BaseTestCase(unittest.TestCase):
def setUp(self):
self.backend = dummy.DummyBackend.start(audio=None).proxy()
self.core = core.Core.start(backend=self.backend).proxy()
self.core = core.Core.start(backends=[self.backend]).proxy()
self.connection = MockConnection()
self.session = session.MpdSession(self.connection, core=self.core)

View File

@ -21,7 +21,7 @@ STOPPED = PlaybackState.STOPPED
class StatusHandlerTest(unittest.TestCase):
def setUp(self):
self.backend = dummy.DummyBackend.start(audio=None).proxy()
self.core = core.Core.start(backend=self.backend).proxy()
self.core = core.Core.start(backends=[self.backend]).proxy()
self.dispatcher = dispatcher.MpdDispatcher(core=self.core)
self.context = self.dispatcher.context

View File

@ -25,7 +25,7 @@ class PlayerInterfaceTest(unittest.TestCase):
def setUp(self):
objects.MprisObject._connect_to_dbus = mock.Mock()
self.backend = dummy.DummyBackend.start(audio=None).proxy()
self.core = core.Core.start(backend=self.backend).proxy()
self.core = core.Core.start(backends=[self.backend]).proxy()
self.mpris = objects.MprisObject(core=self.core)
def tearDown(self):

View File

@ -20,7 +20,7 @@ class RootInterfaceTest(unittest.TestCase):
objects.exit_process = mock.Mock()
objects.MprisObject._connect_to_dbus = mock.Mock()
self.backend = dummy.DummyBackend.start(audio=None).proxy()
self.core = core.Core.start(backend=self.backend).proxy()
self.core = core.Core.start(backends=[self.backend]).proxy()
self.mpris = objects.MprisObject(core=self.core)
def tearDown(self):