make Zotero.Integration.execCommand() synchronous on Fx 4

This commit is contained in:
Simon Kornblith 2011-03-01 05:31:20 +00:00
parent 3c1bb02c9f
commit 2e0d6aa4ec

View file

@ -130,30 +130,6 @@ Zotero.Integration = new function() {
* Executes an integration command, first checking to make sure that versions are compatible
*/
this.execCommand = function execCommand(agent, command, docId) {
var verComp = Components.classes["@mozilla.org/xpcom/version-comparator;1"]
.getService(Components.interfaces.nsIVersionComparator);
function _checkAddons(addons) {
for each(var addon in addons) {
if(!addon) continue;
if(verComp.compare(INTEGRATION_MIN_VERSION, addon.version) > 0) {
_inProgress = false;
_integrationVersionsOK = false;
Zotero.Integration.activate();
var msg = Zotero.getString(
"integration.error.incompatibleVersion2",
[Zotero.version, addon.name, INTEGRATION_MIN_VERSION]
);
Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
.getService(Components.interfaces.nsIPromptService)
.alert(null, Zotero.getString("integration.error.title"), msg);
throw msg;
}
}
_integrationVersionsOK = true;
_callIntegration(agent, command, docId);
}
if(_inProgress) {
Zotero.Integration.activate();
Zotero.debug("Integration: Request already in progress; not executing "+agent+" "+command);
@ -163,9 +139,36 @@ Zotero.Integration = new function() {
// Check integration component versions
if(!_integrationVersionsOK) {
var verComp = Components.classes["@mozilla.org/xpcom/version-comparator;1"]
.getService(Components.interfaces.nsIVersionComparator);
var addonsChecked = false;
function _checkAddons(addons) {
addonsChecked = true;
for each(var addon in addons) {
if(!addon) continue;
if(verComp.compare(INTEGRATION_MIN_VERSION, addon.version) > 0) {
_inProgress = false;
_integrationVersionsOK = false;
Zotero.Integration.activate();
var msg = Zotero.getString(
"integration.error.incompatibleVersion2",
[Zotero.version, addon.name, INTEGRATION_MIN_VERSION]
);
Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
.getService(Components.interfaces.nsIPromptService)
.alert(null, Zotero.getString("integration.error.title"), msg);
throw msg;
}
}
_integrationVersionsOK = true;
_callIntegration(agent, command, docId);
}
if(Zotero.isFx4) {
Components.utils.import("resource://gre/modules/AddonManager.jsm");
AddonManager.getAddonsByIDs(INTEGRATION_PLUGINS, _checkAddons);
while(!addonsChecked) Zotero.mainThread.processNextEvent(true);
} else {
var extMan = Components.classes['@mozilla.org/extensions/manager;1'].
getService(Components.interfaces.nsIExtensionManager);
@ -2107,4 +2110,4 @@ Zotero.Integration.URIMap.prototype.getZoteroItemForURIs = function(uris) {
}
return [zoteroItem, needUpdate];
}
}