Show error icon on episodes that fail to download.

This commit is contained in:
auouymous 2021-05-14 20:24:50 -06:00
parent 8b4a4e381a
commit 1e10a4f9bd
4 changed files with 20 additions and 6 deletions

View File

@ -898,6 +898,9 @@ class DownloadTask(object):
logger.error('Download failed: %s', str(e), exc_info=True)
self.error_message = _('Error: %s') % (str(e),)
if self.status == DownloadTask.FAILED:
self.__episode._download_error = self.error_message
if self.status == DownloadTask.DOWNLOADING:
# Everything went well - we're done
self.status = DownloadTask.DONE

View File

@ -3054,6 +3054,7 @@ class gPodder(BuilderWidget, dbus.service.Object):
for episode in episodes:
logger.debug('Downloading episode: %s', episode.title)
if not episode.was_downloaded(and_exists=True):
episode._download_error = None
task_exists = False
for task in self.download_tasks_seen:
if episode.url == task.url:
@ -3075,6 +3076,7 @@ class gPodder(BuilderWidget, dbus.service.Object):
try:
task = download.DownloadTask(episode, self.config, downloader=downloader)
except Exception as e:
episode._download_error = str(e)
d = {'episode': html.escape(episode.title), 'message': html.escape(str(e))}
message = _('Download error while downloading %(episode)s: %(message)s')
self.show_message(message % d, _('Download error'), important=True)

View File

@ -198,6 +198,7 @@ class EpisodeListModel(Gtk.ListStore):
self.ICON_GENERIC_FILE = 'text-x-generic'
self.ICON_DOWNLOADING = Gtk.STOCK_GO_DOWN
self.ICON_DELETED = 'edit-delete'
self.ICON_ERROR = 'dialog-error'
self.background_update = None
self.background_update_tag = None
@ -391,11 +392,6 @@ class EpisodeListModel(Gtk.ListStore):
tooltip.append(_('Deleted'))
status_icon = self.ICON_DELETED
view_show_undeleted = False
elif episode.state == gpodder.STATE_NORMAL and \
episode.is_new:
tooltip.append(_('New episode'))
view_show_downloaded = self._config.ui.gtk.episode_list.always_show_new
view_show_unplayed = True
elif episode.state == gpodder.STATE_DOWNLOADED:
tooltip = []
view_show_downloaded = True
@ -454,6 +450,16 @@ class EpisodeListModel(Gtk.ListStore):
if episode.total_time > 0 and episode.current_position:
tooltip.append('%d%%' % (100. * float(episode.current_position) /
float(episode.total_time),))
elif episode._download_error is not None:
tooltip.append(_('ERROR: %s') % episode._download_error)
status_icon = self.ICON_ERROR
if episode.state == gpodder.STATE_NORMAL and episode.is_new:
view_show_downloaded = self._config.ui.gtk.episode_list.always_show_new
view_show_unplayed = True
elif episode.state == gpodder.STATE_NORMAL and episode.is_new:
tooltip.append(_('New episode'))
view_show_downloaded = self._config.ui.gtk.episode_list.always_show_new
view_show_unplayed = True
if episode.total_time:
total_time = util.format_time(episode.total_time)

View File

@ -262,7 +262,7 @@ class PodcastEpisode(PodcastModelObject):
MAX_FILENAME_LENGTH = 120 # without extension
MAX_FILENAME_WITH_EXT_LENGTH = 140 - len(".partial.webm") # with extension
__slots__ = schema.EpisodeColumns
__slots__ = schema.EpisodeColumns + ('_download_error',)
def _deprecated(self):
raise Exception('Property is deprecated!')
@ -359,6 +359,8 @@ class PodcastEpisode(PodcastModelObject):
# Timestamp of last playback time
self.last_playback = 0
self._download_error = None
@property
def channel(self):
return self.parent
@ -496,6 +498,7 @@ class PodcastEpisode(PodcastModelObject):
gpodder.user_extensions.on_episode_delete(self, filename)
util.delete_file(filename)
self._download_error = None
self.set_state(gpodder.STATE_DELETED)
def get_playback_url(self, config=None, allow_partial=False):