示例#1
0
 def _add_item(self, source, param, item, remaining):
     if not item:
         return
     self._offset += 1
     item.set_title(albumArtCache.get_media_title(item))
     artist = item.get_string(Grl.METADATA_KEY_ARTIST)\
         or item.get_author()\
         or _("Unknown Artist")
     _iter = self._model.insert_with_valuesv(
         -1,
         [2, 3, 5, 8, 9, 10],
         [albumArtCache.get_media_title(item),
          artist, item, self.nowPlayingIconName, False, False])
     self.player.discover_item(item, self._on_discovered, _iter)
示例#2
0
 def update_model(self, player, playlist, currentIter):
     # self is not our playlist, return
     if (playlist != self.model):
         return False
     currentSong = playlist.get_value(currentIter, 5)
     song_passed = False
     _iter = playlist.get_iter_first()
     self.duration = 0
     while _iter:
         song = playlist.get_value(_iter, 5)
         self.duration += song.get_duration()
         escapedTitle = AlbumArtCache.get_media_title(song, True)
         if (song == currentSong):
             title = '<b>%s</b>' % escapedTitle
             iconVisible = True
             song_passed = True
         elif (song_passed):
             title = '<span>%s</span>' % escapedTitle
             iconVisible = False
         else:
             title = '<span color=\'grey\'>%s</span>' % escapedTitle
             iconVisible = False
         playlist.set_value(_iter, 0, title)
         if (playlist.get_value(_iter, 7) != ERROR_ICON_NAME):
             playlist.set_value(_iter, 9, iconVisible)
         _iter = playlist.iter_next(_iter)
         self.ui.get_object('running_length_label_info').set_text(
             _("%d min") % (int(self.duration / 60) + 1))
     return False
示例#3
0
    def load(self, media):
        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()

        self.coverImg.set_from_pixbuf(self._symbolicIcon)
        self.cache.lookup(ART_SIZE, media.get_artist(), media.get_string(Grl.METADATA_KEY_ALBUM), self._on_cache_lookup)

        self.titleLabel.set_label(AlbumArtCache.get_media_title(media))

        if media.get_artist() is not None:
            self.artistLabel.set_label(media.get_artist())
        else:
            self.artistLabel.set_label("Unknown artist")

        url = media.get_url()
        if url != self.player.get_value("current-uri", 0):
            self.player.set_property("uri", url)

        #Store next available url
        #(not really useful because we can't connect to about-to-finish, but still)
        nextTrack = self._get_next_track()

        if nextTrack:
            nextMedia = self.playlist.get_value(self.currentTrack, self.playlistField)
            self.player.nextUrl = nextMedia.get_url()
        else:
            self.player.nextUrl = None

        self.emit("playlist-item-changed", self.playlist, self.currentTrack)
        self.emit('current-changed')
示例#4
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()

        self.coverImg.set_from_pixbuf(self._symbolicIcon)
        self.cache.lookup(media, ART_SIZE, ART_SIZE, self._on_cache_lookup)

        self.titleLabel.set_label(AlbumArtCache.get_media_title(media))

        if media.get_artist() is not None:
            self.artistLabel.set_label(media.get_artist())
        else:
            self.artistLabel.set_label(_("Unknown Artist"))

        url = media.get_url()
        if url != self.player.get_value('current-uri', 0):
            self.player.set_property('uri', url)

        currentTrack = self.playlist.get_iter(self.currentTrack.get_path())
        self.emit('playlist-item-changed', self.playlist, currentTrack)
        self.emit('current-changed')
示例#5
0
 def _add_item(self, source, param, item):
     if item:
         self._offset += 1
         _iter = self._model.append()
         artist = item.get_string(Grl.METADATA_KEY_ARTIST)
         if not artist:
             artist = item.get_author()
         if not artist:
             artist = _("Unknown Artist")
         title = albumArtCache.get_media_title(item)
         item.set_title(title)
         try:
             if item.get_url():
                 self.player.discoverer.discover_uri(item.get_url())
             self._model.set(_iter,
                             [0, 1, 2, 3, 4, 5, 7, 8, 9, 10],
                             [str(item.get_id()), "", title,
                              artist, self._symbolicIcon, item,
                              -1, self.nowPlayingIconName, False, False])
         except:
             print("failed to discover url " + item.get_url())
             self._model.set(_iter,
                             [0, 1, 2, 3, 4, 5, 7, 8, 9, 10],
                             [str(item.get_id()), "", title,
                              artist, self._symbolicIcon, item,
                              -1, self.errorIconName, False, True])
     GLib.idle_add(self.show_album_art_data)
