diff options
Diffstat (limited to 'qutebrowser/browser/downloads.py')
-rw-r--r-- | qutebrowser/browser/downloads.py | 103 |
1 files changed, 50 insertions, 53 deletions
diff --git a/qutebrowser/browser/downloads.py b/qutebrowser/browser/downloads.py index 32bfd2693..b4dd859d8 100644 --- a/qutebrowser/browser/downloads.py +++ b/qutebrowser/browser/downloads.py @@ -30,22 +30,19 @@ import tempfile import enum from typing import Any, Dict, IO, List, MutableSequence, Optional, Union -from PyQt5.QtCore import (pyqtSlot, pyqtSignal, Qt, QObject, QModelIndex, - QTimer, QAbstractListModel, QUrl) - from qutebrowser.browser import pdfjs from qutebrowser.api import cmdutils from qutebrowser.config import config from qutebrowser.utils import (usertypes, standarddir, utils, message, log, qtutils, objreg) -from qutebrowser.qt import sip +from qutebrowser.qt import QtCore, sip class ModelRole(enum.IntEnum): """Custom download model roles.""" - item = Qt.UserRole + item = QtCore.Qt.UserRole # Remember the last used directory @@ -78,7 +75,7 @@ def init(): config.instance.changed.connect(_clear_last_used) -@pyqtSlot() +@QtCore.pyqtSlot() def shutdown(): temp_download_manager.cleanup() @@ -188,7 +185,7 @@ def get_filename_question(*, suggested_filename, url, parent=None): q.title = "Save file to:" q.text = "Please enter a location for <b>{}</b>".format( html.escape(url.toDisplayString())) - q.url = url.toString(QUrl.RemovePassword | QUrl.FullyEncoded) + q.url = url.toString(QtCore.QUrl.RemovePassword | QtCore.QUrl.FullyEncoded) q.mode = usertypes.PromptMode.download q.completed.connect(q.deleteLater) q.default = _path_suggestion(suggested_filename) @@ -329,7 +326,7 @@ class PDFJSDownloadTarget(_DownloadTarget): return 'temporary PDF.js file' -class DownloadItemStats(QObject): +class DownloadItemStats(QtCore.QObject): """Statistics (bytes done, total bytes, time, etc.) about a download. @@ -398,7 +395,7 @@ class DownloadItemStats(QObject): else: return remaining_bytes / avg - @pyqtSlot('qint64', 'qint64') + @QtCore.pyqtSlot('qint64', 'qint64') def on_download_progress(self, bytes_done, bytes_total): """Update local variables when the download progress changed. @@ -412,7 +409,7 @@ class DownloadItemStats(QObject): self.total = bytes_total -class AbstractDownloadItem(QObject): +class AbstractDownloadItem(QtCore.QObject): """Shared QtNetwork/QtWebEngine part of a download item. @@ -441,12 +438,12 @@ class AbstractDownloadItem(QObject): arg 2: The original download URL. """ - data_changed = pyqtSignal() - finished = pyqtSignal() - error = pyqtSignal(str) - cancelled = pyqtSignal() - remove_requested = pyqtSignal() - pdfjs_requested = pyqtSignal(str, QUrl) + data_changed = QtCore.pyqtSignal() + finished = QtCore.pyqtSignal() + error = QtCore.pyqtSignal(str) + cancelled = QtCore.pyqtSignal() + remove_requested = QtCore.pyqtSignal() + pdfjs_requested = QtCore.pyqtSignal(str, QtCore.QUrl) def __init__(self, manager, parent=None): super().__init__(parent) @@ -565,7 +562,7 @@ class AbstractDownloadItem(QObject): """Actual cancel implementation.""" raise NotImplementedError - @pyqtSlot() + @QtCore.pyqtSlot() def cancel(self, *, remove_data=True): """Cancel the download. @@ -581,7 +578,7 @@ class AbstractDownloadItem(QObject): self.finished.emit() self.data_changed.emit() - @pyqtSlot() + @QtCore.pyqtSlot() def remove(self): """Remove the download from the model.""" self.remove_requested.emit() @@ -597,12 +594,12 @@ class AbstractDownloadItem(QObject): except OSError: log.downloads.exception("Failed to remove partial file") - @pyqtSlot() + @QtCore.pyqtSlot() def retry(self): """Retry a failed download.""" raise NotImplementedError - @pyqtSlot() + @QtCore.pyqtSlot() def try_retry(self): """Try to retry a download and show an error if it's unsupported.""" try: @@ -610,11 +607,11 @@ class AbstractDownloadItem(QObject): except UnsupportedOperationError as e: message.error(str(e)) - def url(self) -> QUrl: + def url(self) -> QtCore.QUrl: """Get the download's URL (i.e. where the file is downloaded from).""" raise NotImplementedError - def origin(self) -> QUrl: + def origin(self) -> QtCore.QUrl: """Get the download's origin URL (i.e. the page starting the download).""" raise NotImplementedError @@ -625,7 +622,7 @@ class AbstractDownloadItem(QObject): """ raise NotImplementedError - @pyqtSlot() + @QtCore.pyqtSlot() def open_file(self, cmdline=None, open_dir=False): """Open the downloaded file. @@ -647,7 +644,7 @@ class AbstractDownloadItem(QObject): # is important on systems where process creation takes long, as # otherwise the prompt might hang around and cause bugs # (see issue #2296) - QTimer.singleShot(0, lambda: utils.open_file(filename, cmdline)) + QtCore.QTimer.singleShot(0, lambda: utils.open_file(filename, cmdline)) def _ensure_can_set_filename(self, filename): """Make sure we can still set a filename.""" @@ -884,7 +881,7 @@ class AbstractDownloadItem(QObject): raise ValueError("Unsupported download target: {}".format(target)) -class AbstractDownloadManager(QObject): +class AbstractDownloadManager(QtCore.QObject): """Backend-independent download manager code. @@ -901,11 +898,11 @@ class AbstractDownloadManager(QObject): The argument is the index of the changed download """ - begin_remove_row = pyqtSignal(int) - end_remove_row = pyqtSignal() - begin_insert_row = pyqtSignal(int) - end_insert_row = pyqtSignal() - data_changed = pyqtSignal(int) + begin_remove_row = QtCore.pyqtSignal(int) + end_remove_row = QtCore.pyqtSignal() + begin_insert_row = QtCore.pyqtSignal(int) + end_insert_row = QtCore.pyqtSignal() + data_changed = QtCore.pyqtSignal(int) def __init__(self, parent=None): super().__init__(parent) @@ -917,7 +914,7 @@ class AbstractDownloadManager(QObject): def __repr__(self): return utils.get_repr(self, downloads=len(self.downloads)) - @pyqtSlot() + @QtCore.pyqtSlot() def _update_gui(self): """Periodical GUI update of all items.""" assert self.downloads @@ -925,8 +922,8 @@ class AbstractDownloadManager(QObject): dl.stats.update_speed() self.data_changed.emit(-1) - @pyqtSlot(str, QUrl) - def _on_pdfjs_requested(self, filename: str, original_url: QUrl) -> None: + @QtCore.pyqtSlot(str, QtCore.QUrl) + def _on_pdfjs_requested(self, filename: str, original_url: QtCore.QUrl) -> None: """Open PDF.js when a download requests it.""" tabbed_browser = objreg.get('tabbed-browser', scope='window', window='last-focused') @@ -942,7 +939,7 @@ class AbstractDownloadManager(QObject): delay = config.val.downloads.remove_finished if delay > -1: download.finished.connect( - lambda: QTimer.singleShot(delay, download.remove)) + lambda: QtCore.QTimer.singleShot(delay, download.remove)) elif auto_remove: download.finished.connect(download.remove) @@ -961,7 +958,7 @@ class AbstractDownloadManager(QObject): if not self._update_timer.isActive(): self._update_timer.start() - @pyqtSlot(AbstractDownloadItem) + @QtCore.pyqtSlot(AbstractDownloadItem) def _on_data_changed(self, download): """Emit data_changed signal when download data changed.""" try: @@ -971,12 +968,12 @@ class AbstractDownloadManager(QObject): return self.data_changed.emit(idx) - @pyqtSlot(str) + @QtCore.pyqtSlot(str) def _on_error(self, msg): """Display error message on download errors.""" message.error("Download error: {}".format(msg)) - @pyqtSlot(AbstractDownloadItem) + @QtCore.pyqtSlot(AbstractDownloadItem) def _remove_item(self, download): """Remove a given download.""" if sip.isdeleted(self): @@ -1009,7 +1006,7 @@ class AbstractDownloadManager(QObject): download.cancelled.connect(question.abort) download.error.connect(question.abort) - @pyqtSlot() + @QtCore.pyqtSlot() def shutdown(self): """Cancel all downloads when shutting down.""" for download in self.downloads: @@ -1017,7 +1014,7 @@ class AbstractDownloadManager(QObject): download.cancel(remove_data=False) -class DownloadModel(QAbstractListModel): +class DownloadModel(QtCore.QAbstractListModel): """A list model showing downloads.""" @@ -1066,25 +1063,25 @@ class DownloadModel(QAbstractListModel): log.downloads.debug("_on_begin_insert_row with idx {}, " "webengine {}".format(idx, webengine)) if idx == -1: - self.beginInsertRows(QModelIndex(), 0, -1) + self.beginInsertRows(QtCore.QModelIndex(), 0, -1) return assert idx >= 0, idx if webengine: idx += len(self._qtnetwork_manager.downloads) - self.beginInsertRows(QModelIndex(), idx, idx) + self.beginInsertRows(QtCore.QModelIndex(), idx, idx) def _on_begin_remove_row(self, idx, webengine=False): log.downloads.debug("_on_begin_remove_row with idx {}, " "webengine {}".format(idx, webengine)) if idx == -1: - self.beginRemoveRows(QModelIndex(), 0, -1) + self.beginRemoveRows(QtCore.QModelIndex(), 0, -1) return assert idx >= 0, idx if webengine: idx += len(self._qtnetwork_manager.downloads) - self.beginRemoveRows(QModelIndex(), idx, idx) + self.beginRemoveRows(QtCore.QModelIndex(), idx, idx) def _on_data_changed(self, idx, *, webengine): """Called when a downloader's data changed. @@ -1266,10 +1263,10 @@ class DownloadModel(QAbstractListModel): idx = self.index(self.rowCount() - 1) return idx - def headerData(self, section, orientation, role=Qt.DisplayRole): + def headerData(self, section, orientation, role=QtCore.Qt.DisplayRole): """Simple constant header.""" - if (section == 0 and orientation == Qt.Horizontal and - role == Qt.DisplayRole): + if (section == 0 and orientation == QtCore.Qt.Horizontal and + role == QtCore.Qt.DisplayRole): return "Downloads" else: return "" @@ -1283,15 +1280,15 @@ class DownloadModel(QAbstractListModel): return None item = self[index.row()] - if role == Qt.DisplayRole: + if role == QtCore.Qt.DisplayRole: data: Any = str(item) - elif role == Qt.ForegroundRole: + elif role == QtCore.Qt.ForegroundRole: data = item.get_status_color('fg') - elif role == Qt.BackgroundRole: + elif role == QtCore.Qt.BackgroundRole: data = item.get_status_color('bg') elif role == ModelRole.item: data = item - elif role == Qt.ToolTipRole: + elif role == QtCore.Qt.ToolTipRole: if item.error_msg is None: data = None else: @@ -1306,10 +1303,10 @@ class DownloadModel(QAbstractListModel): The default would be Qt.ItemIsEnabled | Qt.ItemIsSelectable. """ if not index.isValid(): - return Qt.ItemFlags() - return Qt.ItemIsEnabled | Qt.ItemNeverHasChildren + return QtCore.Qt.ItemFlags() + return QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemNeverHasChildren - def rowCount(self, parent=QModelIndex()): + def rowCount(self, parent=QtCore.QModelIndex()): """Get count of active downloads.""" if parent.isValid(): # We don't have children |