diff --git a/mopidy/frontends/mpris.py b/mopidy/frontends/mpris.py new file mode 100644 index 00000000..95521d10 --- /dev/null +++ b/mopidy/frontends/mpris.py @@ -0,0 +1,67 @@ +import logging +import multiprocessing +import socket +import time + +try: + import dbus +except ImportError as import_error: + from mopidy import OptionalDependencyError + raise OptionalDependencyError(import_error) + +from mopidy import get_version, settings, SettingsError +from mopidy.frontends.base import BaseFrontend +from mopidy.utils.process import BaseThread + +logger = logging.getLogger('mopidy.frontends.mpris') + +BUS_NAME = u'org.mpris.MediaPlayer2.mopidy' + +class MprisFrontend(BaseFrontend): + """ + Frontend which lets you control Mopidy through the Media Player Remote + Interfacing Specification (MPRIS) D-Bus interface. + + An example of an MPRIS client is Ubuntu's audio indicator applet. + + **Dependencies:** + + - ``dbus`` Python bindings. The package is named ``python-dbus`` in + Ubuntu/Debian. + """ + + def __init__(self, *args, **kwargs): + super(MprisFrontend, self).__init__(*args, **kwargs) + (self.connection, other_end) = multiprocessing.Pipe() + self.thread = MprisFrontendThread(self.core_queue, other_end) + + def start(self): + self.thread.start() + + def destroy(self): + self.thread.destroy() + + def process_message(self, message): + self.connection.send(message) + + +class MprisFrontendThread(BaseThread): + def __init__(self, core_queue, connection): + super(MprisFrontendThread, self).__init__(core_queue) + self.name = u'MprisFrontendThread' + self.connection = connection + self.bus = None + + def run_inside_try(self): + self.setup() + while True: + self.connection.poll(None) + message = self.connection.recv() + self.process_message(message) + + def setup(self): + self.bus = dbus.SystemBus() + logger.info(u'Connected to D-Bus/MPRIS') + + def process_message(self, message): + pass # Ignore commands for other frontends diff --git a/mopidy/settings.py b/mopidy/settings.py index c9d7b9fc..eb3a3874 100644 --- a/mopidy/settings.py +++ b/mopidy/settings.py @@ -52,6 +52,7 @@ DEBUG_LOG_FILENAME = u'mopidy.log' FRONTENDS = ( u'mopidy.frontends.mpd.MpdFrontend', u'mopidy.frontends.lastfm.LastfmFrontend', + u'mopidy.frontends.mpris.MprisFrontend', ) #: Which GStreamer audio sink to use in :mod:`mopidy.outputs.gstreamer`.