Add MprisFrontend that connects to D-Bus' SystemBus

This commit is contained in:
Stein Magnus Jodal 2010-10-27 14:06:44 +02:00
parent 0371698706
commit e91b39c38b
2 changed files with 68 additions and 0 deletions

67
mopidy/frontends/mpris.py Normal file
View File

@ -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

View File

@ -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`.