commit d842779cae5d1197594f7d1254975528f3699520
parent fa487f151f981568cb3685d81c28aed5117c6223
Author: Simon Kornblith <simon@simonster.com>
Date: Mon, 4 Nov 2013 22:17:16 -0500
Close transaction before updating progress indicator
Should fix #230
Diffstat:
1 file changed, 17 insertions(+), 23 deletions(-)
diff --git a/chrome/content/zotero/fileInterface.js b/chrome/content/zotero/fileInterface.js
@@ -81,7 +81,9 @@ Zotero_File_Exporter.prototype.save = function() {
translation.setLocation(fp.file);
translation.setTranslator(io.selectedTranslator);
translation.setDisplayOptions(io.displayOptions);
- translation.setHandler("itemDone", Zotero_File_Interface.updateProgress);
+ translation.setHandler("itemDone", function () {
+ Zotero_File_Interface.updateProgress(translation, false);
+ });
translation.setHandler("done", this._exportDone);
Zotero.UnresponsiveScriptIndicator.disable();
Zotero_File_Interface.Progress.show(
@@ -308,7 +310,9 @@ var Zotero_File_Interface = new function() {
});
}
- translation.setHandler("itemDone", Zotero_File_Interface.updateProgress);
+ translation.setHandler("itemDone", function () {
+ Zotero_File_Interface.updateProgress(translation, true);
+ });
/*
* closes items imported indicator
@@ -627,33 +631,23 @@ var Zotero_File_Interface = new function() {
/**
* Updates progress indicators based on current progress of translation
*/
- this.updateProgress = function(translate) {
+ this.updateProgress = function(translate, closeTransaction) {
Zotero.updateZoteroPaneProgressMeter(translate.getProgress());
var now = Date.now();
- // Don't repaint more than 10 times per second unless forced.
- if(window.zoteroLastRepaint && (now - window.zoteroLastRepaint) < 100) return
+ // Don't repaint more than once per second unless forced.
+ if(window.zoteroLastRepaint && (now - window.zoteroLastRepaint) < 1000) return
- // Start a nested event queue
- // TODO Remove when Fx > 14
- var eventQueuePushed = "pushEventQueue" in Zotero.mainThread;
- if(eventQueuePushed) {
- Zotero.mainThread.pushEventQueue(null);
- }
+ // Add the redraw event onto event queue
+ window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
+ .getInterface(Components.interfaces.nsIDOMWindowUtils)
+ .redraw();
- try {
- // Add the redraw event onto event queue
- window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
- .getInterface(Components.interfaces.nsIDOMWindowUtils)
- .redraw();
-
- // Process redraw event
- Zotero.wait(0);
- } finally {
- // Close nested event queue
- if(eventQueuePushed) Zotero.mainThread.popEventQueue();
- }
+ // Process redraw event
+ if(closeTransaction) Zotero.DB.commitTransaction();
+ Zotero.wait();
+ if(closeTransaction) Zotero.DB.beginTransaction();
window.zoteroLastRepaint = now;
}