commit deb85038634ac6f99bc7811164c8b090880e71a6
parent a853bb0661520ec0061a652706c31b6e1d25470b
Author: Adomas VenĨkauskas <adomas.ven@gmail.com>
Date: Wed, 14 Dec 2016 15:28:06 +0200
Remove coroutine from translate.js not supported in connector
From 7fc352b9
Diffstat:
1 file changed, 53 insertions(+), 58 deletions(-)
diff --git a/chrome/content/zotero/xpcom/translation/translate.js b/chrome/content/zotero/xpcom/translation/translate.js
@@ -1540,73 +1540,68 @@ Zotero.Translate.Base.prototype = {
* Saves items to the database, taking care to defer attachmentProgress notifications
* until after save
*/
- _saveItems: Zotero.Promise.coroutine(function* (items) {
+ _saveItems: Zotero.Promise.method(function (items) {
var itemDoneEventsDispatched = false;
var deferredProgress = [];
var attachmentsWithProgress = [];
- try {
- var newItems = yield this._itemSaver.saveItems(
- items.slice(),
- function (attachment, progress, error) {
- var attachmentIndex = this._savingAttachments.indexOf(attachment);
- if(progress === false || progress === 100) {
- if(attachmentIndex !== -1) {
- this._savingAttachments.splice(attachmentIndex, 1);
- }
- } else if(attachmentIndex === -1) {
- this._savingAttachments.push(attachment);
- }
-
- if(itemDoneEventsDispatched) {
- // itemDone event has already fired, so we can fire attachmentProgress
- // notifications
- this._runHandler("attachmentProgress", attachment, progress, error);
- this._checkIfDone();
- } else {
- // Defer until after we fire the itemDone event
- deferredProgress.push([attachment, progress, error]);
- attachmentsWithProgress.push(attachment);
+ function attachmentCallback(attachment, progress, error) {
+ var attachmentIndex = this._savingAttachments.indexOf(attachment);
+ if(progress === false || progress === 100) {
+ if(attachmentIndex !== -1) {
+ this._savingAttachments.splice(attachmentIndex, 1);
+ }
+ } else if(attachmentIndex === -1) {
+ this._savingAttachments.push(attachment);
+ }
+
+ if(itemDoneEventsDispatched) {
+ // itemDone event has already fired, so we can fire attachmentProgress
+ // notifications
+ this._runHandler("attachmentProgress", attachment, progress, error);
+ this._checkIfDone();
+ } else {
+ // Defer until after we fire the itemDone event
+ deferredProgress.push([attachment, progress, error]);
+ attachmentsWithProgress.push(attachment);
+ }
+ }
+
+ return this._itemSaver.saveItems(items.slice(), attachmentCallback.bind(this)).then(function(newItems) {
+ // Remove attachments not being saved from item.attachments
+ for(var i=0; i<items.length; i++) {
+ var item = items[i];
+ for(var j=0; j<item.attachments.length; j++) {
+ if(attachmentsWithProgress.indexOf(item.attachments[j]) === -1) {
+ item.attachments.splice(j--, 1);
}
- }.bind(this)
- )
- }
- catch (e) {
+ }
+ }
+
+ // Trigger itemDone events
+ for(var i=0, nItems = items.length; i<nItems; i++) {
+ this._runHandler("itemDone", newItems[i], items[i]);
+ }
+
+ // Specify that itemDone event was dispatched, so that we don't defer
+ // attachmentProgress notifications anymore
+ itemDoneEventsDispatched = true;
+
+ // Run deferred attachmentProgress notifications
+ for(var i=0; i<deferredProgress.length; i++) {
+ this._runHandler("attachmentProgress", deferredProgress[i][0],
+ deferredProgress[i][1], deferredProgress[i][2]);
+ }
+
+ this._savingItems -= items.length;
+ this.newItems = this.newItems.concat(newItems);
+ this._checkIfDone();
+ }.bind(this)).catch(function(e) {
this._savingItems -= items.length;
Zotero.debug("REDUCING SAVING ITEMS ERROR TO " + this._savingItems);
Zotero.logError(e);
this.complete(false, e);
- return;
- }
-
- // Remove attachments not being saved from item.attachments
- for(var i=0; i<items.length; i++) {
- var item = items[i];
- for(var j=0; j<item.attachments.length; j++) {
- if(attachmentsWithProgress.indexOf(item.attachments[j]) === -1) {
- item.attachments.splice(j--, 1);
- }
- }
- }
-
- // Trigger itemDone events
- for(var i=0, nItems = items.length; i<nItems; i++) {
- this._runHandler("itemDone", newItems[i], items[i]);
- }
-
- // Specify that itemDone event was dispatched, so that we don't defer
- // attachmentProgress notifications anymore
- itemDoneEventsDispatched = true;
-
- // Run deferred attachmentProgress notifications
- for(var i=0; i<deferredProgress.length; i++) {
- this._runHandler("attachmentProgress", deferredProgress[i][0],
- deferredProgress[i][1], deferredProgress[i][2]);
- }
-
- this._savingItems -= items.length;
- this.newItems = this.newItems.concat(newItems);
- this._checkIfDone();
+ }.bind(this));
}),
/**