diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
commit | 6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch) | |
tree | a68f146d7fa01f0134297619fbe7e33db084e0aa /comm/mail/components/preferences/downloads.js | |
parent | Initial commit. (diff) | |
download | thunderbird-upstream.tar.xz thunderbird-upstream.zip |
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | comm/mail/components/preferences/downloads.js | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/comm/mail/components/preferences/downloads.js b/comm/mail/components/preferences/downloads.js new file mode 100644 index 0000000000..ede1543492 --- /dev/null +++ b/comm/mail/components/preferences/downloads.js @@ -0,0 +1,132 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* import-globals-from preferences.js */ + +var { Downloads } = ChromeUtils.importESModule( + "resource://gre/modules/Downloads.sys.mjs" +); +var { FileUtils } = ChromeUtils.importESModule( + "resource://gre/modules/FileUtils.sys.mjs" +); + +Preferences.addAll([ + { id: "browser.download.useDownloadDir", type: "bool" }, + { id: "browser.download.folderList", type: "int" }, + { id: "browser.download.downloadDir", type: "file" }, + { id: "browser.download.dir", type: "file" }, + { id: "pref.downloads.disable_button.edit_actions", type: "bool" }, +]); + +var gDownloadDirSection = { + async chooseFolder() { + var fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker); + var bundlePreferences = document.getElementById("bundlePreferences"); + var title = bundlePreferences.getString("chooseAttachmentsFolderTitle"); + fp.init(window, title, Ci.nsIFilePicker.modeGetFolder); + + var customDirPref = Preferences.get("browser.download.dir"); + if (customDirPref.value) { + fp.displayDirectory = customDirPref.value; + } + fp.appendFilters(Ci.nsIFilePicker.filterAll); + + let rv = await new Promise(resolve => fp.open(resolve)); + if (rv != Ci.nsIFilePicker.returnOK || !fp.file) { + return; + } + + let file = fp.file.QueryInterface(Ci.nsIFile); + let currentDirPref = Preferences.get("browser.download.downloadDir"); + customDirPref.value = currentDirPref.value = file; + let folderListPref = Preferences.get("browser.download.folderList"); + folderListPref.value = await this._fileToIndex(file); + }, + + onReadUseDownloadDir() { + this.readDownloadDirPref(); + var downloadFolder = document.getElementById("downloadFolder"); + var chooseFolder = document.getElementById("chooseFolder"); + var preference = Preferences.get("browser.download.useDownloadDir"); + var dirPreference = Preferences.get("browser.download.dir"); + downloadFolder.disabled = !preference.value || dirPreference.locked; + chooseFolder.disabled = !preference.value || dirPreference.locked; + return undefined; + }, + + async _fileToIndex(aFile) { + if (!aFile || aFile.equals(await this._getDownloadsFolder("Desktop"))) { + return 0; + } else if (aFile.equals(await this._getDownloadsFolder("Downloads"))) { + return 1; + } + return 2; + }, + + async _indexToFile(aIndex) { + switch (aIndex) { + case 0: + return this._getDownloadsFolder("Desktop"); + case 1: + return this._getDownloadsFolder("Downloads"); + } + var customDirPref = Preferences.get("browser.download.dir"); + return customDirPref.value; + }, + + async _getDownloadsFolder(aFolder) { + switch (aFolder) { + case "Desktop": + return Services.dirsvc.get("Desk", Ci.nsIFile); + case "Downloads": + let downloadsDir = await Downloads.getSystemDownloadsDirectory(); + return new FileUtils.File(downloadsDir); + } + throw new Error( + "ASSERTION FAILED: folder type should be 'Desktop' or 'Downloads'" + ); + }, + + async readDownloadDirPref() { + var folderListPref = Preferences.get("browser.download.folderList"); + var bundlePreferences = document.getElementById("bundlePreferences"); + var downloadFolder = document.getElementById("downloadFolder"); + + var customDirPref = Preferences.get("browser.download.dir"); + var customIndex = customDirPref.value + ? await this._fileToIndex(customDirPref.value) + : 0; + if (customIndex == 0) { + downloadFolder.value = bundlePreferences.getString("desktopFolderName"); + } else if (customIndex == 1) { + downloadFolder.value = bundlePreferences.getString( + "myDownloadsFolderName" + ); + } else { + downloadFolder.value = customDirPref.value + ? customDirPref.value.path + : ""; + } + + var currentDirPref = Preferences.get("browser.download.downloadDir"); + var downloadDir = + currentDirPref.value || (await this._indexToFile(folderListPref.value)); + if (downloadDir) { + let urlSpec = Services.io + .getProtocolHandler("file") + .QueryInterface(Ci.nsIFileProtocolHandler) + .getURLSpecFromDir(downloadDir); + + downloadFolder.style.backgroundImage = + "url(moz-icon://" + urlSpec + "?size=16)"; + } + + return undefined; + }, +}; + +Preferences.get("browser.download.dir").on( + "change", + gDownloadDirSection.readDownloadDirPref.bind(gDownloadDirSection) +); |