Add feedItem translation

This commit is contained in:
Adomas Venčkauskas 2016-02-01 11:36:29 +00:00 committed by Dan Stillman
parent e6ede4b36f
commit 6da0845f4b
3 changed files with 79 additions and 5 deletions

View File

@ -33,9 +33,9 @@ Zotero.FeedItem = function(itemTypeOrID, params = {}) {
this._feedItemReadTime = null; this._feedItemReadTime = null;
Zotero.Utilities.assignProps(this, params, ['guid']); Zotero.Utilities.assignProps(this, params, ['guid']);
} };
Zotero.extendClass(Zotero.Item, Zotero.FeedItem) Zotero.extendClass(Zotero.Item, Zotero.FeedItem);
Zotero.FeedItem.prototype._objectType = 'feedItem'; Zotero.FeedItem.prototype._objectType = 'feedItem';
Zotero.FeedItem.prototype._containerObject = 'feed'; Zotero.FeedItem.prototype._containerObject = 'feed';
@ -69,6 +69,22 @@ Zotero.defineProperty(Zotero.FeedItem.prototype, 'isRead', {
} }
} }
}); });
//
//Zotero.defineProperty(Zotero.FeedItem.prototype, 'isTranslated', {
// get: function() {
// return !!this._feedItemTranslationTime;
// },
// set: function(state) {
// if (state != !!this._feedItemTranslationTime) {
// if (state) {
// this._feedItemTranslationTime = Zotero.Date.dateToSQL(new Date(), true);
// } else {
// this._feedItemTranslationTime = null;
// }
// this._changed.feedItemData = true;
// }
// }
//});
Zotero.FeedItem.prototype.loadPrimaryData = Zotero.Promise.coroutine(function* (reload, failOnMissing) { Zotero.FeedItem.prototype.loadPrimaryData = Zotero.Promise.coroutine(function* (reload, failOnMissing) {
if (this.guid && !this.id) { if (this.guid && !this.id) {
@ -183,4 +199,61 @@ Zotero.FeedItem.prototype.forceEraseTx = function(options) {
Object.assign(newOptions, options || {}); Object.assign(newOptions, options || {});
newOptions.skipEditCheck = true; newOptions.skipEditCheck = true;
return this.eraseTx(newOptions); return this.eraseTx(newOptions);
} };
/**
* Uses the item url to translate an existing feed item.
* If libraryID empty, overwrites feed item, otherwise saves
* in the library
* @param libraryID {int} save item in library
* @param collectionID {int} add item to collection
* @return {Promise<FeedItem>} translated feed item
*/
Zotero.FeedItem.prototype.translate = Zotero.Promise.coroutine(function* (libaryID, collectionID) {
let deferred = Zotero.Promise.defer();
let error = function(e) { Zotero.debug(e, 1); deferred.reject(e); };
// Load document
let hiddenBrowser = Zotero.HTTP.processDocuments(
this.getField('url'),
(item) => deferred.resolve(item),
()=>{}, error, true
);
let doc = yield deferred.promise;
// Set translate document
let translate = new Zotero.Translate.Web();
translate.setDocument(doc);
// Load translators
deferred = Zotero.Promise.defer();
translate.setHandler('translators', (me, translators) => deferred.resolve(translators));
translate.getTranslators();
let translators = yield deferred.promise;
if (! translators || !translators.length) {
Zotero.debug("No translators detected for FeedItem " + this.id + " with url " + this.getField('url'), 2);
throw new Zotero.Error("No translators detected for FeedItem " + this.id + " with url " + this.getField('url'))
}
translate.setTranslator(translators[0]);
deferred = Zotero.Promise.defer();
// Clear these to prevent saving
translate.clearHandlers('itemDone');
translate.clearHandlers('itemsDone');
translate.setHandler('error', error);
translate.setHandler('itemDone', (_, items) => deferred.resolve(items));
translate.translate({libraryID: false, saveAttachments: false});
let itemData = yield deferred.promise;
Zotero.Browser.deleteHiddenBrowser(hiddenBrowser);
// clean itemData
const deleteFields = ['attachments', 'notes', 'id', 'itemID', 'path', 'seeAlso', 'version', 'dateAdded', 'dateModified'];
for (let field of deleteFields) {
delete itemData[field];
}
// set new translated data for item
this.fromJSON(itemData);
this.forceSaveTx();
});

View File

@ -1212,7 +1212,7 @@ Zotero.Translate.Base.prototype = {
if(!translators.length) { if(!translators.length) {
me.complete(false, "Could not find an appropriate translator"); me.complete(false, "Could not find an appropriate translator");
} else { } else {
me.setTranslator(translators); me.setTranslator(translators[0]);
deferred.resolve(Zotero.Translate.Base.prototype.translate.call(me, options)); deferred.resolve(Zotero.Translate.Base.prototype.translate.call(me, options));
} }
}); });

View File

@ -1376,7 +1376,8 @@ var ZoteroPane = new function()
} }
if (item.isFeedItem) { if (item.isFeedItem) {
this.startItemReadTimeout(item.id); item.translate();
this.startItemReadTimeout.bind(this, item.id);
} }
} }
} }