summaryrefslogtreecommitdiff
path: root/qutebrowser/browser/qtnetworkdownloads.py
diff options
context:
space:
mode:
Diffstat (limited to 'qutebrowser/browser/qtnetworkdownloads.py')
-rw-r--r--qutebrowser/browser/qtnetworkdownloads.py64
1 files changed, 31 insertions, 33 deletions
diff --git a/qutebrowser/browser/qtnetworkdownloads.py b/qutebrowser/browser/qtnetworkdownloads.py
index 586570390..3c782db84 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 qutebrowser.qt.core import pyqtSlot, pyqtSignal, QTimer, QUrl
-from qutebrowser.qt.widgets import QApplication
-from qutebrowser.qt.network import QNetworkRequest, QNetworkReply, QNetworkAccessManager
+from qutebrowser.qt import widgets
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 network, core
@dataclasses.dataclass
class _RetryInfo:
- request: QNetworkRequest
- manager: QNetworkAccessManager
+ request: network.QNetworkRequest
+ manager: network.QNetworkAccessManager
class DownloadItem(downloads.AbstractDownloadItem):
@@ -78,7 +76,7 @@ class DownloadItem(downloads.AbstractDownloadItem):
arg 0: The new DownloadItem
"""
- adopt_download = pyqtSignal(object) # DownloadItem
+ adopt_download = core.pyqtSignal(object) # DownloadItem
def __init__(self, reply, manager):
"""Constructor.
@@ -172,10 +170,10 @@ 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.NetworkError.NoError:
- QTimer.singleShot(0, lambda: self._die(reply.errorString()))
+ if reply.error() != network.QNetworkReply.NetworkError.NoError:
+ core.QTimer.singleShot(0, lambda: self._die(reply.errorString()))
- @pyqtSlot(QUrl)
+ @core.pyqtSlot(core.QUrl)
def _on_redirected(self, url):
log.downloads.debug(f"redirected: {self._reply.url()} -> {url}")
@@ -190,7 +188,7 @@ class DownloadItem(downloads.AbstractDownloadItem):
self.fileobj.close()
self.cancelled.emit()
- @pyqtSlot()
+ @core.pyqtSlot()
def retry(self):
"""Retry a failed download."""
assert self.done
@@ -213,20 +211,20 @@ class DownloadItem(downloads.AbstractDownloadItem):
filename = getattr(self.fileobj, 'name', None)
return filename
- def url(self) -> QUrl:
+ def url(self) -> core.QUrl:
# Note: self._reply is deleted when the download finishes
return self._url
- def origin(self) -> QUrl:
+ def origin(self) -> core.QUrl:
if self._reply is None:
- return QUrl()
+ return core.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 core.QUrl()
def _ensure_can_set_filename(self, filename):
if self.fileobj is not None: # pragma: no cover
@@ -300,7 +298,7 @@ class DownloadItem(downloads.AbstractDownloadItem):
self.fileobj.write(self._reply.readAll())
if self._autoclose:
self.fileobj.close()
- self.successful = self._reply.error() == QNetworkReply.NetworkError.NoError
+ self.successful = self._reply.error() == network.QNetworkReply.NetworkError.NoError
self._reply.close()
self._reply.deleteLater()
self._reply = None
@@ -309,7 +307,7 @@ class DownloadItem(downloads.AbstractDownloadItem):
log.downloads.debug("Download {} finished".format(self.basename))
self.data_changed.emit()
- @pyqtSlot()
+ @core.pyqtSlot()
def _on_reply_finished(self):
"""Clean up when the download was finished.
@@ -327,7 +325,7 @@ class DownloadItem(downloads.AbstractDownloadItem):
# clean up.
self._finish_download()
- @pyqtSlot()
+ @core.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:
@@ -342,21 +340,21 @@ class DownloadItem(downloads.AbstractDownloadItem):
except OSError as e:
self._die(e.strerror)
- @pyqtSlot('QNetworkReply::NetworkError')
+ @core.pyqtSlot('QNetworkReply::NetworkError')
def _on_reply_error(self, code):
"""Handle QNetworkReply errors."""
- if code == QNetworkReply.NetworkError.OperationCanceledError:
+ if code == network.QNetworkReply.NetworkError.OperationCanceledError:
return
if self._reply is None:
error = "Unknown error: {}".format(
- debug.qenum_key(QNetworkReply, code))
+ debug.qenum_key(network.QNetworkReply, code))
else:
error = self._reply.errorString()
self._die(error)
- @pyqtSlot()
+ @core.pyqtSlot()
def _on_read_timer_timeout(self):
"""Read some bytes from the QNetworkReply periodically."""
assert self._reply is not None
@@ -366,7 +364,7 @@ class DownloadItem(downloads.AbstractDownloadItem):
if data is not None:
self._buffer.write(data)
- @pyqtSlot()
+ @core.pyqtSlot()
def _on_meta_data_changed(self):
"""Update the download's metadata."""
if self._reply is None:
@@ -408,7 +406,7 @@ class DownloadManager(downloads.AbstractDownloadManager):
win_id=None, tab_id=None,
private=config.val.content.private_browsing, parent=self)
- @pyqtSlot('QUrl')
+ @core.pyqtSlot('QUrl')
def get(self, url, cache=True, **kwargs):
"""Start a download with a link URL.
@@ -424,18 +422,18 @@ class DownloadManager(downloads.AbstractDownloadManager):
urlutils.invalid_url_error(url, "start download")
return None
- req = QNetworkRequest(url)
+ req = network.QNetworkRequest(url)
user_agent = websettings.user_agent(url)
- req.setHeader(QNetworkRequest.KnownHeaders.UserAgentHeader, user_agent)
+ req.setHeader(network.QNetworkRequest.KnownHeaders.UserAgentHeader, user_agent)
if not cache:
- req.setAttribute(QNetworkRequest.Attribute.CacheSaveControlAttribute, False)
+ req.setAttribute(network.QNetworkRequest.Attribute.CacheSaveControlAttribute, False)
# Needed for Qt 5, default on Qt 6
# We don't set this on the QNAM because QtWebKit handles redirects manually.
req.setAttribute(
- QNetworkRequest.Attribute.RedirectPolicyAttribute,
- QNetworkRequest.RedirectPolicy.NoLessSafeRedirectPolicy,
+ network.QNetworkRequest.Attribute.RedirectPolicyAttribute,
+ network.QNetworkRequest.RedirectPolicy.NoLessSafeRedirectPolicy,
)
req.setMaximumRedirectsAllowed(self._MAX_REDIRECTS)
@@ -497,8 +495,8 @@ class DownloadManager(downloads.AbstractDownloadManager):
"""
# WORKAROUND for Qt corrupting data loaded from cache:
# https://bugreports.qt.io/browse/QTBUG-42757
- request.setAttribute(QNetworkRequest.Attribute.CacheLoadControlAttribute,
- QNetworkRequest.CacheLoadControl.AlwaysNetwork)
+ request.setAttribute(network.QNetworkRequest.Attribute.CacheLoadControlAttribute,
+ network.QNetworkRequest.CacheLoadControl.AlwaysNetwork)
if suggested_fn is None:
suggested_fn = self._get_suggested_filename(request)
@@ -524,7 +522,7 @@ class DownloadManager(downloads.AbstractDownloadManager):
reply = qnam.get(request)
return self.fetch(reply, **kwargs)
- @pyqtSlot('QNetworkReply')
+ @core.pyqtSlot('QNetworkReply')
def fetch(self, reply, *, target=None, auto_remove=False,
suggested_filename=None, prompt_download_directory=None):
"""Download a QNetworkReply to disk.
@@ -595,6 +593,6 @@ class DownloadManager(downloads.AbstractDownloadManager):
def init():
"""Initialize the global QtNetwork download manager."""
- download_manager = DownloadManager(parent=QApplication.instance())
+ download_manager = DownloadManager(parent=widgets.QApplication.instance())
objreg.register('qtnetwork-download-manager', download_manager)
quitter.instance.shutting_down.connect(download_manager.shutdown)