Example #1
0
def main():
    signal.signal(signal.SIGTERM, process.exit_handler)
    signal.signal(signal.SIGUSR1, pykka.debug.log_thread_tracebacks)

    loop = gobject.MainLoop()
    options = parse_options()

    try:
        log.setup_logging(options.verbosity_level, options.save_debug_log)
        check_old_folders()
        setup_settings(options.interactive)
        audio = setup_audio()
        backends = setup_backends(audio)
        core = setup_core(audio, backends)
        setup_frontends(core)
        loop.run()
    except exceptions.SettingsError as ex:
        logger.error(ex.message)
    except KeyboardInterrupt:
        logger.info('Interrupted. Exiting...')
    except Exception as ex:
        logger.exception(ex)
    finally:
        loop.quit()
        stop_frontends()
        stop_core()
        stop_backends()
        stop_audio()
        process.stop_remaining_actors()
Example #2
0
    def run(self, args, config):
        loop = gobject.MainLoop()

        mixer_class = self.get_mixer_class(config, args.registry['mixer'])
        backend_classes = args.registry['backend']
        frontend_classes = args.registry['frontend']

        exit_status_code = 0
        try:
            mixer = self.start_mixer(config, mixer_class)
            audio = self.start_audio(config, mixer)
            backends = self.start_backends(config, backend_classes, audio)
            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...')
            exit_status_code = 1
        except KeyboardInterrupt:
            logger.info('Interrupted. Exiting...')
        except Exception:
            logger.exception('Uncaught exception')
        finally:
            loop.quit()
            self.stop_frontends(frontend_classes)
            self.stop_core()
            self.stop_backends(backend_classes)
            self.stop_audio()
            self.stop_mixer(mixer_class)
            process.stop_remaining_actors()
            return exit_status_code
Example #3
0
def main():
    signal.signal(signal.SIGTERM, exit_handler)
    loop = gobject.MainLoop()
    try:
        options = parse_options()
        setup_logging(options.verbosity_level, options.save_debug_log)
        check_old_folders()
        setup_settings(options.interactive)
        setup_gstreamer()
        setup_mixer()
        setup_backend()
        setup_frontends()
        loop.run()
    except SettingsError as e:
        logger.error(e.message)
    except KeyboardInterrupt:
        logger.info(u'Interrupted. Exiting...')
    except Exception as e:
        logger.exception(e)
    finally:
        loop.quit()
        stop_frontends()
        stop_backend()
        stop_mixer()
        stop_gstreamer()
        stop_remaining_actors()
Example #4
0
def main():
    signal.signal(signal.SIGTERM, exit_handler)
    loop = gobject.MainLoop()
    try:
        options = parse_options()
        setup_logging(options.verbosity_level, options.save_debug_log)
        check_old_folders()
        setup_settings(options.interactive)
        setup_gstreamer()
        setup_mixer()
        setup_backend()
        setup_frontends()
        loop.run()
    except SettingsError as e:
        logger.error(e.message)
    except KeyboardInterrupt:
        logger.info(u'Interrupted. Exiting...')
    except Exception as e:
        logger.exception(e)
    finally:
        loop.quit()
        stop_frontends()
        stop_backend()
        stop_mixer()
        stop_gstreamer()
        stop_remaining_actors()
Example #5
0
    def run(self, args, config):
        loop = gobject.MainLoop()

        mixer_class = self.get_mixer_class(config, args.registry['mixer'])
        backend_classes = args.registry['backend']
        frontend_classes = args.registry['frontend']

        exit_status_code = 0
        try:
            mixer = self.start_mixer(config, mixer_class)
            audio = self.start_audio(config, mixer)
            backends = self.start_backends(config, backend_classes, audio)
            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...')
            exit_status_code = 1
        except KeyboardInterrupt:
            logger.info('Interrupted. Exiting...')
        except Exception:
            logger.exception('Uncaught exception')
        finally:
            loop.quit()
            self.stop_frontends(frontend_classes)
            self.stop_core()
            self.stop_backends(backend_classes)
            self.stop_audio()
            self.stop_mixer(mixer_class)
            process.stop_remaining_actors()
            return exit_status_code
Example #6
0
    def run(self, args, config):
        loop = gobject.MainLoop()

        mixer_class = self.get_mixer_class(config, args.registry["mixer"])
        backend_classes = args.registry["backend"]
        frontend_classes = args.registry["frontend"]

        try:
            mixer = self.start_mixer(config, mixer_class)
            audio = self.start_audio(config, mixer)
            backends = self.start_backends(config, backend_classes, audio)
            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...")
        finally:
            loop.quit()
            self.stop_frontends(frontend_classes)
            self.stop_core()
            self.stop_backends(backend_classes)
            self.stop_audio()
            self.stop_mixer(mixer_class)
            process.stop_remaining_actors()
Example #7
0
 def run(self, args, config, extensions):
     loop = gobject.MainLoop()
     try:
         audio = self.start_audio(config)
         backends = self.start_backends(config, extensions, audio)
         core = self.start_core(audio, backends)
         self.start_frontends(config, extensions, core)
         loop.run()
     except KeyboardInterrupt:
         logger.info("Interrupted. Exiting...")
         return
     finally:
         loop.quit()
         self.stop_frontends(extensions)
         self.stop_core()
         self.stop_backends(extensions)
         self.stop_audio()
         process.stop_remaining_actors()
Example #8
0
def start(config, extensions):
    loop = gobject.MainLoop()
    try:
        audio = start_audio(config)
        backends = start_backends(config, extensions, audio)
        core = start_core(audio, backends)
        start_frontends(config, extensions, core)
        loop.run()
    except KeyboardInterrupt:
        logger.info('Interrupted. Exiting...')
        return
    finally:
        loop.quit()
        stop_frontends(extensions)
        stop_core()
        stop_backends(extensions)
        stop_audio()
        process.stop_remaining_actors()
