commit 02506966eb8016294793f27124067940449c908e
parent 00b341daf1091c03da30bbc127ea52d34ff2168a
Author: Simon Kornblith <simon@simonster.com>
Date: Tue, 20 Sep 2011 21:39:48 +0000
Remove processNextEvent() calls (by avoiding AddonManager)
Diffstat:
4 files changed, 83 insertions(+), 96 deletions(-)
diff --git a/chrome/content/zotero/bindings/styled-textbox.xml b/chrome/content/zotero/bindings/styled-textbox.xml
@@ -361,18 +361,19 @@
&& (!SJOW._zoteroMatchTo || SJOW._zoteroMatchTo !== matchTo)) return;
if (!SJOW.tinyMCE) {
- var exts = Zotero.getInstalledExtensions();
- for each(var ext in exts) {
- if (ext.indexOf('NoScript') != -1) {
- var warning = win.document.getElementById('noScriptWarning');
- var str = "The NoScript extension is preventing Zotero "
- + "from displaying notes. To use NoScript and Zotero together, "
- + "whitelist the 'file:' scheme in the NoScript preferences "
- + "and restart Firefox.";
- warning.appendChild(document.createTextNode(str));
- break;
+ var exts = Zotero.getInstalledExtensions(function(exts) {
+ for each(var ext in exts) {
+ if (ext.indexOf('NoScript') != -1) {
+ var warning = win.document.getElementById('noScriptWarning');
+ var str = "The NoScript extension is preventing Zotero "
+ + "from displaying notes. To use NoScript and Zotero together, "
+ + "whitelist the 'file:' scheme in the NoScript preferences "
+ + "and restart Firefox.";
+ warning.appendChild(document.createTextNode(str));
+ break;
+ }
}
- }
+ });
return;
}
diff --git a/chrome/content/zotero/errorReport.xul b/chrome/content/zotero/errorReport.xul
@@ -41,20 +41,22 @@
var wizard = document.getElementById('zotero-error-report');
var continueButtonName = wizard.getButton('next').disabled = true;
- var parts = {
- error: "true",
- errorData: Zotero.getErrors(true).join('\n'),
- extraData: extraData,
- diagnostic: Zotero.getSystemInfo()
- };
-
- var body = '';
- for (var key in parts) {
- body += key + '=' + encodeURIComponent(parts[key]) + '&';
- }
- body = body.substr(0, body.length - 1);
- Zotero.HTTP.doPost("https://repo.zotero.org/repo/report", body,
- _sendErrorReportCallback);
+ Zotero.getSystemInfo(function(info) {
+ var parts = {
+ error: "true",
+ errorData: Zotero.getErrors(true).join('\n'),
+ extraData: extraData,
+ diagnostic: info
+ };
+
+ var body = '';
+ for (var key in parts) {
+ body += key + '=' + encodeURIComponent(parts[key]) + '&';
+ }
+ body = body.substr(0, body.length - 1);
+ Zotero.HTTP.doPost("https://repo.zotero.org/repo/report", body,
+ _sendErrorReportCallback);
+ });
}
diff --git a/chrome/content/zotero/xpcom/translation/translate.js b/chrome/content/zotero/xpcom/translation/translate.js
@@ -1486,11 +1486,13 @@ Zotero.Translate.Web.prototype.complete = function(returnValue, error) {
}
}
- var postBody = "id=" + encodeURIComponent(this.translator[0].translatorID) +
- "&lastUpdated=" + encodeURIComponent(this.translator[0].lastUpdated) +
- "&diagnostic=" + encodeURIComponent(Zotero.getSystemInfo()) +
- "&errorData=" + encodeURIComponent(errorString);
- Zotero.HTTP.doPost("http://www.zotero.org/repo/report", postBody);
+ Zotero.getSystemInfo(function(info) {
+ var postBody = "id=" + encodeURIComponent(this.translator[0].translatorID) +
+ "&lastUpdated=" + encodeURIComponent(this.translator[0].lastUpdated) +
+ "&diagnostic=" + encodeURIComponent(info) +
+ "&errorData=" + encodeURIComponent(errorString);
+ Zotero.HTTP.doPost("http://www.zotero.org/repo/report", postBody);
+ });
}
}
diff --git a/chrome/content/zotero/xpcom/zotero.js b/chrome/content/zotero/xpcom/zotero.js
@@ -34,7 +34,8 @@ const ZOTERO_CONFIG = {
SYNC_URL: 'https://sync.zotero.org/',
API_URL: 'https://api.zotero.org/',
PREF_BRANCH: 'extensions.zotero.',
- BOOKMARKLET_URL: 'https://www.zotero.org/bookmarklet/'
+ BOOKMARKLET_URL: 'https://www.zotero.org/bookmarklet/',
+ VERSION: "3.0b3.SVN"
};
// Load AddonManager for Firefox 4
@@ -235,17 +236,7 @@ if(appInfo.platformVersion[0] >= 2) {
if(this.isStandalone) {
this.version = appInfo.version;
} else {
- // Load in the extension version from the extension manager
- if(this.isFx4) {
- AddonManager.getAddonByID(ZOTERO_CONFIG['GUID'],
- function(addon) { Zotero.version = addon.version; Zotero.addon = addon; });
- } else {
- var gExtensionManager =
- Components.classes["@mozilla.org/extensions/manager;1"]
- .getService(Components.interfaces.nsIExtensionManager);
- this.version
- = gExtensionManager.getItemForID(ZOTERO_CONFIG['GUID']).version;
- }
+ this.version = ZOTERO_CONFIG['VERSION'];
}
// OS platform
@@ -804,24 +795,14 @@ if(appInfo.platformVersion[0] >= 2) {
}
- function getInstallDirectory() {
- if(this.isStandalone) {
- var dir = Components.classes["@mozilla.org/file/directory_service;1"]
- .getService(Components.interfaces.nsIProperties)
- .get("CurProcD", Components.interfaces.nsILocalFile);
- return dir;
- } else {
- if(this.isFx4) {
- while(Zotero.addon === undefined) Zotero.mainThread.processNextEvent(true);
- var resourceURI = Zotero.addon.getResourceURI();
- return resourceURI.QueryInterface(Components.interfaces.nsIFileURL).file;
- } else {
- var id = ZOTERO_CONFIG.GUID;
- var em = Components.classes["@mozilla.org/extensions/manager;1"].
- getService(Components.interfaces.nsIExtensionManager);
- return em.getInstallLocation(id).getItemLocation(id);
- }
- }
+ function getInstallDirectory() {
+ var cr = Components.classes["@mozilla.org/chrome/chrome-registry;1"]
+ .getService(Components.interfaces.nsIChromeRegistry);
+ var ioService = Components.classes["@mozilla.org/network/io-service;1"]
+ .getService(Components.interfaces.nsIIOService);
+ var zoteroURI = ioService.newURI("chrome://zotero/content/", "UTF-8", null);
+ zoteroURI = cr.convertChromeURL(zoteroURI).QueryInterface(Components.interfaces.nsIFileURL);
+ return zoteroURI.file.parent.parent.parent.parent;
}
function getDefaultProfile(prefDir) {
@@ -1234,59 +1215,60 @@ if(appInfo.platformVersion[0] >= 2) {
}
- function getSystemInfo() {
+ function getSystemInfo(callback) {
var appInfo = Components.classes["@mozilla.org/xre/app-info;1"].
getService(Components.interfaces.nsIXULAppInfo);
- var info = {
- version: Zotero.version,
- platform: Zotero.platform,
- oscpu: Zotero.oscpu,
- locale: Zotero.locale,
- appName: appInfo.name,
- appVersion: appInfo.version,
- extensions: this.getInstalledExtensions().join(', ')
- };
-
- var str = '';
- for (var key in info) {
- str += key + ' => ' + info[key] + ', ';
- }
- str = str.substr(0, str.length - 2);
- return str;
+ Zotero.getInstalledExtensions(function(extensions) {
+ var info = {
+ version: Zotero.version,
+ platform: Zotero.platform,
+ oscpu: Zotero.oscpu,
+ locale: Zotero.locale,
+ appName: appInfo.name,
+ appVersion: appInfo.version,
+ extensions: extensions.join(', ')
+ };
+
+ var str = '';
+ for (var key in info) {
+ str += key + ' => ' + info[key] + ', ';
+ }
+ str = str.substr(0, str.length - 2);
+ callback(str);
+ });
}
/**
* @return {String[]} Array of extension names and versions
*/
- this.getInstalledExtensions = function () {
- if(this.isFx4) {
- if(!Zotero.addons) {
- AddonManager.getAllAddons(function(addonList) { Zotero.addons = addonList; });
- while(Zotero.addons === undefined) Zotero.mainThread.processNextEvent(true);
+ this.getInstalledExtensions = function(callback) {
+ function onHaveInstalledAddons(installed) {
+ var addons = [];
+ for each(var addon in installed) {
+ switch (addon.id) {
+ case "zotero@chnm.gmu.edu":
+ case "{972ce4c6-7e08-4474-a285-3208198ce6fd}": // Default theme
+ continue;
+ }
+
+ addons.push(addon.name + " (" + addon.version
+ + (addon.type != 2 ? ", " + addon.type : "") + ")");
}
- var installed = Zotero.addons;
+ callback(addons);
+ }
+
+ if(this.isFx4) {
+ AddonManager.getAllAddons(onHaveInstalledAddons);
} else {
var em = Components.classes["@mozilla.org/extensions/manager;1"].
getService(Components.interfaces.nsIExtensionManager);
var installed = em.getItemList(
Components.interfaces.nsIUpdateItem.TYPE_ANY, {}
);
+ onHaveInstalledAddons(installed);
}
-
- var addons = [];
- for each(var addon in installed) {
- switch (addon.id) {
- case "zotero@chnm.gmu.edu":
- case "{972ce4c6-7e08-4474-a285-3208198ce6fd}": // Default theme
- continue;
- }
-
- addons.push(addon.name + " (" + addon.version
- + (addon.type != 2 ? ", " + addon.type : "") + ")");
- }
- return addons;
}