diff options
Diffstat (limited to 'qutebrowser/browser/qtnetworkdownloads.py')
-rw-r--r-- | qutebrowser/browser/qtnetworkdownloads.py | 60 |
1 files changed, 29 insertions, 31 deletions
diff --git a/qutebrowser/browser/qtnetworkdownloads.py b/qutebrowser/browser/qtnetworkdownloads.py index 8adb7ea20..d8f1e645f 100644 --- a/qutebrowser/browser/qtnetworkdownloads.py +++ b/qutebrowser/browser/qtnetworkdownloads.py @@ -25,10 +25,7 @@ import shutil import functools import dataclasses from typing import Dict, IO, Optional - -from PyQt5.QtCore import pyqtSlot, pyqtSignal, QTimer, QUrl -from PyQt5.QtWidgets import QApplication -from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply, QNetworkAccessManager +from qutebrowser.qt import QtWidgets from qutebrowser.config import config, websettings from qutebrowser.utils import message, usertypes, log, urlutils, utils, debug, objreg @@ -36,13 +33,14 @@ from qutebrowser.misc import quitter from qutebrowser.browser import downloads from qutebrowser.browser.webkit import http from qutebrowser.browser.webkit.network import networkmanager +from qutebrowser.qt import QtNetwork, QtCore @dataclasses.dataclass class _RetryInfo: - request: QNetworkRequest - manager: QNetworkAccessManager + request: QtNetwork.QNetworkRequest + manager: QtNetwork.QNetworkAccessManager class DownloadItem(downloads.AbstractDownloadItem): @@ -83,7 +81,7 @@ class DownloadItem(downloads.AbstractDownloadItem): """ _MAX_REDIRECTS = 10 - adopt_download = pyqtSignal(object) # DownloadItem + adopt_download = QtCore.pyqtSignal(object) # DownloadItem def __init__(self, reply, manager): """Constructor. @@ -162,8 +160,8 @@ class DownloadItem(downloads.AbstractDownloadItem): # We could have got signals before we connected slots to them. # Here no signals are connected to the DownloadItem yet, so we use a # singleShot QTimer to emit them after they are connected. - if reply.error() != QNetworkReply.NoError: - QTimer.singleShot(0, lambda: self._die(reply.errorString())) + if reply.error() != QtNetwork.QNetworkReply.NoError: + QtCore.QTimer.singleShot(0, lambda: self._die(reply.errorString())) def _do_cancel(self): self._read_timer.stop() @@ -176,7 +174,7 @@ class DownloadItem(downloads.AbstractDownloadItem): self.fileobj.close() self.cancelled.emit() - @pyqtSlot() + @QtCore.pyqtSlot() def retry(self): """Retry a failed download.""" assert self.done @@ -199,20 +197,20 @@ class DownloadItem(downloads.AbstractDownloadItem): filename = getattr(self.fileobj, 'name', None) return filename - def url(self) -> QUrl: + def url(self) -> QtCore.QUrl: # Note: self._reply is deleted when the download finishes return self._url - def origin(self) -> QUrl: + def origin(self) -> QtCore.QUrl: if self._reply is None: - return QUrl() + return QtCore.QUrl() origin = self._reply.request().originatingObject() try: return origin.url() except AttributeError: # Raised either if origin is None or some object that doesn't # have its own url. - return QUrl() + return QtCore.QUrl() def _ensure_can_set_filename(self, filename): if self.fileobj is not None: # pragma: no cover @@ -286,7 +284,7 @@ class DownloadItem(downloads.AbstractDownloadItem): self.fileobj.write(self._reply.readAll()) if self._autoclose: self.fileobj.close() - self.successful = self._reply.error() == QNetworkReply.NoError + self.successful = self._reply.error() == QtNetwork.QNetworkReply.NoError self._reply.close() self._reply.deleteLater() self._reply = None @@ -295,7 +293,7 @@ class DownloadItem(downloads.AbstractDownloadItem): log.downloads.debug("Download {} finished".format(self.basename)) self.data_changed.emit() - @pyqtSlot() + @QtCore.pyqtSlot() def _on_reply_finished(self): """Clean up when the download was finished. @@ -316,7 +314,7 @@ class DownloadItem(downloads.AbstractDownloadItem): # clean up. self._finish_download() - @pyqtSlot() + @QtCore.pyqtSlot() def _on_ready_read(self): """Read available data and save file when ready to read.""" if self.fileobj is None or self._reply is None: @@ -331,21 +329,21 @@ class DownloadItem(downloads.AbstractDownloadItem): except OSError as e: self._die(e.strerror) - @pyqtSlot('QNetworkReply::NetworkError') + @QtCore.pyqtSlot('QNetworkReply::NetworkError') def _on_reply_error(self, code): """Handle QNetworkReply errors.""" - if code == QNetworkReply.OperationCanceledError: + if code == QtNetwork.QNetworkReply.OperationCanceledError: return if self._reply is None: error = "Unknown error: {}".format( - debug.qenum_key(QNetworkReply, code)) + debug.qenum_key(QtNetwork.QNetworkReply, code)) else: error = self._reply.errorString() self._die(error) - @pyqtSlot() + @QtCore.pyqtSlot() def _on_read_timer_timeout(self): """Read some bytes from the QNetworkReply periodically.""" assert self._reply is not None @@ -355,7 +353,7 @@ class DownloadItem(downloads.AbstractDownloadItem): if data is not None: self._buffer.write(data) - @pyqtSlot() + @QtCore.pyqtSlot() def _on_meta_data_changed(self): """Update the download's metadata.""" if self._reply is None: @@ -372,7 +370,7 @@ class DownloadItem(downloads.AbstractDownloadItem): """ assert self._reply is not None redirect = self._reply.attribute( - QNetworkRequest.RedirectionTargetAttribute) + QtNetwork.QNetworkRequest.RedirectionTargetAttribute) if redirect is None or redirect.isEmpty(): return False new_url = self._reply.url().resolved(redirect) @@ -430,7 +428,7 @@ class DownloadManager(downloads.AbstractDownloadManager): win_id=None, tab_id=None, private=config.val.content.private_browsing, parent=self) - @pyqtSlot('QUrl') + @QtCore.pyqtSlot('QUrl') def get(self, url, cache=True, **kwargs): """Start a download with a link URL. @@ -446,12 +444,12 @@ class DownloadManager(downloads.AbstractDownloadManager): urlutils.invalid_url_error(url, "start download") return None - req = QNetworkRequest(url) + req = QtNetwork.QNetworkRequest(url) user_agent = websettings.user_agent(url) - req.setHeader(QNetworkRequest.UserAgentHeader, user_agent) + req.setHeader(QtNetwork.QNetworkRequest.UserAgentHeader, user_agent) if not cache: - req.setAttribute(QNetworkRequest.CacheSaveControlAttribute, False) + req.setAttribute(QtNetwork.QNetworkRequest.CacheSaveControlAttribute, False) return self.get_request(req, **kwargs) @@ -511,8 +509,8 @@ class DownloadManager(downloads.AbstractDownloadManager): """ # WORKAROUND for Qt corrupting data loaded from cache: # https://bugreports.qt.io/browse/QTBUG-42757 - request.setAttribute(QNetworkRequest.CacheLoadControlAttribute, - QNetworkRequest.AlwaysNetwork) + request.setAttribute(QtNetwork.QNetworkRequest.CacheLoadControlAttribute, + QtNetwork.QNetworkRequest.AlwaysNetwork) if suggested_fn is None: suggested_fn = self._get_suggested_filename(request) @@ -538,7 +536,7 @@ class DownloadManager(downloads.AbstractDownloadManager): reply = qnam.get(request) return self.fetch(reply, **kwargs) - @pyqtSlot('QNetworkReply') + @QtCore.pyqtSlot('QNetworkReply') def fetch(self, reply, *, target=None, auto_remove=False, suggested_filename=None, prompt_download_directory=None): """Download a QNetworkReply to disk. @@ -608,6 +606,6 @@ class DownloadManager(downloads.AbstractDownloadManager): def init(): """Initialize the global QtNetwork download manager.""" - download_manager = DownloadManager(parent=QApplication.instance()) + download_manager = DownloadManager(parent=QtWidgets.QApplication.instance()) objreg.register('qtnetwork-download-manager', download_manager) quitter.instance.shutting_down.connect(download_manager.shutdown) |