Example #9
0
    def run(self, args, config):
        loop = gobject.MainLoop()

        backend_classes = args.registry['backend']
        frontend_classes = args.registry['frontend']

        try:
            audio = self.start_audio(config)
            backends = self.start_backends(config, backend_classes, audio)
            core = self.start_core(audio, backends)
            self.start_frontends(config, frontend_classes, core)
            loop.run()
        except KeyboardInterrupt:
            logger.info('Interrupted. Exiting...')
            return
        finally:
            loop.quit()
            self.stop_frontends(frontend_classes)
            self.stop_core()
            self.stop_backends(backend_classes)
            self.stop_audio()
            process.stop_remaining_actors()
Example #10
0
def main():
    signal.signal(signal.SIGTERM, process.exit_handler)
    signal.signal(signal.SIGUSR1, pykka.debug.log_thread_tracebacks)

    loop = gobject.MainLoop()
    options = parse_options()
    config_files = options.config.split(b':')
    config_overrides = options.overrides

    enabled_extensions = []  # Make sure it is defined before the finally block
    logging_initialized = False

    # TODO: figure out a way to make the boilerplate in this file reusable in
    # scanner and other places we need it.

    try:
        # Initial config without extensions to bootstrap logging.
        logging_config, _ = config_lib.load(config_files, [], config_overrides)

        # TODO: setup_logging needs defaults in-case config values are None
        log.setup_logging(logging_config, options.verbosity_level,
                          options.save_debug_log)
        logging_initialized = True

        installed_extensions = ext.load_extensions()

        # TODO: wrap config in RO proxy.
        config, config_errors = config_lib.load(config_files,
                                                installed_extensions,
                                                config_overrides)

        # Filter out disabled extensions and remove any config errors for them.
        for extension in installed_extensions:
            enabled = config[extension.ext_name]['enabled']
            if ext.validate_extension(extension) and enabled:
                enabled_extensions.append(extension)
            elif extension.ext_name in config_errors:
                del config_errors[extension.ext_name]

        log_extension_info(installed_extensions, enabled_extensions)
        check_config_errors(config_errors)

        # Read-only config from here on, please.
        proxied_config = config_lib.Proxy(config)

        log.setup_log_levels(proxied_config)
        create_file_structures()
        check_old_locations()
        ext.register_gstreamer_elements(enabled_extensions)

        # Anything that wants to exit after this point must use
        # mopidy.utils.process.exit_process as actors have been started.
        audio = setup_audio(proxied_config)
        backends = setup_backends(proxied_config, enabled_extensions, audio)
        core = setup_core(audio, backends)
        setup_frontends(proxied_config, enabled_extensions, core)
        loop.run()
    except KeyboardInterrupt:
        if logging_initialized:
            logger.info('Interrupted. Exiting...')
    except Exception as ex:
        if logging_initialized:
            logger.exception(ex)
        raise
    finally:
        loop.quit()
        stop_frontends(enabled_extensions)
        stop_core()
        stop_backends(enabled_extensions)
        stop_audio()
        process.stop_remaining_actors()
Example #11
0
def main():
    signal.signal(signal.SIGTERM, process.exit_handler)
    signal.signal(signal.SIGUSR1, pykka.debug.log_thread_tracebacks)

    loop = gobject.MainLoop()
    options = parse_options()
    config_files = options.config.split(b':')
    config_overrides = options.overrides

    enabled_extensions = []  # Make sure it is defined before the finally block
    logging_initialized = False

    # TODO: figure out a way to make the boilerplate in this file reusable in
    # scanner and other places we need it.

    try:
        # Initial config without extensions to bootstrap logging.
        logging_config, _ = config_lib.load(config_files, [], config_overrides)

        # TODO: setup_logging needs defaults in-case config values are None
        log.setup_logging(
            logging_config, options.verbosity_level, options.save_debug_log)
        logging_initialized = True

        installed_extensions = ext.load_extensions()

        # TODO: wrap config in RO proxy.
        config, config_errors = config_lib.load(
            config_files, installed_extensions, config_overrides)

        # Filter out disabled extensions and remove any config errors for them.
        for extension in installed_extensions:
            enabled = config[extension.ext_name]['enabled']
            if ext.validate_extension(extension) and enabled:
                enabled_extensions.append(extension)
            elif extension.ext_name in config_errors:
                del config_errors[extension.ext_name]

        log_extension_info(installed_extensions, enabled_extensions)
        check_config_errors(config_errors)

        # Read-only config from here on, please.
        proxied_config = config_lib.Proxy(config)

        log.setup_log_levels(proxied_config)
        create_file_structures()
        check_old_locations()
        ext.register_gstreamer_elements(enabled_extensions)

        # Anything that wants to exit after this point must use
        # mopidy.utils.process.exit_process as actors have been started.
        audio = setup_audio(proxied_config)
        backends = setup_backends(proxied_config, enabled_extensions, audio)
        core = setup_core(audio, backends)
        setup_frontends(proxied_config, enabled_extensions, core)
        loop.run()
    except KeyboardInterrupt:
        if logging_initialized:
            logger.info('Interrupted. Exiting...')
    except Exception as ex:
        if logging_initialized:
            logger.exception(ex)
        raise
    finally:
        loop.quit()
        stop_frontends(enabled_extensions)
        stop_core()
        stop_backends(enabled_extensions)
        stop_audio()
        process.stop_remaining_actors()