main: Log and exit if {Backend,Frontend,Mixer}Error is raised

This commit is contained in:
Stein Magnus Jodal 2014-07-09 23:20:10 +02:00
parent bb269688c6
commit 95bddf666b

View File

@ -10,7 +10,7 @@ import glib
import gobject
from mopidy import config as config_lib
from mopidy import config as config_lib, exceptions
from mopidy.audio import Audio
from mopidy.core import Core
from mopidy.utils import deps, process, versioning
@ -272,9 +272,12 @@ class RootCommand(Command):
core = self.start_core(mixer, backends)
self.start_frontends(config, frontend_classes, core)
loop.run()
except (exceptions.BackendError,
exceptions.FrontendError,
exceptions.MixerError):
logger.info('Initialization error. Exiting...')
except KeyboardInterrupt:
logger.info('Interrupted. Exiting...')
return
finally:
loop.quit()
self.stop_frontends(frontend_classes)
@ -310,15 +313,31 @@ class RootCommand(Command):
backends = []
for backend_class in backend_classes:
backend = backend_class.start(config=config, audio=audio).proxy()
backends.append(backend)
try:
backend = backend_class.start(
config=config, audio=audio).proxy()
backends.append(backend)
except exceptions.BackendError as exc:
logger.error(
'Backend (%s) initialization error: %s',
backend_class.__name__, exc.message)
raise
return backends
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()
try:
logger.info('Starting Mopidy mixer: %s', mixer_class.__name__)
mixer = mixer_class.start(config=config, audio=audio).proxy()
self.configure_mixer(config, mixer)
return mixer
except exceptions.MixerError as exc:
logger.error(
'Mixer (%s) initialization error: %s',
mixer_class.__name__, exc.message)
raise
def configure_mixer(self, config, mixer):
volume = config['audio']['mixer_volume']
if volume is not None:
mixer.set_volume(volume)
@ -326,8 +345,6 @@ class RootCommand(Command):
else:
logger.debug('Mixer volume left unchanged')
return mixer
def start_core(self, mixer, backends):
logger.info('Starting Mopidy core')
return Core.start(mixer=mixer, backends=backends).proxy()
@ -338,7 +355,13 @@ class RootCommand(Command):
', '.join(f.__name__ for f in frontend_classes) or 'none')
for frontend_class in frontend_classes:
frontend_class.start(config=config, core=core)
try:
frontend_class.start(config=config, core=core)
except exceptions.FrontendError as exc:
logger.error(
'Frontend (%s) initialization error: %s',
frontend_class.__name__, exc.message)
raise
def stop_frontends(self, frontend_classes):
logger.info('Stopping Mopidy frontends')