From 60bb07a6db7fb13a8a471dabe74ebb48ae1c5657 Mon Sep 17 00:00:00 2001 From: "mconnor%steelgryphon.com" Date: Thu, 30 Jun 2005 21:30:49 +0000 Subject: [PATCH] bug 284089 - ask every time pref is ignored, Anbo Motohiko , r=me, a=bsmedberg git-svn-id: svn://10.0.0.236/trunk@175422 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/toolkit/content/contentAreaUtils.js | 89 +++++++++------ .../downloads/src/nsHelperAppDlg.js.in | 101 ++++++++---------- 2 files changed, 99 insertions(+), 91 deletions(-) diff --git a/mozilla/toolkit/content/contentAreaUtils.js b/mozilla/toolkit/content/contentAreaUtils.js index e9f6d9605f4..bbc11199364 100644 --- a/mozilla/toolkit/content/contentAreaUtils.js +++ b/mozilla/toolkit/content/contentAreaUtils.js @@ -526,12 +526,58 @@ function getTargetFile(aFpP, aSkipPrompt) // to place every download - this will force the prompt to ask the user // where to put saved files. var dir = null; - try { - dir = prefs.getComplexValue("defaultFolder", nsILocalFile); + var useDownloadDir = prefs.getBoolPref("useDownloadDir"); + + function getSpecialFolderKey(aFolderType) + { + if (aFolderType == "Desktop") + return "Desk"; + + if (aFolderType != "Downloads") + throw "ASSERTION FAILED: folder type should be 'Desktop' or 'Downloads'"; + +#ifdef XP_WIN + return "Pers"; +#else +#ifdef XP_MACOSX + return "UsrDocs"; +#else + return "Home"; +#endif +#endif } - catch (e) { } - - if (!aSkipPrompt || !dir) { + + function getDownloadsFolder(aFolder) + { + var fileLocator = Components.classes["@mozilla.org/file/directory_service;1"] + .getService(Components.interfaces.nsIProperties); + + var dir = fileLocator.get(getSpecialFolderKey(aFolder), Components.interfaces.nsILocalFile); + + var bundle = Components.classes["@mozilla.org/intl/stringbundle;1"] + .getService(Components.interfaces.nsIStringBundleService); + bundle = bundle.createBundle("chrome://mozapps/locale/downloads/unknownContentType.properties"); + + var description = bundle.GetStringFromName("myDownloads"); + if (aFolder != "Desktop") + dir.append(description); + + return dir; + } + + switch (prefs.getIntPref("folderList")) { + case 0: + dir = getDownloadsFolder("Desktop") + break; + case 1: + dir = getDownloadsFolder("Downloads"); + break; + case 2: + dir = prefs.getComplexValue("dir", nsILocalFile); + break; + } + + if (!aSkipPrompt || !useDownloadDir || !dir) { // If we're asking the user where to save the file, root the Save As... // dialog on they place they last picked. try { @@ -539,26 +585,10 @@ function getTargetFile(aFpP, aSkipPrompt) } catch (e) { // No default download location. Default to desktop. - var fileLocator = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties); - - function getDesktopKey() - { -#ifdef XP_WIN - return "DeskP"; -#endif -#ifdef XP_MACOSX - return "UsrDsk"; -#endif -#ifdef XP_OS2 - return "Desk"; -#endif -#ifdef XP_BEOS - return "Desk"; -#endif - return "Home"; - } + var fileLocator = Components.classes["@mozilla.org/file/directory_service;1"] + .getService(Components.interfaces.nsIProperties); - dir = fileLocator.get(getDesktopKey(), Components.interfaces.nsILocalFile); + dir = fileLocator.get(getSpecialFolderKey("Desktop"), nsILocalFile); } var fp = makeFilePicker(); @@ -590,13 +620,6 @@ function getTargetFile(aFpP, aSkipPrompt) if (fp.show() == Components.interfaces.nsIFilePicker.returnCancel || !fp.file) return false; - - var useDownloadDir = false; - try { - useDownloadDir = prefs.getBoolPref("useDownloadDir"); - } - catch(ex) { - } var directory = fp.file.parent.QueryInterface(nsILocalFile); prefs.setComplexValue("lastDir", nsILocalFile, directory); @@ -610,10 +633,6 @@ function getTargetFile(aFpP, aSkipPrompt) prefs.setIntPref("save_converter_index", aFpP.saveAsType); } else { - // ben 07/31/2003: - // We don't nullcheck dir here because dir should never be null if we get here - // unless something is badly wrong, and if it is, I want to know about it in - // bugs. dir.append(getNormalizedLeafName(aFpP.fileInfo.fileName, aFpP.fileInfo.fileExt)); var file = dir; diff --git a/mozilla/toolkit/mozapps/downloads/src/nsHelperAppDlg.js.in b/mozilla/toolkit/mozapps/downloads/src/nsHelperAppDlg.js.in index a9560ce23c4..b4e1f270c40 100644 --- a/mozilla/toolkit/mozapps/downloads/src/nsHelperAppDlg.js.in +++ b/mozilla/toolkit/mozapps/downloads/src/nsHelperAppDlg.js.in @@ -127,72 +127,58 @@ nsUnknownContentTypeDialog.prototype = { // If the user is always downloading to the same location, the default download // folder is stored in preferences. If a value is found stored, use that // automatically and don't ask via a dialog. - const kDownloadFolderPref = "browser.download.defaultFolder"; var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); - try { - result = prefs.getComplexValue(kDownloadFolderPref, Components.interfaces.nsILocalFile); - result = this.validateLeafName(result, aDefaultFile, aSuggestedFileExtension); - } - catch (e) { - // If we get here, it's because we have a new profile and the user has never configured download - // options, so "browser.download.defaultFolder" is not set yet. If the default is autodownload, - // we need to discover the default save location. - var autodownload = prefs.getBoolPref("browser.download.useDownloadDir"); - if (autodownload) { - function getSpecialFolderKey(aFolderType) - { - if (aFolderType == "Desktop") - return "Desk"; + var autodownload = prefs.getBoolPref("browser.download.useDownloadDir"); + if (autodownload) { + function getSpecialFolderKey(aFolderType) + { + if (aFolderType == "Desktop") + return "Desk"; - if (aFolderType != "Downloads") - throw "ASSERTION FAILED: folder type should be 'Desktop' or 'Downloads'"; + if (aFolderType != "Downloads") + throw "ASSERTION FAILED: folder type should be 'Desktop' or 'Downloads'"; #ifdef XP_WIN - return "Pers"; + return "Pers"; #else #ifdef XP_MACOSX - return "UsrDocs"; + return "UsrDocs"; #else - return "Home"; + return "Home"; #endif #endif - } - - function getDownloadsFolder(aFolder) - { - var fileLocator = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties); - - var dir = fileLocator.get(getSpecialFolderKey(aFolder), Components.interfaces.nsILocalFile); - - var bundle = Components.classes["@mozilla.org/intl/stringbundle;1"].getService(Components.interfaces.nsIStringBundleService); - bundle = bundle.createBundle("chrome://mozapps/locale/downloads/unknownContentType.properties"); - - var description = bundle.GetStringFromName("myDownloads"); - if (aFolder != "Desktop") - dir.append(description); - - return dir; - } - - var defaultFolder = null; - switch (prefs.getIntPref("browser.download.folderList")) { - case 0: - defaultFolder = getDownloadsFolder("Desktop") - break; - case 1: - defaultFolder = getDownloadsFolder("Downloads"); - break; - case 2: - defaultFolder = prefs.getComplexValue("browser.download.dir", Components.interfaces.nsILocalFile); - break; - } - - // While we're here, set the pref too so that we don't keep coming back into this less efficient - // code block. - prefs.setComplexValue("browser.download.defaultFolder", Components.interfaces.nsILocalFile, defaultFolder); - - result = this.validateLeafName(defaultFolder, aDefaultFile, aSuggestedFileExtension); } + + function getDownloadsFolder(aFolder) + { + var fileLocator = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties); + + var dir = fileLocator.get(getSpecialFolderKey(aFolder), Components.interfaces.nsILocalFile); + + var bundle = Components.classes["@mozilla.org/intl/stringbundle;1"].getService(Components.interfaces.nsIStringBundleService); + bundle = bundle.createBundle("chrome://mozapps/locale/downloads/unknownContentType.properties"); + + var description = bundle.GetStringFromName("myDownloads"); + if (aFolder != "Desktop") + dir.append(description); + + return dir; + } + + var defaultFolder = null; + switch (prefs.getIntPref("browser.download.folderList")) { + case 0: + defaultFolder = getDownloadsFolder("Desktop"); + break; + case 1: + defaultFolder = getDownloadsFolder("Downloads"); + break; + case 2: + defaultFolder = prefs.getComplexValue("browser.download.dir", Components.interfaces.nsILocalFile); + break; + } + + result = this.validateLeafName(defaultFolder, aDefaultFile, aSuggestedFileExtension); } if (!result) { @@ -259,6 +245,9 @@ nsUnknownContentTypeDialog.prototype = { validateLeafName: function (aLocalFile, aLeafName, aFileExt) { + if (!aLocalFile) + return null; + if (aLeafName == "") aLeafName = "unnamed" + (aFileExt ? "." + aFileExt : ""); aLocalFile.append(aLeafName);