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:
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();