Exemple #1
0
    def run(self, args, config):
        def on_sigterm(loop):
            logger.info("GLib mainloop got SIGTERM. Exiting...")
            loop.quit()

        loop = GLib.MainLoop()
        GLib.unix_signal_add(
            GLib.PRIORITY_DEFAULT, signal.SIGTERM, on_sigterm, loop
        )

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

        exit_status_code = 0
        try:
            mixer = None
            if mixer_class is not None:
                mixer = self.start_mixer(config, mixer_class)
            if mixer:
                self.configure_mixer(config, mixer)
            audio = self.start_audio(config, mixer)
            backends = self.start_backends(config, backend_classes, audio)
            core = self.start_core(config, mixer, backends, audio)
            self.start_frontends(config, frontend_classes, core)
            logger.info("Starting GLib mainloop")
            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(core)
            self.stop_backends(backend_classes)
            self.stop_audio()
            if mixer_class is not None:
                self.stop_mixer(mixer_class)
            process.stop_remaining_actors()
            return exit_status_code
Exemple #2
0
    def run(self, args, config):
        def on_sigterm(loop):
            logger.info('GLib mainloop got SIGTERM. Exiting...')
            loop.quit()

        loop = GLib.MainLoop()
        GLib.unix_signal_add(
            GLib.PRIORITY_DEFAULT, signal.SIGTERM, on_sigterm, loop)

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

        exit_status_code = 0
        try:
            mixer = None
            if mixer_class is not None:
                mixer = self.start_mixer(config, mixer_class)
            if mixer:
                self.configure_mixer(config, mixer)
            audio = self.start_audio(config, mixer)
            backends = self.start_backends(config, backend_classes, audio)
            core = self.start_core(config, mixer, backends, audio)
            self.start_frontends(config, frontend_classes, core)
            logger.info('Starting GLib mainloop')
            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(core)
            self.stop_backends(backend_classes)
            self.stop_audio()
            if mixer_class is not None:
                self.stop_mixer(mixer_class)
            process.stop_remaining_actors()
            return exit_status_code
Exemple #3
0
import pykka
from pykka.messages import ProxyCall

from mopidy import config as config_lib
from mopidy import exceptions
from mopidy.audio import Audio
from mopidy.core import Core
from mopidy.internal import deps, process, timer, versioning
from mopidy.internal.gi import GLib

logger = logging.getLogger(__name__)

_default_config = [
    (pathlib.Path(base) / "mopidy" / "mopidy.conf").resolve()
    for base in GLib.get_system_config_dirs() + [GLib.get_user_config_dir()]
]
DEFAULT_CONFIG = ":".join(map(str, _default_config))


def config_files_type(value):
    return value.split(":")


def config_override_type(value):
    try:
        section, remainder = value.split("/", 1)
        key, value = remainder.split("=", 1)
        return (section.strip(), key.strip(), value.strip())
    except ValueError:
        raise argparse.ArgumentTypeError(
 def periodic_save_state(self):
     self.save_state()
     GLib.timeout_add_seconds(self.config["savestateperiod"]["period"],
                              self.periodic_save_state)
 def on_start(self):
     GLib.timeout_add_seconds(self.config["savestateperiod"]["period"],
                              self.periodic_save_state)
Exemple #6
0
    def test_xdg_subsititution(self):
        expected = GLib.get_user_data_dir() + "/foo"
        result = path.expand_path("$XDG_DATA_DIR/foo")

        assert str(result) == expected
Exemple #7
0
 def test_xdg_subsititution(self):
     self.assertEqual(
         GLib.get_user_data_dir() + b'/foo',
         path.expand_path(b'$XDG_DATA_DIR/foo'))
Exemple #8
0
import os
import signal
import sys

import pykka

from mopidy import config as config_lib, exceptions
from mopidy.audio import Audio
from mopidy.core import Core
from mopidy.internal import deps, process, timer, versioning
from mopidy.internal.gi import GLib

logger = logging.getLogger(__name__)

_default_config = []
for base in GLib.get_system_config_dirs() + [GLib.get_user_config_dir()]:
    _default_config.append(os.path.join(base, b'mopidy', b'mopidy.conf'))
DEFAULT_CONFIG = b':'.join(_default_config)


def config_files_type(value):
    return value.split(b':')


def config_override_type(value):
    try:
        section, remainder = value.split(b'/', 1)
        key, value = remainder.split(b'=', 1)
        return (section.strip(), key.strip(), value.strip())
    except ValueError:
        raise argparse.ArgumentTypeError(