Ticket #2940: banshee.diff

File banshee.diff, 3.3 KB (added by tristil@…, 3 years ago)
  • src/music_track_listener.py

     
    1818        # install _() func before importing dbus_support 
    1919        from common import i18n 
    2020 
     21import gobject 
     22 
    2123from common import dbus_support 
    2224if dbus_support.supported: 
    2325        import dbus 
    2426        import dbus.glib 
    2527 
     28import signal 
     29 
    2630class MusicTrackInfo(object): 
    2731        __slots__ = ['title', 'album', 'artist', 'duration', 'track_number'] 
    2832 
     
    5256                        'NameOwnerChanged', 'org.freedesktop.DBus', arg0='org.gnome.Muine') 
    5357                bus.add_signal_receiver(self._player_playing_changed_cb, 'StateChanged', 
    5458                        'org.gnome.Muine.Player') 
    55  
    56                 ## Rhythmbox 
     59                 
     60                ## Rhythmbox     
    5761                bus.add_signal_receiver(self._rhythmbox_music_track_change_cb, 
    5862                        'playingUriChanged', 'org.gnome.Rhythmbox.Player') 
    5963                bus.add_signal_receiver(self._player_name_owner_changed, 
    6064                        'NameOwnerChanged', 'org.freedesktop.DBus', arg0='org.gnome.Rhythmbox') 
    6165                bus.add_signal_receiver(self._player_playing_changed_cb, 
    6266                        'playingChanged', 'org.gnome.Rhythmbox.Player') 
    63  
     67                         
     68                ## Banshee 
     69                banshee_bus = dbus.SessionBus() 
     70                dubus = banshee_bus.get_object('org.freedesktop.DBus', '/org/freedesktop/dbus') 
     71                self.dubus_methods = dbus.Interface(dubus, 'org.freedesktop.DBus') 
     72                if self.dubus_methods.NameHasOwner('org.gnome.Banshee'): 
     73                        self._get_banshee_bus() 
     74                #Otherwise, it opens Banshee! 
     75                self.banshee_props ={}           
     76                self.current_banshee_title = u"" 
     77                gobject.timeout_add(1000, self._banshee_check_track_status) 
     78                 
     79        def _get_banshee_bus(self): 
     80                bus = dbus.SessionBus() 
     81                banshee = bus.get_object('org.gnome.Banshee', '/org/gnome/Banshee/Player') 
     82                self.banshee_methods = dbus.Interface(banshee, 'org.gnome.Banshee.Core')         
     83         
    6484        def do_music_track_changed(self, info): 
    6585                if info is not None: 
    6686                        self._last_playing_music = info 
     
    107127                props = rbshell.getSongProperties(uri) 
    108128                info = self._rhythmbox_properties_extract(props) 
    109129                self.emit('music-track-changed', info) 
     130         
     131        def _banshee_check_track_status(self): 
     132                if self.dubus_methods.NameHasOwner('org.gnome.Banshee') and not hasattr(self, 'banshee_methods'): 
     133                        self._get_banshee_bus() 
     134                 
     135                if self.dubus_methods.NameHasOwner('org.gnome.Banshee'): 
     136                        self.banshee_props['title'] = self.banshee_methods.GetPlayingTitle() 
     137                        self.banshee_props['album'] = self.banshee_methods.GetPlayingAlbum() 
     138                        self.banshee_props['artist'] = self.banshee_methods.GetPlayingArtist() 
     139                        self.banshee_props['duration'] = self.banshee_methods.GetPlayingDuration() 
     140                        info = self._banshee_properties_extract(self.banshee_props) 
     141                        if self.current_banshee_title != self.banshee_props['title']: 
     142                                self.emit('music-track-changed', info) 
     143                        self.current_banshee_title = self.banshee_props['title'] 
     144                         
     145                return 1 
    110146 
     147        def _banshee_music_track_change_cb(self, arg): 
     148                info = self._banshee_properties_extract(arg) 
     149                self.emit('music-track-changed', info) 
     150 
     151        def _banshee_properties_extract(self, props): 
     152                info = MusicTrackInfo() 
     153                info.title = props['title'] 
     154                info.album = props['album'] 
     155                info.artist = props['artist'] 
     156                info.duration = int(props['duration']) 
     157                #info.track_number = int(props['track-number']) 
     158                return info 
     159 
    111160        def get_playing_track(self): 
    112161                '''Return a MusicTrackInfo for the currently playing 
    113162                song, or None if no song is playing'''