Partial fix for Open / Show Folder being broken for files downloaded in previous invocations of Firefox (bug 239948); r=ben

git-svn-id: svn://10.0.0.236/trunk@164411 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
dmose%mozilla.org
2004-10-26 06:44:21 +00:00
parent ed931811f7
commit 677f4c0498

View File

@@ -248,8 +248,8 @@ function onDownloadCancel(aEvent)
// employed by the helper app service isn't fully accessible yet... should be fixed...
// talk to bz...)
// the upshot is we have to delete the file if it exists.
var f = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
f.initWithPath(aEvent.target.id);
var f = getLocalFileFromNativePathOrUrl(aEvent.target.id);
if (f.exists())
f.remove(false);
@@ -280,15 +280,15 @@ function onDownloadRemove(aEvent)
function onDownloadShow(aEvent)
{
var f = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
f.initWithPath(aEvent.target.id);
var f = getLocalFileFromNativePathOrUrl(aEvent.target.id);
if (f.exists()) {
try {
f.reveal();
} catch (ex) {
// if reveal failed for some reason (eg on unix it's not currently
// implemented), open a browser window rooted at the parent
// implemented), send the file: URL window rooted at the parent to
// the OS handler for that protocol
var parent = f.parent;
if (parent) {
openExternal(parent.path);
@@ -316,9 +316,7 @@ function onDownloadOpen(aEvent)
var download = aEvent.target;
if (download.localName == "download") {
if (download.openable) {
var f = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
f.initWithPath(aEvent.target.id);
var f = getLocalFileFromNativePathOrUrl(aEvent.target.id);
if (f.exists()) {
if (f.isExecutable()) {
var dontAsk = false;
@@ -398,8 +396,7 @@ function onDownloadRetry(aEvent)
var download = aEvent.target;
if (download.localName == "download") {
var src = getRDFProperty(download.id, "URL");
var f = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
f.initWithPath(aEvent.target.id);
var f = getLocalFileFromNativePathOrUrl(aEvent.target.id);
saveURL(src, f, null, true, true);
}
@@ -814,9 +811,7 @@ var gDownloadPrefObserver = {
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"));
var dir = getLocalFileFromNativePathOrUrl(folderName.getAttribute("path"));
if (!dir.exists())
dir.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0755);
@@ -842,3 +837,30 @@ function openExternal(aPath)
return;
}
// we should be using real URLs all the time, but until
// bug 239948 is fully fixed, this will do...
function getLocalFileFromNativePathOrUrl(aPathOrUrl)
{
if (aPathOrUrl.substring(0,7) == "file://") {
// if this is a URL, get the file from that
ioSvc = Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService);
// XXX it's possible that using a null char-set here is bad
const fileUrl = ioSvc.newURI(aPathOrUrl, null, null).
QueryInterface(Components.interfaces.nsIFileURL);
return fileUrl.file.clone().
QueryInterface(Components.interfaces.nsILocalFile);
} else {
// if it's a pathname, create the nsILocalFile directly
f = Components.classes["@mozilla.org/file/local;1"].
createInstance(Components.interfaces.nsILocalFile);
f.initWithPath(aPathOrUrl);
return f;
}
}