def handle_download(self, qt_item): """Start a download coming from a QWebEngineProfile.""" suggested_filename = _get_suggested_filename(qt_item.path()) download = DownloadItem(qt_item) self._init_item(download, auto_remove=False, suggested_filename=suggested_filename) if self._mhtml_target is not None: download.set_target(self._mhtml_target) self._mhtml_target = None return filename = downloads.immediate_download_path() if filename is not None: # User doesn't want to be asked, so just use the download_dir target = downloads.FileDownloadTarget(filename) download.set_target(target) return # Ask the user for a filename - needs to be blocking! question = downloads.get_filename_question( suggested_filename=suggested_filename, url=qt_item.url(), parent=self) self._init_filename_question(question, download) message.global_bridge.ask(question, blocking=True)
def handle_download(self, qt_item): """Start a download coming from a QWebEngineProfile.""" qt_filename = os.path.basename(qt_item.path()) # FIXME use 5.14 API mime_type = qt_item.mimeType() url = qt_item.url() # WORKAROUND for https://bugreports.qt.io/browse/QTBUG-90355 if version.qtwebengine_versions().webengine >= utils.VersionNumber( 5, 15, 3): needs_workaround = False elif url.scheme().lower() == 'data': if '/' in url.path().split(',')[-1]: # e.g. a slash in base64 wrong_filename = url.path().split('/')[-1] else: wrong_filename = mime_type.split('/')[1] needs_workaround = qt_filename == wrong_filename else: needs_workaround = False if needs_workaround: suggested_filename = urlutils.filename_from_url( url, fallback='qutebrowser-download') else: suggested_filename = _strip_suffix(qt_filename) use_pdfjs = pdfjs.should_use_pdfjs(mime_type, url) download = DownloadItem(qt_item, manager=self) self._init_item(download, auto_remove=use_pdfjs, suggested_filename=suggested_filename) if self._mhtml_target is not None: download.set_target(self._mhtml_target) self._mhtml_target = None return if use_pdfjs: download.set_target(downloads.PDFJSDownloadTarget()) return filename = downloads.immediate_download_path() if filename is not None: # User doesn't want to be asked, so just use the download_dir target = downloads.FileDownloadTarget(filename) download.set_target(target) return if download.cancel_for_origin(): return # Ask the user for a filename - needs to be blocking! question = downloads.get_filename_question( suggested_filename=suggested_filename, url=qt_item.url(), parent=self) self._init_filename_question(question, download) message.global_bridge.ask(question, blocking=True)
def fetch(self, reply, *, target=None, auto_remove=False, suggested_filename=None, prompt_download_directory=None): """Download a QNetworkReply to disk. Args: reply: The QNetworkReply to download. target: Where to save the download as downloads.DownloadTarget. auto_remove: Whether to remove the download even if downloads.remove_finished is set to -1. suggested_filename: The filename to use for the file. prompt_download_directory: Whether to prompt for a location to download the file to. Return: The created DownloadItem. """ if not suggested_filename: try: suggested_filename = target.suggested_filename() except downloads.NoFilenameError: _, suggested_filename = http.parse_content_disposition(reply) log.downloads.debug("fetch: {} -> {}".format(reply.url(), suggested_filename)) download = DownloadItem(reply, manager=self) self._init_item(download, auto_remove, suggested_filename) if download.cancel_for_origin(): return download if target is not None: download.set_target(target) return download # Neither filename nor fileobj were given filename = downloads.immediate_download_path(prompt_download_directory) if filename is not None: # User doesn't want to be asked, so just use the download_dir target = downloads.FileDownloadTarget(filename) download.set_target(target) return download # Ask the user for a filename question = downloads.get_filename_question( suggested_filename=suggested_filename, url=reply.url(), parent=self) self._init_filename_question(question, download) message.global_bridge.ask(question, blocking=False) return download
def fetch(self, reply, *, target=None, auto_remove=False, suggested_filename=None, prompt_download_directory=None): """Download a QNetworkReply to disk. Args: reply: The QNetworkReply to download. target: Where to save the download as downloads.DownloadTarget. auto_remove: Whether to remove the download even if downloads.remove_finished is set to -1. Return: The created DownloadItem. """ if not suggested_filename: try: suggested_filename = target.suggested_filename() except downloads.NoFilenameError: _, suggested_filename = http.parse_content_disposition(reply) log.downloads.debug("fetch: {} -> {}".format(reply.url(), suggested_filename)) download = DownloadItem(reply, manager=self) self._init_item(download, auto_remove, suggested_filename) if target is not None: download.set_target(target) return download # Neither filename nor fileobj were given filename = downloads.immediate_download_path(prompt_download_directory) if filename is not None: # User doesn't want to be asked, so just use the download_dir target = downloads.FileDownloadTarget(filename) download.set_target(target) return download # Ask the user for a filename question = downloads.get_filename_question( suggested_filename=suggested_filename, url=reply.url(), parent=self) self._init_filename_question(question, download) message.global_bridge.ask(question, blocking=False) return download
def get_mhtml(self, tab, target): """Download the given tab as mhtml to the given DownloadTarget.""" assert tab.backend == usertypes.Backend.QtWebKit from qutebrowser.browser.webkit import mhtml if target is not None: mhtml.start_download_checked(target, tab=tab) return suggested_fn = utils.sanitize_filename(tab.title() + ".mhtml") filename = downloads.immediate_download_path() if filename is not None: target = downloads.FileDownloadTarget(filename) mhtml.start_download_checked(target, tab=tab) else: question = downloads.get_filename_question( suggested_filename=suggested_fn, url=tab.url(), parent=tab) question.answered.connect( functools.partial(mhtml.start_download_checked, tab=tab)) message.global_bridge.ask(question, blocking=False)
def get_mhtml(self, tab, target): """Download the given tab as mhtml to the given DownloadTarget.""" assert tab.backend == usertypes.Backend.QtWebKit from qutebrowser.browser.webkit import mhtml if target is not None: mhtml.start_download_checked(target, tab=tab) return suggested_fn = utils.sanitize_filename(tab.title() + ".mhtml") filename = downloads.immediate_download_path() if filename is not None: target = downloads.FileDownloadTarget(filename) mhtml.start_download_checked(target, tab=tab) else: question = downloads.get_filename_question( suggested_filename=suggested_fn, url=tab.url(), parent=tab) question.answered.connect(functools.partial( mhtml.start_download_checked, tab=tab)) message.global_bridge.ask(question, blocking=False)
def handle_download(self, qt_item): """Start a download coming from a QWebEngineProfile.""" if qt_item.url().scheme().lower() == 'data': # WORKAROUND for an unknown QtWebEngine bug (?) which gives us base64 data # as filename. suggested_filename = urlutils.filename_from_url( qt_item.url(), fallback='qutebrowser-download') else: suggested_filename = _get_suggested_filename(qt_item.path()) use_pdfjs = pdfjs.should_use_pdfjs(qt_item.mimeType(), qt_item.url()) download = DownloadItem(qt_item, manager=self) self._init_item(download, auto_remove=use_pdfjs, suggested_filename=suggested_filename) if self._mhtml_target is not None: download.set_target(self._mhtml_target) self._mhtml_target = None return if use_pdfjs: download.set_target(downloads.PDFJSDownloadTarget()) return filename = downloads.immediate_download_path() if filename is not None: # User doesn't want to be asked, so just use the download_dir target = downloads.FileDownloadTarget(filename) download.set_target(target) return # Ask the user for a filename - needs to be blocking! question = downloads.get_filename_question( suggested_filename=suggested_filename, url=qt_item.url(), parent=self) self._init_filename_question(question, download) message.global_bridge.ask(question, blocking=True)