def update_model(self, player, playlist, currentIter): # this is not our playlist, return if playlist != self.model: # TODO, only clean once, but that can wait util we have clean # the code a bit, and until the playlist refactoring. # the overhead is acceptable for now self.clean_model() return False currentSong = playlist.get_value(currentIter, 5) song_passed = False itr = playlist.get_iter_first() while itr: song = playlist.get_value(itr, 5) song_widget = song.song_widget if not song_widget.can_be_played: itr = playlist.iter_next(itr) continue escapedTitle = AlbumArtCache.get_media_title(song, True) if (song == currentSong): song_widget.now_playing_sign.show() song_widget.title.set_markup('<b>%s</b>' % escapedTitle) song_passed = True elif (song_passed): song_widget.now_playing_sign.hide() song_widget.title.set_markup('<span>%s</span>' % escapedTitle) else: song_widget.now_playing_sign.hide() song_widget.title\ .set_markup('<span color=\'grey\'>%s</span>' % escapedTitle) itr = playlist.iter_next(itr) return False
def _get_active_playlist(self): playlist = self._get_playlist_from_id(self.player.playlistId) \ if self.player.playlistType == 'Playlist' else None playlistName = AlbumArtCache.get_media_title(playlist) \ if playlist else '' return (playlist is not None, (self._get_playlist_path(playlist), playlistName, ''))
def _update_model(self, player, playlist, current_iter): """Player changed callback. :param player: The player object :param playlist: The current playlist :param current_iter: The current iter of the playlist model """ # self is not our playlist, return if (playlist != self.model): return False current_song = playlist[current_iter][5] song_passed = False _iter = playlist.get_iter_first() self._duration = 0 while _iter: song = playlist[_iter][5] self._duration += song.get_duration() escaped_title = AlbumArtCache.get_media_title(song, True) if (song == current_song): title = '<b>%s</b>' % escaped_title song_passed = True elif (song_passed): title = '<span>%s</span>' % escaped_title else: title = '<span color=\'grey\'>%s</span>' % escaped_title playlist[_iter][0] = title _iter = playlist.iter_next(_iter) self._ui.get_object('running_length_label_info').set_text( _("%d min") % (int(self._duration / 60) + 1)) return False
def GetPlaylists(self, index, max_count, order, reverse): if order != 'Alphabetical': return [] playlists = [(self._get_playlist_path(playlist), AlbumArtCache.get_media_title(playlist) or '', '') for playlist in self.playlists] return playlists[index:index + max_count] if not reverse \ else playlists[index + max_count - 1:index - 1 if index - 1 >= 0 else None:-1]
def clean_model(self): itr = self.model.get_iter_first() while itr: song = self.model.get_value(itr, 5) song_widget = song.song_widget escapedTitle = AlbumArtCache.get_media_title(song, True) if song_widget.can_be_played: song_widget.now_playing_sign.hide() song_widget.title.set_markup('<span>%s</span>' % escapedTitle) itr = self.model.iter_next(itr) return False
def _add_item_to_model(self, item): """Adds (non-static only) playlists to the model""" # Don't show static playlists if self.playlist.is_static_playlist(item): return None new_iter = self.model.append() self.model.set( new_iter, [0, 1, 2], [AlbumArtCache.get_media_title(item), False, item] ) return new_iter
def add_item(self, source, prefs, track, remaining, data=None): if remaining == 0: self.songsGrid.show_all() self.emit("tracks-loaded") if track: self.tracks.append(track) else: for i, track in enumerate(self.tracks): ui = Gtk.Builder() ui.add_from_resource('/org/gnome/Music/TrackWidget.ui') song_widget = ui.get_object('eventbox1') self.songs.append(song_widget) ui.get_object('num')\ .set_markup('<span color=\'grey\'>%d</span>' % len(self.songs)) title = AlbumArtCache.get_media_title(track) ui.get_object('title').set_text(title) ui.get_object('title').set_alignment(0.0, 0.5) ui.get_object('title').set_max_width_chars(MAX_TITLE_WIDTH) self.songsGrid.attach( song_widget, int(i / (len(self.tracks) / 2)), int(i % (len(self.tracks) / 2)), 1, 1 ) track.song_widget = song_widget itr = self.model.append(None) song_widget._iter = itr song_widget.model = self.model song_widget.title = ui.get_object('title') song_widget.checkButton = ui.get_object('select') song_widget.checkButton.set_visible(self.selectionMode) song_widget.checkButton.connect( 'toggled', self._check_button_toggled, song_widget ) self.model.set(itr, [0, 1, 2, 3, 5], [title, '', '', False, track]) song_widget.now_playing_sign = ui.get_object('image1') song_widget.now_playing_sign.set_from_icon_name( NOW_PLAYING_ICON_NAME, Gtk.IconSize.SMALL_TOOLBAR) song_widget.now_playing_sign.set_no_show_all('True') song_widget.now_playing_sign.set_alignment(1, 0.6) song_widget.can_be_played = True song_widget.connect('button-release-event', self.track_selected)
def _on_item_activated(self, widget, id, path): """List row activated.""" if self._star_handler.star_renderer_click: self._star_handler.star_renderer_click = False return _iter = self.model.get_iter(path) if self.model[_iter][10] != DiscoveryStatus.FAILED: if (self._iter_to_clean and self._player.playlistId == self._album): item = self.model[self._iter_to_clean][5] title = AlbumArtCache.get_media_title(item) self.model[self._iter_to_clean][0] = title # Hide now playing icon self.model[self._iter_to_clean][6] = False self._player.set_playlist('Album', self._album, self.model, _iter, 5, 11) self._player.set_playing(True)
def load(self, media): self.progressScale.set_value(0) self._set_duration(media.get_duration()) self.songTotalTimeLabel.set_label(self.seconds_to_string(media.get_duration())) self.progressScale.set_sensitive(True) self.playBtn.set_sensitive(True) self._sync_prev_next() artist = utils.get_artist_name(media) self.artistLabel.set_label(artist) self._currentArtist = artist album = _("Unknown Album") try: assert media.get_album() is not None album = media.get_album() except: self._currentAlbum = album self.coverImg.set_from_pixbuf(self._no_artwork_icon) self.cache.lookup( media, ART_SIZE, ART_SIZE, self._on_cache_lookup, None, artist, album) self._currentTitle = AlbumArtCache.get_media_title(media) self.titleLabel.set_label(self._currentTitle) self._currentTimestamp = int(time.time()) url = media.get_url() if url != self.player.get_value('current-uri', 0): self.player.set_property('uri', url) if self.currentTrack and self.currentTrack.valid(): currentTrack = self.playlist.get_iter(self.currentTrack.get_path()) self.emit('playlist-item-changed', self.playlist, currentTrack) self.emit('current-changed') self._validate_next_track()
def add_item(self, source, prefs, track, remaining, data=None): """Add a song to the item to album list. :param source: The grilo source :param prefs: :param track: The grilo media object :param remaining: Remaining number of items to add :param data: User data """ if track: self._duration = self._duration + track.get_duration() _iter = self.model.append() escapedTitle = AlbumArtCache.get_media_title(track, True) self.model[_iter][0, 1, 2, 3, 4, 5, 9] = [ escapedTitle, self._player.seconds_to_string(track.get_duration()), '', '', None, track, bool(track.get_lyrics()) ] self._ui.get_object('running_length_label_info').set_text( _("%d min") % (int(self._duration / 60) + 1))
def _get_metadata(self, media=None): if not media: media = self.player.get_current_media() if not media: return {} metadata = { 'mpris:trackid': GLib.Variant('o', self._get_media_id(media)), 'xesam:url': GLib.Variant('s', media.get_url()) } try: length = media.get_duration() * 1000000 assert length is not None metadata['mpris:length'] = GLib.Variant('x', length) except: pass try: trackNumber = media.get_track_number() assert trackNumber is not None metadata['xesam:trackNumber'] = GLib.Variant('i', trackNumber) except: pass try: useCount = media.get_play_count() assert useCount is not None metadata['xesam:useCount'] = GLib.Variant('i', useCount) except: pass try: userRating = media.get_rating() assert userRating is not None metadata['xesam:userRating'] = GLib.Variant('d', userRating) except: pass try: title = AlbumArtCache.get_media_title(media) assert title is not None metadata['xesam:title'] = GLib.Variant('s', title) except: pass try: album = media.get_album() assert album is not None except: try: album = media.get_album() assert album is not None except: album = _("Unknown Album") finally: metadata['xesam:album'] = GLib.Variant('s', album) artist = utils.get_artist_name(media) metadata['xesam:artist'] = GLib.Variant('as', [artist]) metadata['xesam:albumArtist'] = GLib.Variant('as', [artist]) try: genre = media.get_genre() assert genre is not None metadata['xesam:genre'] = GLib.Variant('as', genre) except: pass try: lastUsed = media.get_last_played() assert lastUsed is not None metadata['xesam:lastUsed'] = GLib.Variant('s', lastUsed) except: pass try: artUrl = media.get_thumbnail() assert artUrl is not None metadata['mpris:artUrl'] = GLib.Variant('s', artUrl) except: pass return metadata