Code: Alles auswählen
#!/usr/bin/env python
# MPD API
import os
import dbus
import string
import gobject
import mpdclient
from GenericPlayer import GenericAPI
class MPDAPI(GenericAPI):
__name__ = 'MPD API'
__version__ = '0.1'
__author__ = 'mots'
__desc__ = 'API to the Music Player Daemon'
host='localhost'
port=6600
playerAPI = None
__timeout = None
__interval = 2
callbackFn = None
__curplaying = None
# Extended Functions from the GenericAPI
def __init__(self, session_bus):
GenericAPI.__init__(self, session_bus)
def is_active(self, dbus_iface):
try:
self.mpd = mpdclient.MpdController(host,port)
return True
except:
return False
def connect(self):
self.playerAPI = self.mpd
def get_title(self):
return self.playerAPI.getCurrentSong().title
def get_album(self):
return self.playerAPI.getCurrentSong().album
def get_artist(self):
return self.playerAPI.getCurrentSong().artist
def get_cover_path(self):
#return self.playerAPI.GetPlayingCoverUri()
def is_playing(self):
if self.playerAPI.status().stateStr() == 'play': return True
else: return False
def play_pause(self):
if self.playerAPI.status().stateStr() == 'play':
self.playerAPI.pause()
else:
self.playerAPI.play()
def next(self):
self.playerAPI.next()
def previous(self):
self.playerAPI.prev()
def register_change_callback(self, fn):
self.callback_fn = fn
# Could not find a callback signal for MPD, so just calling after some time interval
if self.__timeout:
gobject.source_remove(self.__timeout)
self.__timeout = gobject.timeout_add(self.__interval * 1000, self.info_changed)
def info_changed(self, signal=None):
# Only call the callback function if Data has changed
if self.__timeout:
gobject.source_remove(self.__timeout)
try:
if self.__curplaying != None and not self.is_playing():
self.__curplaying = None
self.callback_fn()
playinguri = self.playerAPI.GetPlayingUri()
if self.is_playing() and self.__curplaying != playinguri:
self.__curplaying = playinguri
self.callback_fn()
self.__timeout = gobject.timeout_add(self.__interval * 1000, self.info_changed)
except:
# The player exited ? call callback function
self.callback_fn()