From 3e2ba32240095108e0fa2fabe85b20278753d688 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Mon, 20 Mar 2017 09:32:44 +0100 Subject: [PATCH] Fix retrying downloads with QtWebEngine Fixes #2298 --- CHANGELOG.asciidoc | 1 + qutebrowser/browser/downloads.py | 10 +++++++++- qutebrowser/browser/downloadview.py | 2 +- qutebrowser/browser/webengine/webenginedownloads.py | 3 ++- tests/end2end/features/downloads.feature | 8 ++++++++ 5 files changed, 21 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 0e33dbdb2..2b5da01a9 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -34,6 +34,7 @@ Fixed - Added a workaround for a black screen with QtWebEngine with some setups (requires PyOpenGL to be installed) +- Fixed crash when trying to retry downloads with QtWebEngine v0.10.1 ------- diff --git a/qutebrowser/browser/downloads.py b/qutebrowser/browser/downloads.py index 0e6a7af4f..51ccdbfeb 100644 --- a/qutebrowser/browser/downloads.py +++ b/qutebrowser/browser/downloads.py @@ -507,6 +507,14 @@ class AbstractDownloadItem(QObject): """Retry a failed download.""" raise NotImplementedError + @pyqtSlot() + def try_retry(self): + """Try to retry a download and show an error if it's unsupported.""" + try: + self.retry() + except UnsupportedOperationError as e: + message.error(str(e)) + def _get_open_filename(self): """Get the filename to open a download. @@ -968,7 +976,7 @@ class DownloadModel(QAbstractListModel): raise cmdexc.CommandError("No failed downloads!") else: download = to_retry[0] - download.retry() + download.try_retry() def can_clear(self): """Check if there are finished downloads to clear.""" diff --git a/qutebrowser/browser/downloadview.py b/qutebrowser/browser/downloadview.py index f2a380114..633fd8700 100644 --- a/qutebrowser/browser/downloadview.py +++ b/qutebrowser/browser/downloadview.py @@ -134,7 +134,7 @@ class DownloadView(QListView): if item.successful: actions.append(("Open", item.open_file)) else: - actions.append(("Retry", item.retry)) + actions.append(("Retry", item.try_retry)) actions.append(("Remove", item.remove)) else: actions.append(("Cancel", item.cancel)) diff --git a/qutebrowser/browser/webengine/webenginedownloads.py b/qutebrowser/browser/webengine/webenginedownloads.py index 070bcf8c0..0f7d76c5b 100644 --- a/qutebrowser/browser/webengine/webenginedownloads.py +++ b/qutebrowser/browser/webengine/webenginedownloads.py @@ -95,7 +95,8 @@ class DownloadItem(downloads.AbstractDownloadItem): def retry(self): # https://bugreports.qt.io/browse/QTBUG-56840 - raise downloads.UnsupportedOperationError + raise downloads.UnsupportedOperationError( + "Retrying downloads is unsupported with QtWebEngine") def _get_open_filename(self): return self._filename diff --git a/tests/end2end/features/downloads.feature b/tests/end2end/features/downloads.feature index b55673344..cb198e09d 100644 --- a/tests/end2end/features/downloads.feature +++ b/tests/end2end/features/downloads.feature @@ -137,6 +137,14 @@ Feature: Downloading things from a website. does-not-exist does-not-exist + @qtwebkit_skip + Scenario: Retrying a failed download with QtWebEngine + When I open data/downloads/issue2298.html + And I run :click-element id download + And I wait for "Download error: *" in the log + And I run :download-retry + Then the error "Retrying downloads is unsupported with QtWebEngine" should be shown + Scenario: Retrying with count When I run :download http://localhost:(port)/data/downloads/download.bin And I run :download http://localhost:(port)/does-not-exist