Bug 780379 - Add buttons to download prompts. r=mfinkle
This commit is contained in:
@@ -34,6 +34,7 @@ HelperAppLauncherDialog.prototype = {
|
|||||||
// Add a fake intent for save to disk at the top of the list
|
// Add a fake intent for save to disk at the top of the list
|
||||||
apps.unshift({
|
apps.unshift({
|
||||||
name: bundle.GetStringFromName("helperapps.saveToDisk"),
|
name: bundle.GetStringFromName("helperapps.saveToDisk"),
|
||||||
|
packageName: "org.mozilla.gecko.Download",
|
||||||
iconUri: "drawable://icon",
|
iconUri: "drawable://icon",
|
||||||
launch: function() {
|
launch: function() {
|
||||||
// Reset the preferredAction here
|
// Reset the preferredAction here
|
||||||
@@ -43,23 +44,82 @@ HelperAppLauncherDialog.prototype = {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
let app = apps[0];
|
// See if the user already marked something as the default for this mimetype,
|
||||||
if (apps.length > 1) {
|
// and if that app is still installed.
|
||||||
app = HelperApps.prompt(apps, {
|
let preferredApp = this._getPreferredApp(aLauncher);
|
||||||
title: bundle.GetStringFromName("helperapps.pick")
|
if (preferredApp) {
|
||||||
|
let pref = apps.filter(function(app) {
|
||||||
|
return app.packageName === preferredApp;
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
if (app) {
|
if (pref.length > 0) {
|
||||||
aLauncher.MIMEInfo.preferredAction = Ci.nsIMIMEInfo.useHelperApp;
|
pref[0].launch(aLauncher.source);
|
||||||
if (!app.launch(aLauncher.source)) {
|
return;
|
||||||
aLauncher.cancel();
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
// Something weird happened. Log an error
|
|
||||||
Services.console.logStringMessage("Unexpected selection from grid: " + app);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let callback = function(app) {
|
||||||
|
aLauncher.MIMEInfo.preferredAction = Ci.nsIMIMEInfo.useHelperApp;
|
||||||
|
app.launch(aLauncher.source);
|
||||||
|
if (!app.launch(aLauncher.source)) {
|
||||||
|
aLauncher.cancel(Cr.NS_BINDING_ABORTED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (apps.length > 1) {
|
||||||
|
HelperApps.prompt(apps, {
|
||||||
|
title: bundle.GetStringFromName("helperapps.pick"),
|
||||||
|
buttons: [
|
||||||
|
bundle.GetStringFromName("helperapps.alwaysUse"),
|
||||||
|
bundle.GetStringFromName("helperapps.useJustOnce")
|
||||||
|
]
|
||||||
|
}, (data) => {
|
||||||
|
if (data.button < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
callback(apps[data.icongrid0]);
|
||||||
|
|
||||||
|
if (data.button == 0)
|
||||||
|
this._setPreferredApp(aLauncher, apps[data.icongrid0]);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
callback(apps[0]);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_getPrefName: function getPrefName(mimetype) {
|
||||||
|
return "browser.download.preferred." + mimetype.replace("\\", ".");
|
||||||
|
},
|
||||||
|
|
||||||
|
_getMimeTypeFromLauncher: function getMimeTypeFromLauncher(launcher) {
|
||||||
|
let mime = launcher.MIMEInfo.MIMEType;
|
||||||
|
if (!mime)
|
||||||
|
mime = ContentAreaUtils.getMIMETypeForURI(launcher.source) || "";
|
||||||
|
return mime;
|
||||||
|
},
|
||||||
|
|
||||||
|
_getPreferredApp: function getPreferredApp(launcher) {
|
||||||
|
let mime = this._getMimeTypeFromLauncher(launcher);
|
||||||
|
if (!mime)
|
||||||
|
return;
|
||||||
|
|
||||||
|
try {
|
||||||
|
return Services.prefs.getCharPref(this._getPrefName(mime));
|
||||||
|
} catch(ex) {
|
||||||
|
Services.console.logStringMessage("Error getting pref for " + mime + " " + ex);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
},
|
||||||
|
|
||||||
|
_setPreferredApp: function setPreferredApp(launcher, app) {
|
||||||
|
let mime = this._getMimeTypeFromLauncher(launcher);
|
||||||
|
if (!mime)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (app)
|
||||||
|
Services.prefs.setCharPref(this._getPrefName(mime), app.packageName);
|
||||||
|
else
|
||||||
|
Services.prefs.clearUserPref(this._getPrefName(mime));
|
||||||
},
|
},
|
||||||
|
|
||||||
promptForSaveToFile: function hald_promptForSaveToFile(aLauncher, aContext, aDefaultFile, aSuggestedFileExt, aForcePrompt) {
|
promptForSaveToFile: function hald_promptForSaveToFile(aLauncher, aContext, aDefaultFile, aSuggestedFileExt, aForcePrompt) {
|
||||||
|
|||||||
@@ -265,6 +265,8 @@ helperapps.always=Always
|
|||||||
helperapps.never=Never
|
helperapps.never=Never
|
||||||
helperapps.pick=Complete action using
|
helperapps.pick=Complete action using
|
||||||
helperapps.saveToDisk=Download
|
helperapps.saveToDisk=Download
|
||||||
|
helperapps.alwaysUse=Always
|
||||||
|
helperapps.useJustOnce=Just once
|
||||||
|
|
||||||
#Lightweight themes
|
#Lightweight themes
|
||||||
# LOCALIZATION NOTE (lwthemeInstallRequest.message): %S will be replaced with
|
# LOCALIZATION NOTE (lwthemeInstallRequest.message): %S will be replaced with
|
||||||
|
|||||||
Reference in New Issue
Block a user