bug 284089 - ask every time pref is ignored, Anbo Motohiko <amotohiko_mozillafirebird@yahoo.co.jp>, r=me, a=bsmedberg

git-svn-id: svn://10.0.0.236/trunk@175422 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
mconnor%steelgryphon.com
2005-06-30 21:30:49 +00:00
parent 579f24fd9d
commit 60bb07a6db
2 changed files with 99 additions and 91 deletions

View File

@@ -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;

View File

@@ -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);