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)
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])
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)