示例#6
0
 def _add_item_to_model(self, item, model):
     if not item:
         return
     self._offset += 1
     item.set_title(albumArtCache.get_media_title(item))
     artist = item.get_string(Grl.METADATA_KEY_ARTIST)\
         or item.get_author()\
         or _("Unknown Artist")
     _iter = model.insert_with_valuesv(
         -1,
         [2, 3, 5, 8, 9, 10],
         [albumArtCache.get_media_title(item),
          artist, item, self.nowPlayingIconName, False, False])
     self.player.discover_item(item, self._on_discovered, _iter)
     self.songs_count += 1
     self._update_songs_count()
    def _update_track(self, player):
        if not self._player.currentTrack:
            self._notification.update(_("Not playing"), None, 'gnome-music')
            self._notification.set_hint('image-data', None)
            self._notification.show()
        else:
            item = self._player.get_current_media()
            if not item:
                return
            artist = item.get_string(Grl.METADATA_KEY_ARTIST)\
                or item.get_author()\
                or _("Unknown Artist")
            album = item.get_string(Grl.METADATA_KEY_ALBUM)\
                or _("Unknown Album")

            self._notification.update(AlbumArtCache.get_media_title(item),
                                      # TRANSLATORS: by refers to the artist, from to the album
                                      _("by %s, from %s") % ('<b>' + artist + '</b>',
                                                             '<i>' + album + '</i>'),
                                      'gnome-music')

            try:
                self._notification.show()
            except:
                pass
示例#8
0
 def update_model(self, player, playlist, currentIter):
     # self is not our playlist, return
     if (playlist != self.model):
         return False
     currentSong = playlist.get_value(currentIter, 5)
     song_passed = False
     _iter = playlist.get_iter_first()
     self.duration = 0
     while _iter:
         song = playlist.get_value(_iter, 5)
         self.duration += song.get_duration()
         escapedTitle = AlbumArtCache.get_media_title(song, True)
         if (song == currentSong):
             title = '<b>%s</b>' % escapedTitle
             iconVisible = True
             song_passed = True
         elif (song_passed):
             title = '<span>%s</span>' % escapedTitle
             iconVisible = False
         else:
             title = '<span color=\'grey\'>%s</span>' % escapedTitle
             iconVisible = False
         playlist.set_value(_iter, 0, title)
         if(playlist.get_value(_iter, 7) != ERROR_ICON_NAME):
             playlist.set_value(_iter, 9, iconVisible)
         _iter = playlist.iter_next(_iter)
         self.ui.get_object('running_length_label_info').set_text(
             '%d min' % (int(self.duration / 60) + 1))
     return False
示例#9
0
    def update_model(self, player, playlist, currentIter):
        #self is not our playlist, return
        if (playlist != self.model):
            return False
        currentSong = playlist.get_value(currentIter, 5)
        song_passed = False
        _iter = playlist.get_iter_first()
        while _iter:
            song = playlist.get_value(_iter, 5)

            escapedTitle = AlbumArtCache.get_media_title(song, True)
            if (song == currentSong):
                title = "<b>%s</b>" % escapedTitle
                iconVisible = True
                song_passed = True
            elif (song_passed):
                title = "<span>%s</span>" % escapedTitle
                iconVisible = False
            else:
                title = "<span color='grey'>%s</span>" % escapedTitle
                iconVisible = False
            playlist.set_value(_iter, 0, title)
            if(playlist.get_value(_iter, 7) != ERROR_ICON_NAME):
                playlist.set_value(_iter, 9, iconVisible)
            _iter = playlist.iter_next(_iter)
        return False
示例#10
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, ''))
示例#11
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
示例#12
0
    def _add_item(self, source, param, item):
        if not item:
            return
        self._offset += 1
        artist = item.get_string(Grl.METADATA_KEY_ARTIST)\
            or item.get_author()\
            or _("Unknown Artist")
        title = albumArtCache.get_media_title(item)
        item.set_title(title)

        def add_new_item():
            _iter = self._model.append()
            icon_name = self.nowPlayingIconName
            if item.get_url():
                try:
                    self.player.discoverer.discover_uri(item.get_url())
                except:
                    print('failed to discover url ' + item.get_url())
                    icon_name = self.errorIconName
            self._model.set(_iter,
                            [0, 1, 2, 3, 4, 5, 7, 8, 9, 10],
                            [str(item.get_id()), '', title,
                             artist, self._symbolicIcon, item,
                             -1, icon_name, False, icon_name == self.errorIconName])
            GLib.idle_add(self._update_album_art, item, _iter)

        GLib.idle_add(add_new_item)
