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()