Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
 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, ''))
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
 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]
Ejemplo n.º 5
0
 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
Ejemplo n.º 6
0
    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
Ejemplo n.º 7
0
    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)
Ejemplo n.º 8
0
    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)
Ejemplo n.º 9
0
    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()
Ejemplo n.º 10
0
    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))
Ejemplo n.º 11
0
    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