示例#13
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, ''))
示例#14
0
    def load(self, media):
        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()

        self.coverImg.set_from_pixbuf(self._symbolicIcon)
        self.cache.lookup(media, ART_SIZE, ART_SIZE, self._on_cache_lookup)

        self.titleLabel.set_label(AlbumArtCache.get_media_title(media))

        if media.get_artist() is not None:
            self.artistLabel.set_label(media.get_artist())
        else:
            self.artistLabel.set_label(_("Unknown Artist"))

        url = media.get_url()
        if url != self.player.get_value('current-uri', 0):
            self.player.set_property('uri', url)

        currentTrack = self.playlist.get_iter(self.currentTrack.get_path())
        self.emit('playlist-item-changed', self.playlist, currentTrack)
        self.emit('current-changed')
示例#15
0
    def _add_item(self, source, param, item):
        if not item:
            return
        self._offset += 1
        artist = item.get_string(Grl.METADATA_KEY_ARTIST)\
            or item.get_author()\
            or _("Unknown Artist")
        title = albumArtCache.get_media_title(item)
        item.set_title(title)

        def add_new_item():
            _iter = self._model.append(None)
            icon_name = self.nowPlayingIconName
            if item.get_url():
                try:
                    self.player.discoverer.discover_uri(item.get_url())
                except:
                    print('failed to discover url ' + item.get_url())
                    icon_name = self.errorIconName
            self._model.set(_iter, [0, 1, 2, 3, 4, 5, 7, 8, 9, 10], [
                str(item.get_id()), '', title, artist, self._symbolicIcon,
                item, -1, icon_name, False, icon_name == self.errorIconName
            ])
            GLib.idle_add(self._update_album_art, item, _iter)

        GLib.idle_add(add_new_item)
示例#16
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
示例#17
0
 def _add_item_to_model(self, item):
     new_iter = self.model.insert_before(self.add_playlist_iter)
     self.model.set(
         new_iter,
         [0, 1, 2],
         [AlbumArtCache.get_media_title(item), False, item]
     )
     return new_iter
示例#18
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]
 def _add_item_to_model(self, item):
     new_iter = self.model.insert_before(self.add_playlist_iter)
     self.model.set(
         new_iter,
         [0, 1, 2],
         [AlbumArtCache.get_media_title(item), False, item]
     )
     return new_iter
示例#20
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]
示例#21
0
 def _add_item(self, source, param, item):
     if not item:
         return
     self._offset += 1
     item.set_title(albumArtCache.get_media_title(item))
     artist = item.get_string(Grl.METADATA_KEY_ARTIST)\
         or item.get_author()\
         or _("Unknown Artist")
     _iter = self._model.insert_with_valuesv(-1, [2, 3, 5, 8, 9, 10], [
         albumArtCache.get_media_title(item), artist, item,
         self.nowPlayingIconName, False, False
     ])
     self.player.discover_item(item, self._on_discovered, _iter)
     g_file = Gio.file_new_for_uri(item.get_url())
     self.monitors.append(
         g_file.monitor_file(Gio.FileMonitorFlags.NONE, None))
     self.monitors[(self._offset - 1)].connect('changed',
                                               self._on_item_changed, _iter)
示例#22
0
 def _add_item(self, source, param, item):
     if not item:
         return
     self._offset += 1
     item.set_title(albumArtCache.get_media_title(item))
     artist = item.get_string(Grl.METADATA_KEY_ARTIST)\
         or item.get_author()\
         or _("Unknown Artist")
     _iter = self._model.insert_with_valuesv(
         -1,
         [2, 3, 5, 8, 9, 10],
         [albumArtCache.get_media_title(item),
          artist, item, self.nowPlayingIconName, False, False])
     self.player.discover_item(item, self._on_discovered, _iter)
     g_file = Gio.file_new_for_uri(item.get_url())
     self.monitors.append(g_file.monitor_file(Gio.FileMonitorFlags.NONE,
                                              None))
     self.monitors[(self._offset - 1)].connect('changed',
                                               self._on_item_changed, _iter)
