summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Rosenzweig <mail4jasonr@gmail.com>2021-07-13 18:56:20 +0800
committerJason Rosenzweig <mail4jasonr@gmail.com>2021-07-13 18:56:20 +0800
commitf2cc3fa731047472eacc6818bba1885e62e356f0 (patch)
tree9bde8390dd48ff75396129722e4d9775388d36eb
parentcc8e67962bae163eac80fe20e753aa90491bc6da (diff)
downloadqutebrowser-f2cc3fa731047472eacc6818bba1885e62e356f0.tar.gz
qutebrowser-f2cc3fa731047472eacc6818bba1885e62e356f0.zip
Initial commit of fix for issue 6549
-rw-r--r--misc/requirements/requirements-pyinstaller.txt2
-rw-r--r--qutebrowser/browser/downloads.py3
-rw-r--r--qutebrowser/browser/webengine/webenginedownloads.py19
3 files changed, 19 insertions, 5 deletions
diff --git a/misc/requirements/requirements-pyinstaller.txt b/misc/requirements/requirements-pyinstaller.txt
index 86d73655d..4aa157bad 100644
--- a/misc/requirements/requirements-pyinstaller.txt
+++ b/misc/requirements/requirements-pyinstaller.txt
@@ -1,5 +1,5 @@
# This file is automatically generated by scripts/dev/recompile_requirements.py
altgraph==0.17
-pyinstaller==4.3
+pyinstaller==4.4
pyinstaller-hooks-contrib==2021.2
diff --git a/qutebrowser/browser/downloads.py b/qutebrowser/browser/downloads.py
index fa4ac9da2..e09c8122b 100644
--- a/qutebrowser/browser/downloads.py
+++ b/qutebrowser/browser/downloads.py
@@ -184,6 +184,9 @@ def get_filename_question(*, suggested_filename, url, parent=None):
"""
suggested_filename = utils.sanitize_filename(suggested_filename)
+ if url.toDisplayString()[:7] == "file://":
+ return "FILE"
+
q = usertypes.Question(parent)
q.title = "Save file to:"
q.text = "Please enter a location for <b>{}</b>".format(
diff --git a/qutebrowser/browser/webengine/webenginedownloads.py b/qutebrowser/browser/webengine/webenginedownloads.py
index 0ec9d551c..5915439bb 100644
--- a/qutebrowser/browser/webengine/webenginedownloads.py
+++ b/qutebrowser/browser/webengine/webenginedownloads.py
@@ -22,6 +22,8 @@
import re
import os.path
import functools
+import platform
+import subprocess
from PyQt5.QtCore import pyqtSlot, Qt, QUrl, QObject
from PyQt5.QtWebEngineWidgets import QWebEngineDownloadItem
@@ -34,7 +36,8 @@ from qutebrowser.utils import (debug, usertypes, message, log, objreg, urlutils,
class DownloadItem(downloads.AbstractDownloadItem):
"""A wrapper over a QWebEngineDownloadItem.
-
+ if self.url().toDisplayString()[:6] == "file://":
+ qt_item.cancel()
Attributes:
_qt_item: The wrapped item.
"""
@@ -296,9 +299,17 @@ class DownloadManager(downloads.AbstractDownloadManager):
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)
+ if question == "FILE":
+ if platform.system() == "Linux":
+ subprocess.call(["xdg-open", qt_item.url().toDisplayString()])
+ elif platform.system() == 'Darwin':
+ subprocess.call(["open", qt_item.url().toDisplayString()])
+ elif platform.system() == 'Windows':
+ subprocess.call(["start", qt_item.url().toDisplayString()])
+ qt_item.cancel()
+ else:
+ self._init_filename_question(question, download)
+ message.global_bridge.ask(question, blocking=True)
# The filename is set via the question.answered signal, connected in
# _init_filename_question.