183 lines
6.3 KiB
JavaScript
183 lines
6.3 KiB
JavaScript
/* -*- Mode: Java; tab-width: 2; c-basic-offset: 2; -*-
|
|
*
|
|
* The contents of this file are subject to the Netscape Public License
|
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
|
* http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
|
* for the specific language governing rights and limitations under the
|
|
* NPL.
|
|
*
|
|
* The Initial Developer of this code under the NPL is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
|
* Reserved.
|
|
*
|
|
* Contributor(s):
|
|
*/
|
|
|
|
var gDescriptionField = null;
|
|
var gExtensionField = null;
|
|
var gMIMEField = null;
|
|
var gAppPath = null;
|
|
|
|
var gPrefApplicationsBundle = null;
|
|
|
|
function Startup()
|
|
{
|
|
doSetOKCancel(onOK);
|
|
|
|
gDescriptionField = document.getElementById("description");
|
|
gExtensionField = document.getElementById("extensions");
|
|
gMIMEField = document.getElementById("mimeType");
|
|
gAppPath = document.getElementById("appPath");
|
|
|
|
gPrefApplicationsBundle = document.getElementById("bundle_prefApplications");
|
|
|
|
// If an arg was passed, then it's an nsIHelperAppLauncherDialog
|
|
if ( "arguments" in window && window.arguments[0] ) {
|
|
// Get mime info.
|
|
var info = window.arguments[0].mLauncher.MIMEInfo;
|
|
|
|
// Fill the fields we can from this.
|
|
gDescriptionField.value = info.Description;
|
|
gExtensionField.value = info.primaryExtension;
|
|
gMIMEField.value = info.MIMEType;
|
|
// an app may have been selected in the opening dialog but not in the mimeinfo
|
|
var app = info.preferredApplicationHandler || window.arguments[0].chosenApp;
|
|
if ( app ) {
|
|
gAppPath.value = app.path;
|
|
}
|
|
|
|
// Don't let user change mime type.
|
|
gMIMEField.setAttribute( "readonly", "true" );
|
|
|
|
// Start user in app field.
|
|
gAppPath.focus();
|
|
} else {
|
|
gDescriptionField.focus();
|
|
}
|
|
sizeToContent();
|
|
moveToAlertPosition();
|
|
}
|
|
|
|
function chooseApp()
|
|
{
|
|
const nsIFilePicker = Components.interfaces.nsIFilePicker;
|
|
var filePicker = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
|
|
if (filePicker) {
|
|
const FP = Components.interfaces.nsIFilePicker
|
|
var windowTitle = gPrefApplicationsBundle.getString("chooseHandler");
|
|
var programsFilter = gPrefApplicationsBundle.getString("programsFilter");
|
|
filePicker.init(window, windowTitle, FP.modeOpen);
|
|
if (navigator.platform == "Win32")
|
|
filePicker.appendFilter(programsFilter, "*.exe; *.com");
|
|
else
|
|
filePicker.appendFilters(FP.filterAll);
|
|
var filePicked = filePicker.show();
|
|
if (filePicked == nsIFilePicker.returnOK && filePicker.file) {
|
|
var file = filePicker.file.QueryInterface(Components.interfaces.nsILocalFile);
|
|
gAppPath.value = file.path;
|
|
gAppPath.select();
|
|
}
|
|
}
|
|
}
|
|
|
|
var gDS = null;
|
|
function onOK()
|
|
{
|
|
// Make sure all fields are filled in OK.
|
|
if ( !checkInput() ) {
|
|
return false;
|
|
}
|
|
|
|
const mimeTypes = "UMimTyp";
|
|
var fileLocator = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties);
|
|
|
|
var file = fileLocator.get(mimeTypes, Components.interfaces.nsIFile);
|
|
|
|
var ioService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
|
|
var fileHandler = ioService.getProtocolHandler("file").QueryInterface(Components.interfaces.nsIFileProtocolHandler);
|
|
|
|
gDS = gRDF.GetDataSource(fileHandler.getURLSpecFromFile(file));
|
|
|
|
gMIMEField.value = gMIMEField.value.toLowerCase();
|
|
|
|
// figure out if this mime type already exists.
|
|
var exists = mimeHandlerExists(gMIMEField.value);
|
|
if (exists) {
|
|
var titleMsg = gPrefApplicationsBundle.getString("handlerExistsTitle");
|
|
var dialogMsg = gPrefApplicationsBundle.getString("handlerExists");
|
|
dialogMsg = dialogMsg.replace(/%mime%/g, gMIMEField.value);
|
|
var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
|
|
var replace = promptService.confirm(window, titleMsg, dialogMsg);
|
|
if (!replace)
|
|
{
|
|
window.close();
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
// 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, "").toLowerCase();
|
|
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;
|
|
file = Components.classes["@mozilla.org/file/local;1"].createInstance();
|
|
if (file)
|
|
file = file.QueryInterface(Components.interfaces.nsILocalFile);
|
|
if (file) {
|
|
try {
|
|
file.initWithPath(gAppPath.value);
|
|
handlerInfo.appDisplayName = file.leafName;
|
|
}
|
|
catch(e) {
|
|
handlerInfo.appDisplayName = gAppPath.value;
|
|
}
|
|
}
|
|
// do the rest of the work (ugly yes, but it works)
|
|
handlerInfo.buildLinks();
|
|
|
|
// flush the ds to disk.
|
|
var remoteDS = gDS.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource);
|
|
if (remoteDS)
|
|
remoteDS.Flush();
|
|
|
|
// If an arg was passed, then it's an nsIHelperAppLauncherDialog
|
|
// and we need to update its MIMEInfo.
|
|
if ( "arguments" in window && window.arguments[0] ) {
|
|
// Get mime info.
|
|
var info = window.arguments[0].mLauncher.MIMEInfo;
|
|
|
|
// Update fields that might have changed.
|
|
info.preferredAction = Components.interfaces.nsIMIMEInfo.useHelperApp;
|
|
info.Description = gDescriptionField.value;
|
|
info.preferredApplicationHandler = file;
|
|
info.applicationDescription = handlerInfo.appDisplayName;
|
|
|
|
// Tell the nsIHelperAppLauncherDialog to update to the changes
|
|
window.arguments[0].updateSelf = true;
|
|
}
|
|
|
|
window.opener.gNewTypeRV = gMIMEField.value;
|
|
window.close();
|
|
}
|
|
|