示例#23
0
 def _on_item_activated(self, widget, id, path):
     _iter = self.model.get_iter(path)
     if(self.model.get_value(_iter, 7) != ERROR_ICON_NAME):
         if (self.iterToClean and self.player.playlistId == self.album):
             item = self.model.get_value(self.iterToClean, 5)
             title = AlbumArtCache.get_media_title(item)
             self.model.set_value(self.iterToClean, 0, title)
             #Hide now playing icon
             self.model.set_value(self.iterToClean, 6, False)
         self.player.set_playlist("Album", self.album, self.model, _iter, 5)
         self.player.set_playing(True)
示例#24
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
示例#25
0
    def get_songs(self, source, prefs, track):
        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)
                self.ui.get_object("grid1").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()
                song_widget._iter = itr
                song_widget.model = self.model
                song_widget.title = ui.get_object("title")

                try:
                    self.player.discoverer.discover_uri(str(track.get_url()))
                    self.model.set(itr,
                                   [0, 1, 2, 3, 4, 5],
                                   [title, "", "", False,
                                    NOW_PLAYING_ICON_NAME, 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(0.0, 0.6)
                    song_widget.can_be_played = True
                    song_widget.connect('button-release-event',
                                        self.track_selected)

                except:
                    print("failed to discover url " + str(track.get_url()))
                    self.model.set(itr, [0, 1, 2, 3, 4, 5],
                                   [title, "", "", True,
                                    ERROR_ICON_NAME, track])
                    song_widget.now_playing_sign = ui.get_object("image1")
                    song_widget.now_playing_sign.set_from_icon_name(
                        ERROR_ICON_NAME,
                        Gtk.IconSize.SMALL_TOOLBAR)
                    song_widget.now_playing_sign.set_alignment(0.0, 0.6)
                    song_widget.can_be_played = False
            self.ui.get_object("grid1").show_all()
示例#26
0
 def _add_item(self, source, param, item):
     if item:
         self._offset += 1
         _iter = self._model.append()
         item.set_title(albumArtCache.get_media_title(item))
         try:
             if item.get_url():
                 self.player.discoverer.discover_uri(item.get_url())
             self._model.set(_iter,
                             [2, 3, 5, 8, 9, 10],
                             [albumArtCache.get_media_title(item),
                              item.get_string(Grl.METADATA_KEY_ARTIST),
                              item, self.nowPlayingIconName, False, False])
         except:
             print("failed to discover url " + item.get_url())
             self._model.set(_iter,
                             [2, 3, 5, 8, 9, 10],
                             [albumArtCache.get_media_title(item),
                              item.get_string(Grl.METADATA_KEY_ARTIST),
                              item, self.errorIconName, False, True])
示例#27
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
示例#28
0
 def _on_item_activated(self, widget, id, path):
     _iter = self._model.get_iter(path)
     title = self._model.get_value(_iter, 2)
     artist = self._model.get_value(_iter, 3)
     item = self._model.get_value(_iter, 5)
     self._albumWidget.update(artist, title, item,
                              self.header_bar, self.selection_toolbar)
     self.header_bar.set_state(0)
     escaped_title = albumArtCache.get_media_title(item)
     self.header_bar.header_bar.set_title(escaped_title)
     self.header_bar.header_bar.sub_title = artist
     self.set_visible_child(self._albumWidget)
示例#29
0
 def _on_item_activated(self, widget, id, path):
     child_path = self.filter.convert_path_to_child_path(path)
     _iter = self._model.get_iter(child_path)
     title = self._model.get_value(_iter, 2)
     artist = self._model.get_value(_iter, 3)
     item = self._model.get_value(_iter, 5)
     self._albumWidget.update(artist, title, item, self.header_bar,
                              self.selection_toolbar)
     self.header_bar.set_state(0)
     escaped_title = albumArtCache.get_media_title(item)
     self.header_bar.header_bar.set_title(escaped_title)
     self.header_bar.header_bar.sub_title = artist
     self.set_visible_child(self._albumWidget)
示例#30
0
 def add_item(self, source, prefs, track, remaining, data=None):
     if track:
         self.tracks.append(track)
         self.duration = self.duration + track.get_duration()
         _iter = self.model.append()
         escapedTitle = AlbumArtCache.get_media_title(track, True)
         self.model.set(_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 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.player.discover_item(track, self._on_discovered, song_widget)
                self.model.set(itr,
                               [0, 1, 2, 3, 4, 5],
                               [title, '', '', False,
                                NOW_PLAYING_ICON_NAME, 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)
示例#32
0
 def add_item(self, source, prefs, track, remaining, data=None):
     if track:
         self.tracks.append(track)
         self.duration = self.duration + track.get_duration()
         _iter = self.model.append()
         escapedTitle = AlbumArtCache.get_media_title(track, True)
         self.model.set(_iter,
                        [0, 1, 2, 3, 4, 5, 10],
                        [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))
示例#33
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)
示例#34
0
 def add_item(self, source, prefs, track, remaining, data=None):
     if track:
         self.tracks.append(track)
         self.duration = self.duration + track.get_duration()
         _iter = self.model.append()
         self.player.discover_item(track, self._on_discovered, _iter)
         escapedTitle = AlbumArtCache.get_media_title(track, True)
         self.model.set(_iter,
                        [0, 1, 2, 3, 4, 5, 7, 9],
                        [escapedTitle,
                         self.player.seconds_to_string(
                             track.get_duration()),
                         '', '', None, track, NOW_PLAYING_ICON_NAME,
                         False])
         self.ui.get_object('running_length_label_info').set_text(
             '%d min' % (int(self.duration / 60) + 1))
示例#35
0
    def _on_item_activated(self, widget, id, path):
        if self.star_renderer_click:
            self.star_renderer_click = False
            return

        _iter = self.model.get_iter(path)

        if self.model.get_value(_iter, 10) != DiscoveryStatus.FAILED:
            if (self.iterToClean and self.player.playlistId == self.album):
                item = self.model.get_value(self.iterToClean, 5)
                title = AlbumArtCache.get_media_title(item)
                self.model.set_value(self.iterToClean, 0, title)
                # Hide now playing icon
                self.model.set_value(self.iterToClean, 6, False)
            self.player.set_playlist('Album', self.album, self.model, _iter, 5, 11)
            self.player.set_playing(True)
示例#36
0
    def _on_item_activated(self, widget, id, path):
        if self.star_handler.star_renderer_click:
            self.star_handler.star_renderer_click = False
            return

        _iter = self.model.get_iter(path)

        if self.model.get_value(_iter, 10) != DiscoveryStatus.FAILED:
            if (self.iterToClean and self.player.playlistId == self.album):
                item = self.model.get_value(self.iterToClean, 5)
                title = AlbumArtCache.get_media_title(item)
                self.model.set_value(self.iterToClean, 0, title)
                # Hide now playing icon
                self.model.set_value(self.iterToClean, 6, False)
            self.player.set_playlist('Album', self.album, self.model, _iter, 5, 11)
            self.player.set_playing(True)
示例#37
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 = _("Unknown Artist")
        try:
            assert media.get_artist() is not None
            artist = media.get_artist()
        except:
            pass
        finally:
            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._noArtworkIcon)
        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()
示例#38
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 = _("Unknown Artist")
        try:
            assert media.get_artist() is not None
            artist = media.get_artist()
        except:
            pass
        finally:
            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._noArtworkIcon)
        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()
示例#39
0
 def get_songs(self, source, prefs, track, remaining):
     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)
             self.ui.get_object('grid1').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')
             self.player.discover_item(track, self._on_discovered, song_widget)
             g_file = Gio.file_new_for_uri(track.get_url())
             self.monitors.append(g_file.monitor_file(Gio.FileMonitorFlags.NONE,
                                                      None))
             self.monitors[-1].connect('changed', self._on_item_changed, itr)
             self.model.set(itr,
                            [0, 1, 2, 3, 4, 5],
                            [title, '', '', False,
                             NOW_PLAYING_ICON_NAME, 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)
         self.ui.get_object('grid1').show_all()
示例#40
0
    def _add_item(self, source, param, item):
        if not item:
            return
        self._offset += 1
        artist = item.get_string(Grl.METADATA_KEY_ARTIST)\
            or item.get_author()\
            or _("Unknown Artist")
        title = albumArtCache.get_media_title(item)
        item.set_title(title)

        icon_name = self.nowPlayingIconName
        _iter = self._model.insert_with_valuesv(
            -1,
            [0, 1, 2, 3, 4, 5, 7, 8, 9, 10],
            [str(item.get_id()), '', title,
             artist, self._symbolicIcon, item,
             -1, icon_name, False, False])
        self.player.discover_item(item, self._on_discovered, _iter)
        GLib.idle_add(self._update_album_art, item, _iter)
示例#41
0
 def _on_populate_album_songs(self, source, prefs, track, remaining):
     if track:
         self.tracks.append(track)
         self.duration = self.duration + track.get_duration()
         _iter = self.model.append()
         self.player.discover_item(track, self._on_discovered, _iter)
         g_file = Gio.file_new_for_uri(track.get_url())
         self.monitors.append(g_file.monitor_file(Gio.FileMonitorFlags.NONE,
                                                  None))
         self.monitors[-1].connect('changed', self._on_item_changed, _iter)
         escapedTitle = AlbumArtCache.get_media_title(track, True)
         self.model.set(_iter,
                        [0, 1, 2, 3, 4, 5, 7, 9],
                        [escapedTitle,
                         self.player.seconds_to_string(
                             track.get_duration()),
                         '', '', None, track, NOW_PLAYING_ICON_NAME,
                         False])
         self.ui.get_object('running_length_label_info').set_text(
             '%d min' % (int(self.duration / 60) + 1))
示例#42
0
    def _get_metadata(self):
        media = self.player.get_current_media()
        if not media:
            return {}

        metadata = {
            'mpris:trackid':
            '/org/mpris/MediaPlayer2/Track/%s' % media.get_id(),
            'xesam:url': media.get_url(),
            'mpris:length': dbus.Int64(media.get_duration() * 1000000),
            'xesam:trackNumber': media.get_track_number(),
            'xesam:useCount': media.get_play_count(),
            'xesam:userRating': media.get_rating(),
        }

        title = AlbumArtCache.get_media_title(media)
        if title:
            metadata['xesam:title'] = title

        album = media.get_album()
        if album:
            metadata['xesam:album'] = album

        artist = media.get_artist()
        if artist:
            metadata['xesam:artist'] = [artist]
            metadata['xesam:albumArtist'] = [artist]

        genre = media.get_genre()
        if genre:
            metadata['xesam:genre'] = [genre]

        last_played = media.get_last_played()
        if last_played:
            metadata['xesam:lastUsed'] = last_played

        thumbnail = media.get_thumbnail()
        if thumbnail:
            metadata['mpris:artUrl'] = thumbnail

        return metadata
示例#43
0
    def _get_metadata(self):
        media = self.player.get_current_media()
        if not media:
            return {}

        metadata = {
            'mpris:trackid': '/org/mpris/MediaPlayer2/Track/%s' % media.get_id(),
            'xesam:url': media.get_url(),
            'mpris:length': dbus.Int64(media.get_duration() * 1000000),
            'xesam:trackNumber': media.get_track_number(),
            'xesam:useCount': media.get_play_count(),
            'xesam:userRating': media.get_rating(),
        }

        title = AlbumArtCache.get_media_title(media)
        if title:
            metadata['xesam:title'] = title

        album = media.get_album()
        if album:
            metadata['xesam:album'] = album

        artist = media.get_artist()
        if artist:
            metadata['xesam:artist'] = [artist]
            metadata['xesam:albumArtist'] = [artist]

        genre = media.get_genre()
        if genre:
            metadata['xesam:genre'] = [genre]

        last_played = media.get_last_played()
        if last_played:
            metadata['xesam:lastUsed'] = last_played

        thumbnail = media.get_thumbnail()
        if thumbnail:
            metadata['mpris:artUrl'] = thumbnail

        return metadata
示例#44
0
    def _update_track(self, player):
        if not self._player.currentTrack:
            self._notification.update(_("Not playing"), None, 'gnome-music')
            self._notification.set_hint('image-data', None)
            self._notification.show()
        else:
            item = self._player.get_current_media()
            artist = item.get_string(Grl.METADATA_KEY_ARTIST)\
                or item.get_author()\
                or _("Unknown Artist")
            album = item.get_string(Grl.METADATA_KEY_ALBUM)\
                or _("Unknown Album")

            self._notification.update(
                AlbumArtCache.get_media_title(item),
                # TRANSLATORS: by refers to the artist, from to the album
                _("by %s, from %s") %
                ('<b>' + artist + '</b>', '<i>' + album + '</i>'),
                'gnome-music')

            self._albumArtCache.lookup(item, IMAGE_SIZE, IMAGE_SIZE,
                                       self._album_art_loaded)
示例#45
0
 def update_model(self, player, playlist, currentIter):
     # self is not our playlist, return
     if playlist != self.model:
         return False
     currentSong = playlist.get_value(currentIter, 5)
     song_passed = False
     _iter = playlist.get_iter_first()
     self.duration = 0
     while _iter:
         song = playlist.get_value(_iter, 5)
         self.duration += song.get_duration()
         escapedTitle = AlbumArtCache.get_media_title(song, True)
         if song == currentSong:
             title = "<b>%s</b>" % escapedTitle
             song_passed = True
         elif song_passed:
             title = "<span>%s</span>" % escapedTitle
         else:
             title = "<span color='grey'>%s</span>" % escapedTitle
         playlist.set_value(_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
示例#46
0
 def _on_populate_album_songs(self, source, prefs, track):
     if track:
         self.tracks.append(track)
         self.duration = self.duration + track.get_duration()
         _iter = self.model.append()
         escapedTitle = AlbumArtCache.get_media_title(track, True)
         try:
             self.player.discoverer.discover_uri(track.get_url())
             self.model.set(_iter,
                            [0, 1, 2, 3, 4, 5, 7, 9],
                            [escapedTitle,
                             self.player.seconds_to_string(
                                 track.get_duration()),
                             "", "", None, track, NOW_PLAYING_ICON_NAME,
                             False])
         except Exception as err:
             logging.debug(err.message)
             logging.debug("failed to discover url " + track.get_url())
             self.model.set(_iter,
                            [0, 1, 2, 3, 4, 5, 7, 9],
                            [escapedTitle, "", "", "", None,
                             track, ERROR_ICON_NAME, True])
         self.ui.get_object("running_length_label_info").set_text(
             "%d min" % (int(self.duration / 60) + 1))
示例#47
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)

        try:
            artist = media.get_artist()
            assert artist is not None
        except:
            try:
                artist = media.get_artist()
                assert artist is not None
            except:
                try:
                    artist = media.get_artist()
                    assert artist is not None
                except (AssertionError, ValueError):
                    artist = _("Unknown Artist")
        finally:
            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
示例#48
0
    def _get_metadata(self, media=None):
        if not media:
            media = self.player.get_current_media()
        if not media:
            return {}

        metadata = {
            'mpris:trackid': self._get_media_id(media),
            'xesam:url': media.get_url()
        }

        try:
            length = dbus.Int64(media.get_duration() * 1000000)
            assert length is not None
            metadata['mpris:length'] = length
        except:
            pass

        try:
            trackNumber = media.get_track_number()
            assert trackNumber is not None
            metadata['xesam:trackNumber'] = trackNumber
        except:
            pass

        try:
            useCount = media.get_play_count()
            assert useCount is not None
            metadata['xesam:useCount'] = useCount
        except:
            pass

        try:
            userRating = media.get_rating()
            assert userRating is not None
            metadata['xesam:userRating'] = userRating
        except:
            pass

        try:
            title = AlbumArtCache.get_media_title(media)
            assert title is not None
            metadata['xesam:title'] = title
        except:
            pass

        try:
            album = media.get_album()
            assert album is not None
        except:
            try:
                album = media.get_string(Grl.METADATA_KEY_ALBUM)
                assert album is not None
            except:
                album = _("Unknown Album")
        finally:
            metadata['xesam:album'] = album

        try:
            artist = media.get_artist()
            assert artist is not None
        except:
            try:
                artist = media.get_string(Grl.METADATA_KEY_ARTIST)
                assert artist is not None
            except:
                try:
                    artist = media.get_author()
                    assert artist is not None
                except (AssertionError, ValueError):
                    artist = _("Unknown Artist")
        finally:
            metadata['xesam:artist'] = [artist]
            metadata['xesam:albumArtist'] = [artist]

        try:
            genre = media.get_genre()
            assert genre is not None
            metadata['xesam:genre'] = genre
        except:
            pass

        try:
            lastUsed = media.get_last_played()
            assert lastUsed is not None
            metadata['xesam:lastUsed'] = lastUsed
        except:
            pass

        try:
            artUrl = media.get_thumbnail()
            assert artUrl is not None
            metadata['mpris:artUrl'] = artUrl
        except:
            pass

        return metadata