def _download_done( self, fileinfo: FileInfo, statusw: urwid.WidgetPlaceholder, task: asyncio.Task ) -> None: del self._dl_in_progress[fileinfo.name] if task.cancelled(): statusw.original_widget = urwid.Text(("error message", " Cancelled ")) return exc = task.exception() if exc is not None: statusw.original_widget = urwid.Text(("error banner", " Failed ")) return statusw.original_widget = urwid.Text(("success banner", " Done "))
def _file_clicked(self, fileinfo: FileInfo, statusw: urwid.WidgetPlaceholder, w: urwid.Widget) -> None: if fileinfo.name in self._dl_in_progress: # Already in progress, ignore return self._dl_in_progress[fileinfo.name] = statusw pb = urwid.ProgressBar("pg normal", "pg complete") statusw.original_widget = pb progress = ProgressBarState(pb) coro = self.downloader.download(fileinfo, progress) task = self.shell.screen.spawn_task(self, coro) task.add_done_callback( functools.partial(self._download_done, fileinfo, statusw))