www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit 9e88969f3d30947aaccdc5a830796c4f7f4fa293
parent e206b0af5ed12c023b479a77f7d23eafda6c1335
Author: Adomas VenĨkauskas <adomas.ven@gmail.com>
Date:   Tue,  9 Feb 2016 20:48:27 +0000

Refactor ProgressWindow translation messages show for feed items

Diffstat:
Mchrome/content/zotero/browser.js | 95+++++++++++--------------------------------------------------------------------
Mchrome/content/zotero/xpcom/data/feedItem.js | 31++++++++++++++++++++++++++-----
Mchrome/content/zotero/xpcom/progressWindow.js | 104+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mtest/tests/feedTest.js | 6+++---
Mtest/tests/feedsTest.js | 3++-
5 files changed, 148 insertions(+), 91 deletions(-)

diff --git a/chrome/content/zotero/browser.js b/chrome/content/zotero/browser.js @@ -596,14 +596,7 @@ var Zotero_Browser = new function() { */ this.performTranslation = Zotero.Promise.coroutine(function* (translate, libraryID, collection) { if (Zotero.locked) { - Zotero_Browser.progress.changeHeadline(Zotero.getString("ingester.scrapeError")); - var desc = Zotero.localeJoin([ - Zotero.getString('general.operationInProgress'), - Zotero.getString('general.operationInProgress.waitUntilFinishedAndTryAgain') - ]); - Zotero_Browser.progress.addDescription(desc); - Zotero_Browser.progress.show(); - Zotero_Browser.progress.startCloseTimer(8000); + Zotero_Browser.progress.Translation.operationInProgress(); return; } @@ -616,11 +609,7 @@ var Zotero_Browser = new function() { if(libraryID === undefined && ZoteroPane && !Zotero.isConnector) { try { if (!ZoteroPane.collectionsView.editable) { - Zotero_Browser.progress.changeHeadline(Zotero.getString("ingester.scrapeError")); - var desc = Zotero.getString('save.error.cannotMakeChangesToCollection'); - Zotero_Browser.progress.addDescription(desc); - Zotero_Browser.progress.show(); - Zotero_Browser.progress.startCloseTimer(8000); + Zotero_Browser.progress.cannotEditCollection(); return; } @@ -632,46 +621,16 @@ var Zotero_Browser = new function() { } if (libraryID === Zotero.Libraries.publicationsLibraryID) { - Zotero_Browser.progress.changeHeadline(Zotero.getString("ingester.scrapeError")); - var desc = Zotero.getString('save.error.cannotAddToMyPublications'); - Zotero_Browser.progress.addDescription(desc); - Zotero_Browser.progress.show(); - Zotero_Browser.progress.startCloseTimer(8000); + Zotero_Browser.progress.Translation.cannotAddToPublications(); return; } if (Zotero.Feeds.get(libraryID)) { - Zotero_Browser.progress.changeHeadline(Zotero.getString("ingester.scrapeError")); - Zotero_Browser.progress.addDescription(Zotero.getString('save.error.cannotAddToFeed')); - Zotero_Browser.progress.show(); - Zotero_Browser.progress.startCloseTimer(8000); + Zotero_Browser.progress.Translation.cannotAddToFeed(); return; } - if(Zotero.isConnector) { - Zotero.Connector.callMethod("getSelectedCollection", {}, function(response, status) { - if(status !== 200) { - Zotero_Browser.progress.changeHeadline(Zotero.getString("ingester.scraping")); - } else { - Zotero_Browser.progress.changeHeadline(Zotero.getString("ingester.scrapingTo"), - "chrome://zotero/skin/treesource-"+(response.id ? "collection" : "library")+".png", - response.name+"\u2026"); - } - }); - } else { - var name; - if(collection) { - name = collection.name; - } else if(libraryID) { - name = Zotero.Libraries.getName(libraryID); - } else { - name = Zotero.getString("pane.collections.library"); - } - - Zotero_Browser.progress.changeHeadline(Zotero.getString("ingester.scrapingTo"), - "chrome://zotero/skin/treesource-"+(collection ? "collection" : "library")+".png", - name+"\u2026"); - } + Zotero_Browser.progress.Translation.scrapingTo(libraryID, collection); translate.clearHandlers("done"); translate.clearHandlers("itemDone"); @@ -679,48 +638,20 @@ var Zotero_Browser = new function() { var deferred = Zotero.Promise.defer(); - translate.setHandler("done", function(obj, returnValue) { - if(!returnValue) { - Zotero_Browser.progress.show(); - Zotero_Browser.progress.changeHeadline(Zotero.getString("ingester.scrapeError")); - // Include link to translator troubleshooting page - var url = "https://www.zotero.org/support/troubleshooting_translator_issues"; - var linkText = '<a href="' + url + '" tooltiptext="' + url + '">' - + Zotero.getString('ingester.scrapeErrorDescription.linkText') + '</a>'; - Zotero_Browser.progress.addDescription(Zotero.getString("ingester.scrapeErrorDescription", linkText)); - Zotero_Browser.progress.startCloseTimer(8000); - } else { - Zotero_Browser.progress.startCloseTimer(); - } + translate.setHandler("done", function() { + Zotero_Browser.progress.Translation.doneHandler.apply(Zotero_Browser.progress.Translation, arguments); Zotero_Browser.isScraping = false; - deferred.resolve(); }); - translate.setHandler("itemDone", function(obj, dbItem, item) { - Zotero_Browser.progress.show(); - var itemProgress = new Zotero_Browser.progress.ItemProgress(Zotero.ItemTypes.getImageSrc(item.itemType), - item.title); - itemProgress.setProgress(100); - for(var i=0; i<item.attachments.length; i++) { - var attachment = item.attachments[i]; - _attachmentsMap.set(attachment, - new Zotero_Browser.progress.ItemProgress( - Zotero.Utilities.determineAttachmentIcon(attachment), - attachment.title, itemProgress)); - } + translate.setHandler("itemDone", function() { + let handler = Zotero_Browser.progress.Translation.itemDoneHandler(_attachmentsMap); + handler.apply(Zotero_Browser.progress.Translation, arguments); }); - translate.setHandler("attachmentProgress", function(obj, attachment, progress, error) { - var itemProgress = _attachmentsMap.get(attachment); - if(progress === false) { - itemProgress.setError(); - } else { - itemProgress.setProgress(progress); - if(progress === 100) { - itemProgress.setIcon(Zotero.Utilities.determineAttachmentIcon(attachment)); - } - } + translate.setHandler("attachmentProgress", function() { + let handler = Zotero_Browser.progress.Translation.attachmentProgressHandler(_attachmentsMap); + handler.apply(Zotero_Browser.progress.Translation, arguments); }); translate.translate({ diff --git a/chrome/content/zotero/xpcom/data/feedItem.js b/chrome/content/zotero/xpcom/data/feedItem.js @@ -206,8 +206,29 @@ Zotero.FeedItem.prototype.forceEraseTx = function(options) { * @return {Promise<FeedItem|Item>} translated feed item */ Zotero.FeedItem.prototype.translate = Zotero.Promise.coroutine(function* (libraryID, collectionID) { + if (Zotero.locked) { + Zotero.debug('Zotero locked, skipping feed item translation'); + return; + } + let deferred = Zotero.Promise.defer(); let error = function(e) { Zotero.debug(e, 1); deferred.reject(e); }; + let translate = new Zotero.Translate.Web(); + + if (libraryID) { + // Show progress notifications when scraping to a library + var win = Services.wm.getMostRecentWindow("navigator:browser"); + translate.clearHandlers("done"); + translate.clearHandlers("itemDone"); + translate.setHandler("done", win.Zotero_Browser.progress.Translation.doneHandler); + translate.setHandler("itemDone", win.Zotero_Browser.progress.Translation.itemDoneHandler()); + let collection; + if (collectionID) { + collection = yield Zotero.Collections.getAsync(collectionID); + } + win.Zotero_Browser.progress.show(); + win.Zotero_Browser.progress.Translation.scrapingTo(libraryID, collection); + } // Load document let hiddenBrowser = Zotero.HTTP.processDocuments( @@ -218,7 +239,6 @@ Zotero.FeedItem.prototype.translate = Zotero.Promise.coroutine(function* (librar let doc = yield deferred.promise; // Set translate document - let translate = new Zotero.Translate.Web(); translate.setDocument(doc); // Load translators @@ -235,8 +255,10 @@ Zotero.FeedItem.prototype.translate = Zotero.Promise.coroutine(function* (librar deferred = Zotero.Promise.defer(); if (libraryID) { - return translate.translate({libraryID, collections: collectionID ? [collectionID] : false}) + let result = yield translate.translate({libraryID, collections: collectionID ? [collectionID] : false}) .then(items => items ? items[0] : false); + Zotero.Browser.deleteHiddenBrowser(hiddenBrowser); + return result; } // Clear these to prevent saving @@ -254,9 +276,8 @@ Zotero.FeedItem.prototype.translate = Zotero.Promise.coroutine(function* (librar const deleteFields = ['attachments', 'notes', 'id', 'itemID', 'path', 'seeAlso', 'version', 'dateAdded', 'dateModified']; for (let field of deleteFields) { delete itemData[field]; - } - // TODO: handle no items like the ones in french history studies feed - // set new translated data for item + } + this.fromJSON(itemData); this.isTranslated = true; this.forceSaveTx(); diff --git a/chrome/content/zotero/xpcom/progressWindow.js b/chrome/content/zotero/xpcom/progressWindow.js @@ -365,6 +365,110 @@ Zotero.ProgressWindow = function(_window = null) { this._hbox.style.filter = ""; }); + this.Translation = {}; + + this.Translation.operationInProgress = function() { + var desc = Zotero.localeJoin([ + Zotero.getString('general.operationInProgress'), + Zotero.getString('general.operationInProgress.waitUntilFinishedAndTryAgain') + ]); + self.Translation._scrapeError(desc); + }; + + this.Translation.cannotEditCollection = function() { + var desc = Zotero.getString('save.error.cannotMakeChangesToCollection'); + self.Translation._scrapeError(desc); + }; + + this.Translation.cannotAddToPublications = function () { + var desc = Zotero.getString('save.error.cannotAddToMyPublications'); + self.Translation._scrapeError(desc); + }; + + this.Translation.cannotAddToFeed = function() { + var desc = Zotero.getString('save.error.cannotAddToFeed'); + self.Translation._scrapeError(desc); + }; + + this.Translation.scrapingTo = function(libraryID, collection) { + if(Zotero.isConnector) { + Zotero.Connector.callMethod("getSelectedCollection", {}, function(response, status) { + if(status !== 200) { + self.changeHeadline(Zotero.getString("ingester.scraping")); + } else { + self.changeHeadline(Zotero.getString("ingester.scrapingTo"), + "chrome://zotero/skin/treesource-"+(response.id ? "collection" : "library")+".png", + response.name+"\u2026"); + } + }); + } else { + var name; + if(collection) { + name = collection.name; + } else if(libraryID) { + name = Zotero.Libraries.getName(libraryID); + } else { + name = Zotero.getString("pane.collections.library"); + } + + self.changeHeadline(Zotero.getString("ingester.scrapingTo"), + "chrome://zotero/skin/treesource-"+(collection ? "collection" : "library")+".png", + name+"\u2026"); + } + }; + + this.Translation.doneHandler = function(obj, returnValue) { + if(!returnValue) { + // Include link to translator troubleshooting page + var url = "https://www.zotero.org/support/troubleshooting_translator_issues"; + var linkText = '<a href="' + url + '" tooltiptext="' + url + '">' + + Zotero.getString('ingester.scrapeErrorDescription.linkText') + '</a>'; + var desc = Zotero.getString("ingester.scrapeErrorDescription", linkText) + self.Translation._scrapeError(desc); + } else { + self.startCloseTimer(); + } + }; + + this.Translation.itemDoneHandler = function(_attachmentsMap) { + _attachmentsMap = _attachmentsMap || new WeakMap(); + return function(obj, dbItem, item) { + self.show(); + var itemProgress = new self.ItemProgress(Zotero.ItemTypes.getImageSrc(item.itemType), + item.title); + itemProgress.setProgress(100); + for(var i=0; i<item.attachments.length; i++) { + var attachment = item.attachments[i]; + _attachmentsMap.set(attachment, + new self.ItemProgress( + Zotero.Utilities.determineAttachmentIcon(attachment), + attachment.title, itemProgress)); + } + } + }; + + this.Translation.attachmentProgressHandler = function(_attachmentsMap) { + _attachmentsMap = _attachmentsMap || new WeakMap(); + return function(obj, attachment, progress, error) { + var itemProgress = _attachmentsMap.get(attachment); + if(progress === false) { + itemProgress.setError(); + } else { + itemProgress.setProgress(progress); + if(progress === 100) { + itemProgress.setIcon(Zotero.Utilities.determineAttachmentIcon(attachment)); + } + } + } + }; + + this.Translation._scrapeError = function(description) { + self.changeHeadline(Zotero.getString("ingester.scrapeError")); + self.addDescription(description); + self.show(); + self.startCloseTimer(8000) + } + function _onWindowLoaded() { _windowLoading = false; _windowLoaded = true; diff --git a/test/tests/feedTest.js b/test/tests/feedTest.js @@ -290,10 +290,10 @@ describe("Zotero.Feed", function() { assert.equal(feed.unreadCount, 2); }); it('should not re-add deleted items, but add new ones', function* () { - let feedItems = yield Zotero.FeedItems.getAll(feed.id); - yield feedItems[1].forceEraseTx(); + let feedItem = yield Zotero.FeedItems.getAsyncByGUID("http://liftoff.msfc.nasa.gov/2003/05/20.html#item570:"+feed.id); + yield feedItem.forceEraseTx(); - feedItems = yield Zotero.FeedItems.getAll(feed.id); + let feedItems = yield Zotero.FeedItems.getAll(feed.id); for (let feedItem of feedItems) { feedItem.isRead = true; yield feedItem.forceSaveTx(); diff --git a/test/tests/feedsTest.js b/test/tests/feedsTest.js @@ -113,7 +113,8 @@ describe("Zotero.Feeds", function () { yield Zotero.Feeds.scheduleNextFeedCheck(); - assert.equal(Zotero.Promise.delay.args[0][0], 1000*60*60); + // Allow a propagation delay of 5000ms + assert.isTrue(Zotero.Promise.delay.args[0][0] - 1000*60*60 <= 5000); Zotero.Feeds.scheduleNextFeedCheck.restore(); Zotero.Promise.delay.restore();