| 57 | 61 | bus.add_signal_receiver(self._rhythmbox_music_track_change_cb, |
| 58 | 62 | 'playingUriChanged', 'org.gnome.Rhythmbox.Player') |
| 59 | 63 | bus.add_signal_receiver(self._player_name_owner_changed, |
| 60 | 64 | 'NameOwnerChanged', 'org.freedesktop.DBus', arg0='org.gnome.Rhythmbox') |
| 61 | 65 | bus.add_signal_receiver(self._player_playing_changed_cb, |
| 62 | 66 | '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 | |
| | 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 |
| | 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 | |