diff --git a/qutebrowser/browser/downloads.py b/qutebrowser/browser/downloads.py index 478bd7483..9458e39d0 100644 --- a/qutebrowser/browser/downloads.py +++ b/qutebrowser/browser/downloads.py @@ -73,11 +73,18 @@ def download_dir(): remember_dir = config.val.downloads.location.remember if remember_dir and last_used_directory is not None: - return last_used_directory + ddir = last_used_directory elif directory is None: - return standarddir.download() + ddir = standarddir.download() else: - return directory + ddir = directory + + try: + os.makedirs(ddir) + except FileExistsError: + pass + + return ddir def immediate_download_path(prompt_download_directory=None): diff --git a/qutebrowser/utils/standarddir.py b/qutebrowser/utils/standarddir.py index 1d0bf7749..b5ec5f993 100644 --- a/qutebrowser/utils/standarddir.py +++ b/qutebrowser/utils/standarddir.py @@ -118,12 +118,12 @@ def _init_download(args): """Initialize the location for downloads. Note this is only the default directory as found by Qt. + Therefore, we also don't create it. """ typ = QStandardPaths.DownloadLocation overridden, path = _from_args(typ, args) if not overridden: path = _writable_location(typ) - _create(path) _locations[Location.download] = path diff --git a/tests/unit/utils/test_standarddir.py b/tests/unit/utils/test_standarddir.py index cdacf603e..1fe17711f 100644 --- a/tests/unit/utils/test_standarddir.py +++ b/tests/unit/utils/test_standarddir.py @@ -418,3 +418,15 @@ def test_init(mocker, tmpdir, with_args): assert standarddir._locations != {} if with_args: assert m.called + + +@pytest.mark.linux +def test_downloads_dir_not_crated(monkeypatch, tmpdir): + """Make sure ~/Downloads is not created.""" + download_dir = tmpdir / 'Downloads' + monkeypatch.setenv('HOME', str(tmpdir)) + # Make sure xdg-user-dirs.dirs is not picked up + monkeypatch.delenv('XDG_CONFIG_HOME', raising=False) + standarddir._init_dirs() + assert standarddir.download() == str(download_dir) + assert not download_dir.exists()