mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-07 04:05:49 +00:00
116 lines
3.9 KiB
JavaScript
116 lines
3.9 KiB
JavaScript
var gDescriptionField = null;
|
|
var gExtensionField = null;
|
|
var gMIMEField = null;
|
|
var gAppPath = null;
|
|
var gOutgoingMIME = null;
|
|
|
|
var gBundle = null;
|
|
|
|
function Startup()
|
|
{
|
|
doSetOKCancel(onOK);
|
|
|
|
gDescriptionField = document.getElementById("description");
|
|
gExtensionField = document.getElementById("extensions");
|
|
gMIMEField = document.getElementById("mimeType");
|
|
gAppPath = document.getElementById("appPath");
|
|
gOutgoingMime = document.getElementById("outgoingDefault");
|
|
|
|
gBundle = srGetStrBundle("chrome://communicator/locale/pref/pref-applications.properties");
|
|
|
|
gDescriptionField.focus();
|
|
}
|
|
|
|
function chooseApp()
|
|
{
|
|
var filePicker = Components.classes["component://mozilla/filepicker"].createInstance();
|
|
if (filePicker)
|
|
filePicker = filePicker.QueryInterface(Components.interfaces.nsIFilePicker);
|
|
if (filePicker) {
|
|
const FP = Components.interfaces.nsIFilePicker
|
|
var windowTitle = gBundle.GetStringFromName("chooseHandler");
|
|
var programsFilter = gBundle.GetStringFromName("programsFilter");
|
|
filePicker.init(window, windowTitle, FP.modeOpen);
|
|
if (navigator.platform == "Windows")
|
|
filePicker.appendFilter(programsFilter, "*.exe; *.com");
|
|
else
|
|
filePicker.appendFilters(FP.filterAll);
|
|
filePicker.show();
|
|
var file = filePicker.file.QueryInterface(Components.interfaces.nsILocalFile);
|
|
gAppPath.value = file.path;
|
|
gAppPath.select();
|
|
}
|
|
}
|
|
|
|
var gDS = null;
|
|
function onOK()
|
|
{
|
|
const mimeTypes = 66638;
|
|
var fileLocator = Components.classes["component://netscape/filelocator"].getService();
|
|
if (fileLocator)
|
|
fileLocator = fileLocator.QueryInterface(Components.interfaces.nsIFileLocator);
|
|
var file = fileLocator.GetFileLocation(mimeTypes);
|
|
if (file)
|
|
file = file.QueryInterface(Components.interfaces.nsIFileSpec);
|
|
gDS = gRDF.GetDataSource(file.URLString);
|
|
if (gDS)
|
|
gDS = gDS.QueryInterface(Components.interfaces.nsIRDFDataSource);
|
|
|
|
// figure out if this mime type already exists.
|
|
var exists = mimeHandlerExists(gMIMEField.value);
|
|
if (exists) {
|
|
var titleMsg = gBundle.GetStringFromName("handlerExistsTitle");
|
|
var dialogMsg = gBundle.GetStringFromName("handlerExists");
|
|
dialogMsg = dialogMsg.replace(/%mime%/g, gMIMEField.value);
|
|
var commonDialogService = nsJSComponentManager.getService("component://netscape/appshell/commonDialogs",
|
|
"nsICommonDialogs");
|
|
var replace = commonDialogService.Confirm(window, titleMsg, dialogMsg);
|
|
if (!replace)
|
|
window.close();
|
|
}
|
|
|
|
|
|
// now save the information
|
|
var handlerInfo = new HandlerOverride(MIME_URI(gMIMEField.value));
|
|
handlerInfo.mUpdateMode = exists; // XXX Somewhat sleazy, I know...
|
|
handlerInfo.mimeType = gMIMEField.value;
|
|
handlerInfo.description = gDescriptionField.value;
|
|
|
|
var extensionString = gExtensionField.value.replace(/[*.;]/g, "");
|
|
var extensions = extensionString.split(" ");
|
|
for (var i = 0; i < extensions.length; i++) {
|
|
var currExtension = extensions[i];
|
|
handlerInfo.addExtension(currExtension);
|
|
}
|
|
handlerInfo.appPath = gAppPath.value;
|
|
|
|
// other info we need to set (not reflected in UI)
|
|
handlerInfo.isEditable = true;
|
|
handlerInfo.saveToDisk = false;
|
|
handlerInfo.handleInternal = false;
|
|
handlerInfo.alwaysAsk = true;
|
|
var file = Components.classes["component://mozilla/file/local"].createInstance();
|
|
if (file)
|
|
file = file.QueryInterface(Components.interfaces.nsILocalFile);
|
|
if (file) {
|
|
try {
|
|
file.initWithPath(gAppPath.value);
|
|
handlerInfo.appDisplayName = file.unicodeLeafName;
|
|
}
|
|
catch(e) {
|
|
handlerInfo.appDisplayName = gAppPath.value;
|
|
}
|
|
}
|
|
// do the rest of the work (ugly yes, but it works)
|
|
handlerInfo.buildLinks();
|
|
|
|
// flush the ds to disk.
|
|
gDS = gDS.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource);
|
|
if (gDS)
|
|
gDS.Flush();
|
|
|
|
window.opener.gNewTypeRV = gMIMEField.value;
|
|
window.close();
|
|
}
|
|
|