main: Stop only the mixer actor that we now is running

This commit is contained in:
Stein Magnus Jodal 2014-07-09 21:16:09 +02:00
parent 4807bd275a
commit 64ecd7643a

View File

@ -261,13 +261,13 @@ class RootCommand(Command):
def run(self, args, config):
loop = gobject.MainLoop()
mixer_classes = args.registry['mixer']
mixer_class = self.get_mixer_class(config, args.registry['mixer'])
backend_classes = args.registry['backend']
frontend_classes = args.registry['frontend']
try:
audio = self.start_audio(config)
mixer = self.start_mixer(config, audio, mixer_classes)
mixer = self.start_mixer(config, mixer_class, audio)
backends = self.start_backends(config, backend_classes, audio)
core = self.start_core(mixer, backends)
self.start_frontends(config, frontend_classes, core)
@ -279,11 +279,26 @@ class RootCommand(Command):
loop.quit()
self.stop_frontends(frontend_classes)
self.stop_core()
self.stop_mixer(mixer_classes)
self.stop_mixer(mixer_class)
self.stop_backends(backend_classes)
self.stop_audio()
process.stop_remaining_actors()
def get_mixer_class(self, config, mixer_classes):
logger.debug(
'Available Mopidy mixers: %s',
', '.join(m.__name__ for m in mixer_classes) or 'none')
selected_mixers = [
m for m in mixer_classes if m.name == config['audio']['mixer']]
if len(selected_mixers) != 1:
logger.error(
'Did not find unique mixer "%s". Alternatives are: %s',
config['audio']['mixer'],
', '.join([m.name for m in mixer_classes]))
process.exit_process()
return selected_mixers[0]
def start_audio(self, config):
logger.info('Starting Mopidy audio')
return Audio.start(config=config).proxy()
@ -300,21 +315,7 @@ class RootCommand(Command):
return backends
def start_mixer(self, config, audio, mixer_classes):
logger.debug(
'Available Mopidy mixers: %s',
', '.join(m.__name__ for m in mixer_classes) or 'none')
selected_mixers = [
m for m in mixer_classes if m.name == config['audio']['mixer']]
if len(selected_mixers) != 1:
logger.error(
'Did not find unique mixer "%s". Alternatives are: %s',
config['audio']['mixer'],
', '.join([m.name for m in mixer_classes]))
process.exit_process()
mixer_class = selected_mixers[0]
def start_mixer(self, config, mixer_class, audio):
logger.info('Starting Mopidy mixer: %s', mixer_class.__name__)
mixer = mixer_class.start(config=config, audio=audio).proxy()
@ -348,10 +349,9 @@ class RootCommand(Command):
logger.info('Stopping Mopidy core')
process.stop_actors_by_class(Core)
def stop_mixer(self, mixer_classes):
def stop_mixer(self, mixer_class):
logger.info('Stopping Mopidy mixer')
for mixer_class in mixer_classes:
process.stop_actors_by_class(mixer_class)
process.stop_actors_by_class(mixer_class)
def stop_backends(self, backend_classes):
logger.info('Stopping Mopidy backends')