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:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user