246618 - show default download folder in downloads window when in autodownload mode

This commit is contained in:
ben%bengoodger.com 2004-06-23 00:14:59 +00:00
Родитель 196db75dc6
Коммит fef2215d99
6 изменённых файлов: 147 добавлений и 18 удалений

Просмотреть файл

@ -333,7 +333,6 @@ function onDownloadOpen(aEvent)
f.initWithPath(aEvent.target.id);
if (f.exists()) {
// XXXben security check!
if (f.isExecutable()) {
var dontAsk = false;
var pref = Components.classes["@mozilla.org/preferences-service;1"]
@ -493,6 +492,12 @@ function Startup()
gDownloadsView.addEventListener("download-properties", onDownloadProperties, false);
gDownloadsView.addEventListener("dblclick", onDownloadOpen, false);
// Set up AutoDownload display area
initAutoDownloadDisplay();
var pbi = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranchInternal);
pbi.addObserver("browser.download.", gDownloadPrefObserver, false);
// Handlers for events generated by the Download Manager (download events)
var observerService = Components.classes[kObserverServiceProgID]
.getService(Components.interfaces.nsIObserverService);
@ -533,6 +538,10 @@ function Shutdown()
// Assert the current progress for all the downloads in case the window is reopened
gDownloadManager.saveState();
var pbi = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranchInternal);
pbi.removeObserver("browser.download.", gDownloadPrefObserver);
var observerService = Components.classes[kObserverServiceProgID]
.getService(Components.interfaces.nsIObserverService);
observerService.removeObserver(gDownloadObserver, "dl-done");
@ -716,3 +725,106 @@ function onDownloadShowInfo()
fireEventForElement(gDownloadsView.selected, "properties");
}
function initAutoDownloadDisplay()
{
var pref = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch);
var autodownload = pref.getBoolPref("browser.download.useDownloadDir");
if (autodownload) {
var autodownloadInfo = document.getElementById("autodownloadInfo");
autodownloadInfo.hidden = false;
var autodownloadSpring = document.getElementById("autodownloadSpring");
autodownloadSpring.hidden = true;
function getSpecialFolderKey(aFolderType)
{
#ifdef XP_WIN
return aFolderType == "Desktop" ? "DeskV" : "Pers";
#else
#ifdef XP_MACOSX
return aFolderType == "Desktop" ? "UsrDsk" : "UsrDocs";
#else
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 displayName = null;
switch (pref.getIntPref("browser.download.folderList")) {
case 0:
folder = getDownloadsFolder("Desktop");
var strings = document.getElementById("downloadStrings");
displayName = strings.getString("displayNameDesktop");
break;
case 1:
folder = getDownloadsFolder("Downloads");
break;
case 2:
folder = pref.getComplexValue("browser.download.dir", Components.interfaces.nsILocalFile);
break;
}
if (folder) {
var ioServ = Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService);
var fph = ioServ.getProtocolHandler("file").QueryInterface(Components.interfaces.nsIFileProtocolHandler);
var mozIconURI = "moz-icon://" + fph.getURLSpecFromFile(folder) + "?size=16";
var folderIcon = document.getElementById("saveToFolder")
folderIcon.image = mozIconURI;
var folderName = document.getElementById("saveToFolder");
folderName.label = displayName || folder.leafName;
folderName.setAttribute("path", folder.path);
}
}
else {
var autodownloadInfo = document.getElementById("autodownloadInfo");
autodownloadInfo.hidden = true;
var autodownloadSpring = document.getElementById("autodownloadSpring");
autodownloadSpring.hidden = false;
}
}
var gDownloadPrefObserver = {
observe: function (aSubject, aTopic, aData)
{
if (aTopic == "nsPref:changed") {
switch(aData) {
case "browser.download.folderList":
case "browser.download.useDownloadDir":
case "browser.download.dir":
initAutoDownloadDisplay();
}
}
}
};
function onDownloadShowFolder()
{
var folderName = document.getElementById("saveToFolder");
var dir = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
dir.initWithPath(folderName.getAttribute("path"));
if (!dir.exists())
dir.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0755);
dir.reveal();
}

Просмотреть файл

@ -160,19 +160,17 @@
<hbox>
<hbox id="commandBar" flex="1">
<hbox align="center" flex="1" id="autodownloadInfo">
<label>&filesSavedTo.label;</label>
<toolbarbutton id="saveToFolder" crop="right" flex="1"
oncommand="onDownloadShowFolder();"
tooltiptext="&showFolder.label;"/>
</hbox>
<spring id="autodownloadSpring" hidden="true" flex="1"/>
<separator id="commandBarSeparator"/>
<button id="cleanUpButton"
label="&cmd.cleanUp.label;" accesskey="&cmd.cleanUp.accesskey;" tooltiptext="&cmd.cleanUp.tooltip;"
command="cmd_cleanUp"/>
<separator id="commandBarSeparator"/>
#ifdef XP_WIN
<button id="optionsButton"
label="&cmd.options.label;" accesskey="&cmd.options.accesskey;"
oncommand="onDownloadShowOptions();"/>
#else
<button id="optionsButton"
label="&cmd.optionsUnix.label;" accesskey="&cmd.optionsUnix.accesskey;"
oncommand="onDownloadShowOptions();"/>
#endif
</hbox>
<resizer id="windowResizer" dir="bottomright"/>

Просмотреть файл

@ -32,11 +32,14 @@
<!ENTITY cmd.cleanUp.tooltip "Removes completed, canceled or failed downloads from the list">
<!ENTITY cmd.cleanUp.accesskey "a">
<!ENTITY cmd.options.label "Options">
<!ENTITY cmd.options.accesskey "O">
<!ENTITY cmd.optionsUnix.label "Preferences">
<!ENTITY cmd.optionsUnix.accesskey "n">
<!ENTITY cmd.change.label "Change...">
<!ENTITY cmd.change.accesskey "C">
<!ENTITY cmd.change.tooltip "Change how and where to save files to">
<!ENTITY closeWhenDone.label "Close when downloads complete">
<!ENTITY closeWhenDone.tooltip "Closes the Downloads window when all files are done downloading">
<!ENTITY filesSavedTo.label "All files downloaded to:">
<!ENTITY showFolder.label "Show this Folder">

Просмотреть файл

@ -42,3 +42,4 @@ fileExecutableSecurityWarning="%S" is an executable file. Executable files may c
fileExecutableSecurityWarningTitle=Open Executable File?
fileExecutableSecurityWarningDontAsk=Don't ask me this again
displayNameDesktop=Desktop

Просмотреть файл

@ -136,9 +136,6 @@ nsUnknownContentTypeDialog.prototype = {
// we need to discover the default save location.
var autodownload = prefs.getBoolPref("browser.download.useDownloadDir");
if (autodownload) {
// XXXben we should really have a way of using XULPP on JS component files.
// This code is very similar to that in pref-downloads.js, except the platform
// checks are done at runtime. ugh.
function getSpecialFolderKey(aFolderType)
{
#ifdef XP_WIN

Просмотреть файл

@ -98,3 +98,21 @@ download[state="5"], download[state="6"] {
border: 1px dotted black;
}
#folderIcon {
width: 16px;
height: 16px;
}
#folderName {
width: 0px;
}
#saveToFolder {
padding: 0px 6px 3px 5px;
}
#saveToFolder .toolbarbutton-text {
text-align: left;
margin-left: 5px !important;
}