Show
Ignore:
Timestamp:
08/30/07 22:33:19 (15 months ago)
Author:
roidelapluie
Message:

0.11.2: [tristil] better banshee music player support. fixes #2940

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branches/gajim_0.11.1/src/music_track_listener.py

    r7940 r8631  
    2525 
    2626class MusicTrackInfo(object): 
    27         __slots__ = ['title', 'album', 'artist', 'duration', 'track_number'] 
     27        __slots__ = ['title', 'album', 'artist', 'duration', 'track_number', 
     28                'paused'] 
    2829 
    2930 
     
    6465                ## Banshee 
    6566                banshee_bus = dbus.SessionBus() 
    66                 dubus = banshee_bus.get_object('org.freedesktop.DBus', '/org/freedesktop/dbus') 
     67                dubus = banshee_bus.get_object('org.freedesktop.DBus', 
     68                        '/org/freedesktop/dbus') 
    6769                self.dubus_methods = dbus.Interface(dubus, 'org.freedesktop.DBus') 
     70                self.current_banshee_title = '' 
     71                self.banshee_paused_before = False 
     72                self.banshee_is_here = False 
     73                gobject.timeout_add(10000, self._check_if_banshee_bus) 
    6874                if self.dubus_methods.NameHasOwner('org.gnome.Banshee'): 
    6975                        self._get_banshee_bus() 
     76                        self.banshee_is_here = True 
    7077                # Otherwise, it opens Banshee! 
    7178                self.banshee_props ={} 
    72                 self.current_banshee_title = '' 
    7379                gobject.timeout_add(1000, self._banshee_check_track_status) 
    74  
     80         
     81        def _check_if_banshee_bus(self): 
     82                if self.dubus_methods.NameHasOwner('org.gnome.Banshee'): 
     83                        self._get_banshee_bus() 
     84                        self.banshee_is_here = True 
     85                else: 
     86                        self.banshee_is_here = False 
     87                return True 
     88 
     89                 
    7590        def _get_banshee_bus(self): 
    7691                bus = dbus.SessionBus() 
     
    130145                        self._get_banshee_bus() 
    131146 
    132                 if self.dubus_methods.NameHasOwner('org.gnome.Banshee'): 
    133                         self.banshee_props['title'] = self.banshee_methods.GetPlayingTitle() 
    134                         self.banshee_props['album'] = self.banshee_methods.GetPlayingAlbum() 
    135                         self.banshee_props['artist'] = self.banshee_methods.GetPlayingArtist() 
    136                         self.banshee_props['duration'] = \ 
     147                if self.dubus_methods.NameHasOwner('org.gnome.Banshee') and self.banshee_is_here: 
     148                        try: 
     149                                self.banshee_props['title'] = self.banshee_methods.GetPlayingTitle() 
     150                                self.banshee_props['album'] = self.banshee_methods.GetPlayingAlbum() 
     151                                self.banshee_props['artist'] = self.banshee_methods.\ 
     152                                        GetPlayingArtist() 
     153                                self.banshee_props['duration'] = \ 
    137154                                self.banshee_methods.GetPlayingDuration() 
    138                         info = self._banshee_properties_extract(self.banshee_props) 
     155                                self.banshee_props['paused'] = self.banshee_methods.\ 
     156                                        GetPlayingStatus() 
     157                                info = self._banshee_properties_extract(self.banshee_props) 
     158                        except dbus.DBusException, err: 
     159                                info = None 
     160 
     161                                for key in self.banshee_props.keys(): 
     162                                        self.banshee_props[key] = '' 
     163                                self.banshee_is_here = False 
     164 
    139165                        if self.current_banshee_title != self.banshee_props['title']: 
    140166                                self.emit('music-track-changed', info) 
     167                                self.banshee_paused_before = False 
     168                        if self.banshee_props['paused'] == 0 and self.banshee_paused_before ==\ 
     169                        False: 
     170                                self.emit('music-track-changed', info) 
     171                                self.banshee_paused_before = True 
     172                        else:  
     173                                if self.banshee_paused_before and self.banshee_props['paused'] == 1: 
     174                                        self.emit('music-track-changed', info) 
     175                                        self.banshee_paused_before = False 
    141176                        self.current_banshee_title = self.banshee_props['title'] 
    142177                return 1 
     
    152187                info.artist = props['artist'] 
    153188                info.duration = int(props['duration']) 
     189                info.paused = props['paused'] 
    154190                return info 
    155191