зеркало из https://github.com/mozilla/pjs.git
more Application Helper Pref panel stuff (supporting removal of handlers)
This commit is contained in:
Родитель
c99fd7394b
Коммит
64c6c5c0f1
|
@ -346,3 +346,42 @@ function unassertMIMEStuff(aMIMEString, aPropertyString, aValueString)
|
|||
gDS.Unassert(mimeSource, valueProperty, mimeLiteral, true);
|
||||
}
|
||||
|
||||
function removeOverride(aMIMEType)
|
||||
{
|
||||
dump("*** mimeType = " + aMIMEType + "\n");
|
||||
// remove entry from seq
|
||||
var rdfc = Components.classes["component://netscape/rdf/container"].createInstance();
|
||||
if (rdfc) {
|
||||
rdfc = rdfc.QueryInterface(Components.interfaces.nsIRDFContainer);
|
||||
if (rdfc) {
|
||||
var containerRes = gRDF.GetResource("urn:mimetypes:root");
|
||||
rdfc.Init(gDS, containerRes);
|
||||
var element = gRDF.GetResource(MIME_URI(aMIMEType));
|
||||
if (rdfc.IndexOf(element) != -1)
|
||||
rdfc.RemoveElement(element, true);
|
||||
}
|
||||
}
|
||||
|
||||
// remove items from the graph
|
||||
var urns = [ [MIME_URI, ["description", "editable", "value", "smallIcon", "largeIcon"], [HANDLER_URI, "handlerProp"]],
|
||||
[HANDLER_URI, ["handleInternal", "saveToDisk", "alwaysAsk"], [APP_URI, "externalApplication"]],
|
||||
[APP_URI, ["path", "prettyName"]] ];
|
||||
for (var i = 0; i < urns.length; i++) {
|
||||
var mimeRes = gRDF.GetResource(urns[i][0](aMIMEType));
|
||||
dump("*** mimeRes = " + mimeRes + "\n");
|
||||
// unassert the toplevel properties
|
||||
var properties = urns[i][1];
|
||||
for (var j = 0; j < properties.length; j++) {
|
||||
var propertyRes = gRDF.GetResource(NC_RDF(properties[j]), true);
|
||||
dump("*** propertyRes = " + propertyRes + "\n");
|
||||
var mimeValue = gDS.GetTarget(mimeRes, propertyRes, true);
|
||||
dump("*** mimeValue = " + mimeValue + "\n");
|
||||
gDS.Unassert(mimeRes, propertyRes, mimeValue, true);
|
||||
}
|
||||
if (urns[i][2]) {
|
||||
var linkRes = gRDF.GetResource(NC_RDF(urns[i][2][1]), true);
|
||||
var linkTarget = gRDF.GetResource(urns[i][2][0](aMIMEType), true);
|
||||
gDS.Unassert(mimeRes, linkRes, linkTarget);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -133,80 +133,80 @@
|
|||
doEnabling();
|
||||
}
|
||||
|
||||
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.
|
||||
if (gMIMEField.value != gOldMIME) {
|
||||
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();
|
||||
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.
|
||||
if (gMIMEField.value != gOldMIME) {
|
||||
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 = mimeHandlerExists(gMIMEField.value);
|
||||
handlerInfo.mimeType = gMIMEField.value;
|
||||
|
||||
// other info we need to set (not reflected in UI)
|
||||
if (gHandlerGroup.data == "2") {
|
||||
handlerInfo.appPath = gAppPath.value;
|
||||
handlerInfo.setHandlerProcedure("saveToDisk", "false");
|
||||
handlerInfo.setHandlerProcedure("handleInternal", "false");
|
||||
}
|
||||
else if (gHandlerGroup.data == "1")
|
||||
handlerInfo.saveToDisk = true;
|
||||
else
|
||||
handlerInfo.handleInternal = true;
|
||||
|
||||
handlerInfo.alwaysAsk = gAskBeforeOpen.checked;
|
||||
|
||||
// need to make the following dynamic to track changes. otherwise the
|
||||
// app pretty name remains the same.
|
||||
// better still, find a way to XP dynamically discover the pretty name of the app
|
||||
// from the OS.
|
||||
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.gUpdateTypeRV = true;
|
||||
window.close();
|
||||
}
|
||||
}
|
||||
|
||||
// now save the information
|
||||
var handlerInfo = new HandlerOverride(MIME_URI(gMIMEField.value));
|
||||
handlerInfo.mUpdateMode = mimeHandlerExists(gMIMEField.value);
|
||||
handlerInfo.mimeType = gMIMEField.value;
|
||||
|
||||
// other info we need to set (not reflected in UI)
|
||||
if (gHandlerGroup.data == "2") {
|
||||
handlerInfo.appPath = gAppPath.value;
|
||||
handlerInfo.setHandlerProcedure("saveToDisk", "false");
|
||||
handlerInfo.setHandlerProcedure("handleInternal", "false");
|
||||
}
|
||||
else if (gHandlerGroup.data == "1")
|
||||
handlerInfo.saveToDisk = true;
|
||||
else
|
||||
handlerInfo.handleInternal = true;
|
||||
|
||||
handlerInfo.alwaysAsk = gAskBeforeOpen.checked;
|
||||
|
||||
// need to make the following dynamic to track changes. otherwise the
|
||||
// app pretty name remains the same.
|
||||
// better still, find a way to XP dynamically discover the pretty name of the app
|
||||
// from the OS.
|
||||
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.gUpdateTypeRV = true;
|
||||
window.close();
|
||||
}
|
||||
]]>
|
||||
</script>
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
|
||||
var gNewTypeRV = null;
|
||||
var gRemoveTypeRV = null;
|
||||
var gUpdateTypeRV = null;
|
||||
|
||||
function newType()
|
||||
|
@ -16,11 +15,17 @@ function newType()
|
|||
|
||||
function removeType()
|
||||
{
|
||||
// implement me
|
||||
if (gRemoveTypeRV) {
|
||||
//gTree.builder.rebuild();
|
||||
var titleMsg = gBundle.GetStringFromName("removeHandlerTitle");
|
||||
var dialogMsg = gBundle.GetStringFromName("removeHandler");
|
||||
dialogMsg = dialogMsg.replace(/%n/g, "\n");
|
||||
var commonDialogService = nsJSComponentManager.getService("component://netscape/appshell/commonDialogs",
|
||||
"nsICommonDialogs");
|
||||
var remove = commonDialogService.Confirm(window, titleMsg, dialogMsg);
|
||||
if (remove) {
|
||||
var uri = gTree.selectedItems[0].id;
|
||||
var handlerOverride = new HandlerOverride(uri);
|
||||
removeOverride(handlerOverride.mimeType);
|
||||
gTree.setAttribute("ref", "urn:mimetypes");
|
||||
gRemoveTypeRV = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
<script language="JavaScript" src="chrome://communicator/content/pref/pref-applications.js"></script>
|
||||
<script language="JavaScript" src="chrome://communicator/content/pref/overrideHandler.js"></script>
|
||||
<script language="JavaScript" src="chrome://global/content/strres.js"></script>
|
||||
<script language="JavaScript" src="chrome://global/content/nsJSComponentManager.js"></script>
|
||||
|
||||
<box class="box-smallheader" title="&lHeader;"/>
|
||||
|
||||
|
|
|
@ -8,3 +8,6 @@ programsFilter=Programs
|
|||
|
||||
handlerExists=A helper already exists for the MIME type '%mime%'. Do you want to replace it?
|
||||
handlerExistsTitle=Helper Application Exists
|
||||
|
||||
removeHandlerTitle=Remove File Type
|
||||
removeHandler=If you remove a registered type, the helper will no longer be able to automatically handle files of this type. %n%nAre you sure you want to remove this file type?
|
Загрузка…
Ссылка в новой задаче