Ticket #3946: mpd.diff

File mpd.diff, 3.2 kB (added by Florob, 6 months ago)
  • src/music_track_listener.py

    diff --git a/src/music_track_listener.py b/src/music_track_listener.py
    index 12f0344..1cb4494 100644
    a b  
    9595                        self.banshee_props ={} 
    9696                        gobject.timeout_add_seconds(1, self._banshee_check_track_status) 
    9797 
     98                ## MPD 
     99                try: 
     100                        import mpd 
     101                        self.mpdclient = mpd.MPDClient() 
     102                        self.mpd_host = 'localhost' 
     103                        self.mpd_port = 6600 
     104                        if os.environ.has_key('MPD_HOST'): 
     105                                self.mpd_host = os.environ['MPD_HOST'] 
     106                        if os.environ.has_key('MPD_PORT'): 
     107                                self.mpd_port = os.environ['MPD_PORT'] 
     108                        self.mpdclient.connect(self.mpd_host, self.mpd_port) 
     109                        self.mpd_exists = True 
     110                        self.mpd_is_here = True 
     111                        self.mpd_current_song = None 
     112                        self.mpd_paused_before = False 
     113                        gobject.timeout_add_seconds(10, self._mpd_check_status) 
     114                        gobject.timeout_add_seconds(1, self._mpd_check_track_status) 
     115                except: 
     116                        self.mpd_exists = False 
     117                        self.mpd_is_here = False 
     118 
    98119        def _check_if_banshee_bus(self): 
    99120                if self.dubus_methods.NameHasOwner('org.gnome.Banshee'): 
    100121                        self._get_banshee_bus() 
     
    222243                        False: 
    223244                                self.emit('music-track-changed', info) 
    224245                                self.banshee_paused_before = True 
    225                         else:  
    226                                 if self.banshee_paused_before and self.banshee_props['paused'] == 1: 
    227                                         self.emit('music-track-changed', info) 
    228                                         self.banshee_paused_before = False 
     246                        elif self.banshee_paused_before and self.banshee_props['paused'] == 1: 
     247                                self.emit('music-track-changed', info) 
     248                                self.banshee_paused_before = False 
    229249                        self.current_banshee_title = self.banshee_props['title'] 
    230250                return 1 
    231251 
     
    242262                info.paused = props['paused'] 
    243263                return info 
    244264 
     265        def _mpd_check_status(self): 
     266                if self.mpd_exists is True: 
     267                        try: 
     268                                self.mpdclient.status() 
     269                                self.mpd_is_here = True 
     270                        except: 
     271                                try: 
     272                                        self.mpdclient.disconnect() 
     273                                        self.mpdclient.connect(self.mpd_host, self.mpd_port) 
     274                                        self.mpd_is_here = True 
     275                                except: 
     276                                        self.mpd_is_here = False 
     277                return True 
     278 
     279        def _mpd_check_track_status(self): 
     280                if not self.mpd_is_here: 
     281                        return 
     282 
     283                try: 
     284                        self.mpd_song = self.mpdclient.currentsong() 
     285                        if self.mpdclient.status()['state'] == 'pause': 
     286                                self.mpd_paused =  0 
     287                        else: 
     288                                self.mpd_paused = 1 
     289 
     290                        info =  MusicTrackInfo() 
     291                        info.title = self.mpd_song['title'] 
     292                        info.album = self.mpd_song['album'] 
     293                        info.artist = self.mpd_song['artist'] 
     294                        info.duration = self.mpd_song['time'] 
     295                        info.track_number = self.mpd_song['track'] 
     296                        info.paused = self.mpd_paused 
     297                except: 
     298                        info = None 
     299                        self.mpd_paused = 0 
     300                        self.mpd_is_here = False 
     301 
     302                if self.mpd_current_song != self.mpd_song: 
     303                        self.emit('music-track-changed', info) 
     304                        self.mpd_current_song = self.mpd_song 
     305                if self.mpd_paused == 1 and self.mpd_paused_before == False: 
     306                        self.emit('music-track-changed', info) 
     307                        self.mpd_paused_before = True 
     308                elif self.mpd_paused == 0 and self.mpd_paused_before == True: 
     309                        self.emit('music-track-changed', info) 
     310                        self.mpd_paused_before = False 
     311                return True 
     312 
    245313        def get_playing_track(self): 
    246314                '''Return a MusicTrackInfo for the currently playing 
    247315                song, or None if no song is playing'''