From b91e2e32677ab296a752281d46a14b3f65542dab Mon Sep 17 00:00:00 2001 From: Jimmy Date: Tue, 2 Jan 2018 14:13:13 +1300 Subject: [PATCH] Allow download manager to overwrite existing files unprompted. This is to support the non-interactive use case of setting a `FileDownloadTarget` and passing auto_remove and not caring if the target file exists or not. An alternative to adding the attribute to `FileDownloadTarget` and having set_target pull it out would be to add a new param to `fetch()` and `set_target()`. But it would only be used for one target type anyway. --- qutebrowser/browser/downloads.py | 8 ++++++-- qutebrowser/browser/greasemonkey.py | 3 ++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/qutebrowser/browser/downloads.py b/qutebrowser/browser/downloads.py index 4f390b18b..dd112e00a 100644 --- a/qutebrowser/browser/downloads.py +++ b/qutebrowser/browser/downloads.py @@ -238,11 +238,14 @@ class FileDownloadTarget(_DownloadTarget): Attributes: filename: Filename where the download should be saved. + force_overwrite: Whether to overwrite the target without + prompting the user. """ - def __init__(self, filename): + def __init__(self, filename, force_overwrite=False): # pylint: disable=super-init-not-called self.filename = filename + self.force_overwrite = force_overwrite def suggested_filename(self): return os.path.basename(self.filename) @@ -738,7 +741,8 @@ class AbstractDownloadItem(QObject): if isinstance(target, FileObjDownloadTarget): self._set_fileobj(target.fileobj, autoclose=False) elif isinstance(target, FileDownloadTarget): - self._set_filename(target.filename) + self._set_filename( + target.filename, force_overwrite=target.force_overwrite) elif isinstance(target, OpenFileDownloadTarget): try: fobj = temp_download_manager.get_tmpfile(self.basename) diff --git a/qutebrowser/browser/greasemonkey.py b/qutebrowser/browser/greasemonkey.py index 07e73acfa..bc6208e90 100644 --- a/qutebrowser/browser/greasemonkey.py +++ b/qutebrowser/browser/greasemonkey.py @@ -276,7 +276,8 @@ class GreasemonkeyManager(QObject): download_manager = objreg.get('qtnetwork-download-manager') for url, target_path in required_dls: - target = downloads.FileDownloadTarget(target_path) + target = downloads.FileDownloadTarget(target_path, + force_overwrite=True) download = download_manager.get(QUrl(url), target=target, auto_remove=True) download.requested_url = url