Exemple #1
0
    def _play(self):
        """
        Pick current track from a queue and requests media stream URL.
        Completes in background.
        """
        track = self.queue.get_current_track()
        if track is None:
            return
        self._is_loading = True
        self.broadcast_state()
        self.track_changed.fire(track)

        if settings.get('download_tracks', 'play_settings') or \
           settings.get_is_file_cached(track.filename):
            path = settings.get_cached_file_path(track.filename)

            if path is None:
                logger.debug('Track %s not in cache, downloading...',
                             track.store_id)
                track.get_url(callback=self._download_track)
            else:
                logger.debug('Track %s in cache, playing', track.store_id)
                self._play_ready(path, None, track)
        else:
            logger.debug('Starting to stream %s', track.store_id)
            track.get_url(callback=self._play_ready)
Exemple #2
0
    def update_text(self):
        """
        Update text of this item from the attached track.
        """
        self.line1_left.set_text(
            u'{index:3d} {icon} {title} [{minutes:02d}:{seconds:02d}]'.format(
                index=self.index + 1,
                icon=self.get_state_icon(self.state),
                title=self.track.title,
                minutes=self.track.duration // (1000 * 60),
                seconds=(self.track.duration // 1000) % 60,
            ))

        if settings.get_is_file_cached(self.track.filename):
            self.line1_right.set_text(u' \u25bc Cached')
        else:
            self.line1_right.set_text(u'')

        self.line1_right.set_text(u'{explicit} {rating}'.format(
            explicit=self.explicit, rating=self.rating))

        self.line2.set_text(u'      {} \u2015 {}'.format(
            self.track.artist, self.track.album_name))
        self.line1_wrap.set_attr(
            SongListItem.LINE1_ATTRS[self.state][self.is_focused])
        self.line2_wrap.set_attr(
            SongListItem.LINE2_ATTRS[self.state][self.is_focused])
Exemple #3
0
    def get_artist_art_filename(self):
        """
        Return artist art filename, None if this track doesn't have any.
        Downloads if necessary.
        """
        if self.artist_art_url is None:
            return None

        if not settings.get_is_file_cached(self.artist_art_filename):
            response = urlopen(self.artist_art_url)
            data = response.read()
            if Image:
                image = Image.open(BytesIO(data))
                image.thumbnail((128, 128))
                out = BytesIO()
                image.save(out, format='JPEG')
                data = out.getvalue()
            settings.save_file_to_cache(self.artist_art_filename, data)

        return settings.get_cached_file_path(self.artist_art_filename)