commit c222a3248a94827a9c18d4c55a490acf66ba4ebc
parent f7d5ebc3573cb19b41b87731dd522c612cfcbe8c
Author: Aurimas Vinckevicius <aurimas.dev@gmail.com>
Date: Fri, 14 Nov 2014 02:29:54 -0600
Transition __defineGetter/Setter__ to Zotero.defineProperty
Diffstat:
3 files changed, 411 insertions(+), 354 deletions(-)
diff --git a/chrome/content/zotero/xpcom/data/collection.js b/chrome/content/zotero/xpcom/data/collection.js
@@ -48,27 +48,39 @@ Zotero.Collection.prototype._dataTypes = Zotero.Collection._super.prototype._dat
'childItems'
]);
-Zotero.Collection.prototype.__defineGetter__('id', function () { return this._get('id'); });
-Zotero.Collection.prototype.__defineSetter__('id', function (val) { this._set('id', val); });
-Zotero.Collection.prototype.__defineGetter__('libraryID', function () { return this._get('libraryID'); });
-Zotero.Collection.prototype.__defineSetter__('libraryID', function (val) { return this._set('libraryID', val); });
-Zotero.Collection.prototype.__defineGetter__('key', function () { return this._get('key'); });
-Zotero.Collection.prototype.__defineSetter__('key', function (val) { this._set('key', val) });
-Zotero.Collection.prototype.__defineGetter__('name', function () { return this._get('name'); });
-Zotero.Collection.prototype.__defineSetter__('name', function (val) { this._set('name', val); });
-// .parentKey and .parentID defined in dataObject.js
-Zotero.Collection.prototype.__defineGetter__('version', function () { return this._get('version'); });
-Zotero.Collection.prototype.__defineSetter__('version', function (val) { this._set('version', val); });
-Zotero.Collection.prototype.__defineGetter__('synced', function () { return this._get('synced'); });
-Zotero.Collection.prototype.__defineSetter__('synced', function (val) { this._set('synced', val); });
-
-Zotero.Collection.prototype.__defineGetter__('parent', function (val) {
- Zotero.debug("WARNING: Zotero.Collection.prototype.parent has been deprecated -- use .parentID or .parentKey", 2);
- return this.parentID;
+Zotero.defineProperty(Zotero.Collection.prototype, 'id', {
+ get: function() this._get('id'),
+ set: function(val) this._set('id', val)
});
-Zotero.Collection.prototype.__defineSetter__('parent', function (val) {
- Zotero.debug("WARNING: Zotero.Collection.prototype.parent has been deprecated -- use .parentID or .parentKey", 2);
- this.parentID = val;
+Zotero.defineProperty(Zotero.Collection.prototype, 'libraryID', {
+ get: function() this._get('libraryID'),
+ set: function(val) this._set('libraryID', val)
+});
+Zotero.defineProperty(Zotero.Collection.prototype, 'key', {
+ get: function() this._get('key'),
+ set: function(val) this._set('key', val)
+});
+Zotero.defineProperty(Zotero.Collection.prototype, 'name', {
+ get: function() this._get('name'),
+ set: function(val) this._set('name', val)
+});
+Zotero.defineProperty(Zotero.Collection.prototype, 'version', {
+ get: function() this._get('version'),
+ set: function(val) this._set('version', val)
+});
+Zotero.defineProperty(Zotero.Collection.prototype, 'synced', {
+ get: function() this._get('synced'),
+ set: function(val) this._set('synced', val)
+});
+Zotero.defineProperty(Zotero.Collection.prototype, 'parent', {
+ get: function() {
+ Zotero.debug("WARNING: Zotero.Collection.prototype.parent has been deprecated -- use .parentID or .parentKey", 2);
+ return this.parentID;
+ },
+ set: function(val) {
+ Zotero.debug("WARNING: Zotero.Collection.prototype.parent has been deprecated -- use .parentID or .parentKey", 2);
+ this.parentID = val;
+ }
});
Zotero.Collection.prototype._set = function (field, value) {
diff --git a/chrome/content/zotero/xpcom/data/item.js b/chrome/content/zotero/xpcom/data/item.js
@@ -106,35 +106,62 @@ Zotero.Item.prototype._dataTypes = Zotero.Item._super.prototype._dataTypes.conca
'relations'
]);
-Zotero.Item.prototype.__defineGetter__('id', function () this._id);
-Zotero.Item.prototype.__defineGetter__('itemID', function () {
- Zotero.debug("Item.itemID is deprecated -- use Item.id");
- return this._id;
+Zotero.defineProperty(Zotero.Item.prototype, 'id', {
+ get: function() this._id,
+ set: function(val) this.setField('id', val)
+});
+Zotero.defineProperty(Zotero.Item.prototype, 'itemID', {
+ get: function() {
+ Zotero.debug("Item.itemID is deprecated -- use Item.id");
+ return this._id;
+ }
+});
+Zotero.defineProperty(Zotero.Item.prototype, 'libraryID', {
+ get: function() this._libraryID,
+ set: function(val) this.setField('libraryID', val)
+});
+Zotero.defineProperty(Zotero.Item.prototype, 'key', {
+ get: function() this._key,
+ set: function(val) this.setField('key', val)
+});
+Zotero.defineProperty(Zotero.Item.prototype, 'itemTypeID', {
+ get: function() this._itemTypeID
+});
+Zotero.defineProperty(Zotero.Item.prototype, 'dateAdded', {
+ get: function() this._dateAdded
+});
+Zotero.defineProperty(Zotero.Item.prototype, 'dateModified', {
+ get: function() this._dateModified
+});
+Zotero.defineProperty(Zotero.Item.prototype, 'version', {
+ get: function() this._itemVersion,
+ set: function(val) this.setField('version', val)
+});
+Zotero.defineProperty(Zotero.Item.prototype, 'synced', {
+ get: function() this._synced,
+ set: function(val) this.setField('synced', val)
});
-Zotero.Item.prototype.__defineSetter__('id', function (val) { this.setField('id', val); });
-Zotero.Item.prototype.__defineGetter__('libraryID', function () this._libraryID );
-Zotero.Item.prototype.__defineSetter__('libraryID', function (val) { this.setField('libraryID', val); });
-Zotero.Item.prototype.__defineGetter__('key', function () this._key );
-Zotero.Item.prototype.__defineSetter__('key', function (val) { this.setField('key', val) });
-Zotero.Item.prototype.__defineGetter__('itemTypeID', function () this._itemTypeID);
-Zotero.Item.prototype.__defineGetter__('dateAdded', function () this._dateAdded );
-Zotero.Item.prototype.__defineGetter__('dateModified', function () this._dateModified );
-Zotero.Item.prototype.__defineGetter__('version', function () this._itemVersion );
-Zotero.Item.prototype.__defineSetter__('version', function (val) { return this.setField('itemVersion', val); });
-Zotero.Item.prototype.__defineGetter__('synced', function () this._synced );
-Zotero.Item.prototype.__defineSetter__('synced', function (val) { return this.setField('synced', val); });
// .parentKey and .parentID defined in dataObject.js, but create aliases
-Zotero.Item.prototype.__defineGetter__('parentItemKey', function () this._parentKey );
-Zotero.Item.prototype.__defineSetter__('parentItemKey', function (val) this._setParentKey(val) );
-Zotero.Item.prototype.__defineGetter__('parentItemID', function () this._getParentID() );
-Zotero.Item.prototype.__defineSetter__('parentItemID', function (val) this._setParentID(val) );
-
-Zotero.Item.prototype.__defineGetter__('firstCreator', function () this._firstCreator );
-Zotero.Item.prototype.__defineGetter__('sortCreator', function () this._sortCreator );
+Zotero.defineProperty(Zotero.Item.prototype, 'parentItemID', {
+ get: function() this.parentID,
+ set: function(val) this.parentID = val
+});
+Zotero.defineProperty(Zotero.Item.prototype, 'parentItemKey', {
+ get: function() this.parentKey,
+ set: function(val) this.parentKey = val
+});
-Zotero.Item.prototype.__defineGetter__('relatedItems', function () { return this._getRelatedItems(true); });
-Zotero.Item.prototype.__defineSetter__('relatedItems', function (arr) { this._setRelatedItems(arr); });
+Zotero.defineProperty(Zotero.Item.prototype, 'firstCreator', {
+ get: function() this._firstCreator
+});
+Zotero.defineProperty(Zotero.Item.prototype, 'sortCreator', {
+ get: function() this._sortCreator
+});
+Zotero.defineProperty(Zotero.Item.prototype, 'relatedItems', {
+ get: function() this._getRelatedItems(true),
+ set: function(arr) this._setRelatedItems(arr)
+});
Zotero.Item.prototype.getID = function() {
Zotero.debug('Item.getID() is deprecated -- use Item.id');
@@ -1059,28 +1086,27 @@ Zotero.Item.prototype.removeCreator = function(orderIndex, allowMissing) {
return true;
}
-
-Zotero.Item.prototype.__defineGetter__('deleted', function () {
- if (!this.id) {
- return false;
- }
- if (this._deleted !== null) {
- return this._deleted;
- }
- this._requireData('primaryData');
-});
-
-
-Zotero.Item.prototype.__defineSetter__('deleted', function (val) {
- var deleted = !!val;
-
- if (this._deleted == deleted) {
- Zotero.debug("Deleted state hasn't changed for item " + this.id);
- return;
+Zotero.defineProperty(Zotero.Item.prototype, 'deleted', {
+ get: function() {
+ if (!this.id) {
+ return false;
+ }
+ if (this._deleted !== null) {
+ return this._deleted;
+ }
+ this._requireData('primaryData');
+ },
+ set: function(val) {
+ var deleted = !!val;
+
+ if (this._deleted == deleted) {
+ Zotero.debug("Deleted state hasn't changed for item " + this.id);
+ return;
+ }
+ this._markFieldChange('deleted', !!this._deleted);
+ this._changed.deleted = true;
+ this._deleted = deleted;
}
- this._markFieldChange('deleted', !!this._deleted);
- this._changed.deleted = true;
- this._deleted = deleted;
});
@@ -2688,39 +2714,39 @@ Zotero.Item.prototype.getAttachmentLinkMode = function() {
* Possible values specified as constants in Zotero.Attachments
* (e.g. Zotero.Attachments.LINK_MODE_LINKED_FILE)
*/
-Zotero.Item.prototype.__defineGetter__('attachmentLinkMode', function () {
- if (!this.isAttachment()) {
- return undefined;
- }
- return this._attachmentLinkMode;
-});
-
-
-Zotero.Item.prototype.__defineSetter__('attachmentLinkMode', function (val) {
- if (!this.isAttachment()) {
- throw (".attachmentLinkMode can only be set for attachment items");
- }
-
- switch (val) {
- case Zotero.Attachments.LINK_MODE_IMPORTED_FILE:
- case Zotero.Attachments.LINK_MODE_IMPORTED_URL:
- case Zotero.Attachments.LINK_MODE_LINKED_FILE:
- case Zotero.Attachments.LINK_MODE_LINKED_URL:
- break;
-
- default:
- throw ("Invalid attachment link mode '" + val
- + "' in Zotero.Item.attachmentLinkMode setter");
- }
-
- if (val === this.attachmentLinkMode) {
- return;
- }
- if (!this._changed.attachmentData) {
- this._changed.attachmentData = {};
+Zotero.defineProperty(Zotero.Item.prototype, 'attachmentLinkMode', {
+ get: function() {
+ if (!this.isAttachment()) {
+ return undefined;
+ }
+ return this._attachmentLinkMode;
+ },
+ set: function(val) {
+ if (!this.isAttachment()) {
+ throw (".attachmentLinkMode can only be set for attachment items");
+ }
+
+ switch (val) {
+ case Zotero.Attachments.LINK_MODE_IMPORTED_FILE:
+ case Zotero.Attachments.LINK_MODE_IMPORTED_URL:
+ case Zotero.Attachments.LINK_MODE_LINKED_FILE:
+ case Zotero.Attachments.LINK_MODE_LINKED_URL:
+ break;
+
+ default:
+ throw ("Invalid attachment link mode '" + val
+ + "' in Zotero.Item.attachmentLinkMode setter");
+ }
+
+ if (val === this.attachmentLinkMode) {
+ return;
+ }
+ if (!this._changed.attachmentData) {
+ this._changed.attachmentData = {};
+ }
+ this._changed.attachmentData.linkMode = true;
+ this._attachmentLinkMode = val;
}
- this._changed.attachmentData.linkMode = true;
- this._attachmentLinkMode = val;
});
@@ -2729,40 +2755,42 @@ Zotero.Item.prototype.getAttachmentMIMEType = function() {
return this.attachmentContentType;
};
-Zotero.Item.prototype.__defineGetter__('attachmentMIMEType', function () {
- Zotero.debug(".attachmentMIMEType deprecated -- use .attachmentContentType");
- return this.attachmentContentType;
+Zotero.defineProperty(Zotero.Item.prototype, 'attachmentMIMEType', {
+ get: function() {
+ Zotero.debug(".attachmentMIMEType deprecated -- use .attachmentContentType");
+ return this.attachmentContentType;
+ }
});
/**
* Content type of an attachment (e.g. 'text/plain')
*/
-Zotero.Item.prototype.__defineGetter__('attachmentContentType', function () {
- if (!this.isAttachment()) {
- return undefined;
- }
- return this._attachmentContentType;
-});
-
-
-Zotero.Item.prototype.__defineSetter__('attachmentContentType', function (val) {
- if (!this.isAttachment()) {
- throw (".attachmentContentType can only be set for attachment items");
- }
-
- if (!val) {
- val = '';
- }
-
- if (val == this.attachmentContentType) {
- return;
- }
-
- if (!this._changed.attachmentData) {
- this._changed.attachmentData = {};
+Zotero.defineProperty(Zotero.Item.prototype, 'attachmentContentType', {
+ get: function() {
+ if (!this.isAttachment()) {
+ return undefined;
+ }
+ return this._attachmentContentType;
+ },
+ set: function(val) {
+ if (!this.isAttachment()) {
+ throw (".attachmentContentType can only be set for attachment items");
+ }
+
+ if (!val) {
+ val = '';
+ }
+
+ if (val == this.attachmentContentType) {
+ return;
+ }
+
+ if (!this._changed.attachmentData) {
+ this._changed.attachmentData = {};
+ }
+ this._changed.attachmentData.contentType = true;
+ this._attachmentContentType = val;
}
- this._changed.attachmentData.contentType = true;
- this._attachmentContentType = val;
});
@@ -2775,76 +2803,75 @@ Zotero.Item.prototype.getAttachmentCharset = function() {
/**
* Character set of an attachment
*/
-Zotero.Item.prototype.__defineGetter__('attachmentCharset', function () {
- if (!this.isAttachment()) {
- return undefined;
- }
- return this._attachmentCharset
-});
-
-
-Zotero.Item.prototype.__defineSetter__('attachmentCharset', function (val) {
- if (!this.isAttachment()) {
- throw (".attachmentCharset can only be set for attachment items");
- }
-
- var oldVal = this.attachmentCharset;
- if (oldVal) {
- oldVal = Zotero.CharacterSets.getID(oldVal);
- }
- if (!oldVal) {
- oldVal = null;
- }
-
- if (val) {
- val = Zotero.CharacterSets.getID(val);
- }
- if (!val) {
- val = null;
- }
-
- if (val == oldVal) {
- return;
- }
-
- if (!this._changed.attachmentData) {
- this._changed.attachmentData= {};
- }
- this._changed.attachmentData.charset = true;
- this._attachmentCharset = val;
-});
-
-
-Zotero.Item.prototype.__defineGetter__('attachmentPath', function () {
- if (!this.isAttachment()) {
- return undefined;
+Zotero.defineProperty(Zotero.Item.prototype, 'attachmentCharset', {
+ get: function() {
+ if (!this.isAttachment()) {
+ return undefined;
+ }
+ return this._attachmentCharset
+ },
+ set: function(val) {
+ if (!this.isAttachment()) {
+ throw (".attachmentCharset can only be set for attachment items");
+ }
+
+ var oldVal = this.attachmentCharset;
+ if (oldVal) {
+ oldVal = Zotero.CharacterSets.getID(oldVal);
+ }
+ if (!oldVal) {
+ oldVal = null;
+ }
+
+ if (val) {
+ val = Zotero.CharacterSets.getID(val);
+ }
+ if (!val) {
+ val = null;
+ }
+
+ if (val == oldVal) {
+ return;
+ }
+
+ if (!this._changed.attachmentData) {
+ this._changed.attachmentData= {};
+ }
+ this._changed.attachmentData.charset = true;
+ this._attachmentCharset = val;
}
- return this._attachmentPath;
});
-
-Zotero.Item.prototype.__defineSetter__('attachmentPath', function (val) {
- if (!this.isAttachment()) {
- throw (".attachmentPath can only be set for attachment items");
- }
-
- if (this.attachmentLinkMode == Zotero.Attachments.LINK_MODE_LINKED_URL) {
- throw ('attachmentPath cannot be set for link attachments');
- }
-
- if (!val) {
- val = '';
- }
-
- if (val == this.attachmentPath) {
- return;
- }
-
- if (!this._changed.attachmentData) {
- this._changed.attachmentData = {};
+Zotero.defineProperty(Zotero.Item.prototype, 'attachmentPath', {
+ get: function() {
+ if (!this.isAttachment()) {
+ return undefined;
+ }
+ return this._attachmentPath;
+ },
+ set: function(val) {
+ if (!this.isAttachment()) {
+ throw (".attachmentPath can only be set for attachment items");
+ }
+
+ if (this.attachmentLinkMode == Zotero.Attachments.LINK_MODE_LINKED_URL) {
+ throw ('attachmentPath cannot be set for link attachments');
+ }
+
+ if (!val) {
+ val = '';
+ }
+
+ if (val == this.attachmentPath) {
+ return;
+ }
+
+ if (!this._changed.attachmentData) {
+ this._changed.attachmentData = {};
+ }
+ this._changed.attachmentData.path = true;
+ this._attachmentPath = val;
}
- this._changed.attachmentData.path = true;
- this._attachmentPath = val;
});
@@ -2865,51 +2892,51 @@ Zotero.Item.prototype.updateAttachmentPath = function () {
};
-Zotero.Item.prototype.__defineGetter__('attachmentSyncState', function () {
- if (!this.isAttachment()) {
- return undefined;
- }
- return this._attachmentSyncState;
-});
-
-
-Zotero.Item.prototype.__defineSetter__('attachmentSyncState', function (val) {
- if (!this.isAttachment()) {
- throw ("attachmentSyncState can only be set for attachment items");
- }
-
- switch (this.attachmentLinkMode) {
- case Zotero.Attachments.LINK_MODE_IMPORTED_URL:
- case Zotero.Attachments.LINK_MODE_IMPORTED_FILE:
- break;
-
- default:
- throw ("attachmentSyncState can only be set for snapshots and "
- + "imported files");
- }
-
- switch (val) {
- case Zotero.Sync.Storage.SYNC_STATE_TO_UPLOAD:
- case Zotero.Sync.Storage.SYNC_STATE_TO_DOWNLOAD:
- case Zotero.Sync.Storage.SYNC_STATE_IN_SYNC:
- case Zotero.Sync.Storage.SYNC_STATE_FORCE_UPLOAD:
- case Zotero.Sync.Storage.SYNC_STATE_FORCE_DOWNLOAD:
- break;
-
- default:
- throw ("Invalid sync state '" + val
- + "' in Zotero.Item.attachmentSyncState setter");
- }
-
- if (val == this.attachmentSyncState) {
- return;
- }
-
- if (!this._changed.attachmentData) {
- this._changed.attachmentData = {};
+Zotero.defineProperty(Zotero.Item.prototype, 'attachmentSyncState', {
+ get: function() {
+ if (!this.isAttachment()) {
+ return undefined;
+ }
+ return this._attachmentSyncState;
+ },
+ set: function(val) {
+ if (!this.isAttachment()) {
+ throw ("attachmentSyncState can only be set for attachment items");
+ }
+
+ switch (this.attachmentLinkMode) {
+ case Zotero.Attachments.LINK_MODE_IMPORTED_URL:
+ case Zotero.Attachments.LINK_MODE_IMPORTED_FILE:
+ break;
+
+ default:
+ throw ("attachmentSyncState can only be set for snapshots and "
+ + "imported files");
+ }
+
+ switch (val) {
+ case Zotero.Sync.Storage.SYNC_STATE_TO_UPLOAD:
+ case Zotero.Sync.Storage.SYNC_STATE_TO_DOWNLOAD:
+ case Zotero.Sync.Storage.SYNC_STATE_IN_SYNC:
+ case Zotero.Sync.Storage.SYNC_STATE_FORCE_UPLOAD:
+ case Zotero.Sync.Storage.SYNC_STATE_FORCE_DOWNLOAD:
+ break;
+
+ default:
+ throw ("Invalid sync state '" + val
+ + "' in Zotero.Item.attachmentSyncState setter");
+ }
+
+ if (val == this.attachmentSyncState) {
+ return;
+ }
+
+ if (!this._changed.attachmentData) {
+ this._changed.attachmentData = {};
+ }
+ this._changed.attachmentData.syncState = true;
+ this._attachmentSyncState = val;
}
- this._changed.attachmentData.syncState = true;
- this._attachmentSyncState = val;
});
@@ -2922,29 +2949,31 @@ Zotero.Item.prototype.__defineSetter__('attachmentSyncState', function (val) {
* @return {Promise<Number|undefined>} File modification time as timestamp in milliseconds,
* or undefined if no file
*/
-Zotero.Item.prototype.__defineGetter__('attachmentModificationTime', Zotero.Promise.coroutine(function* () {
- if (!this.isAttachment()) {
- return undefined;
- }
-
- if (!this.id) {
- return undefined;
- }
-
- var path = yield this.getFilePathAsync();
- if (!path) {
- return undefined;
- }
-
- var fmtime = OS.File.stat(path).lastModificationDate;
-
- if (fmtime < 1) {
- Zotero.debug("File mod time " + fmtime + " is less than 1 -- interpreting as 1", 2);
- fmtime = 1;
- }
-
- return fmtime;
-}));
+Zotero.defineProperty(Zotero.Item.prototype, 'attachmentModificationTime', {
+ get: Zotero.Promise.coroutine(function* () {
+ if (!this.isAttachment()) {
+ return undefined;
+ }
+
+ if (!this.id) {
+ return undefined;
+ }
+
+ var path = yield this.getFilePathAsync();
+ if (!path) {
+ return undefined;
+ }
+
+ var fmtime = OS.File.stat(path).lastModificationDate;
+
+ if (fmtime < 1) {
+ Zotero.debug("File mod time " + fmtime + " is less than 1 -- interpreting as 1", 2);
+ fmtime = 1;
+ }
+
+ return fmtime;
+ })
+});
/**
@@ -2955,21 +2984,23 @@ Zotero.Item.prototype.__defineGetter__('attachmentModificationTime', Zotero.Prom
*
* @return {String} MD5 hash of file as hex string
*/
-Zotero.Item.prototype.__defineGetter__('attachmentHash', function () {
- if (!this.isAttachment()) {
- return undefined;
- }
-
- if (!this.id) {
- return undefined;
- }
-
- var file = this.getFile();
- if (!file) {
- return undefined;
+Zotero.defineProperty(Zotero.Item.prototype, 'attachmentHash', {
+ get: function () {
+ if (!this.isAttachment()) {
+ return undefined;
+ }
+
+ if (!this.id) {
+ return undefined;
+ }
+
+ var file = this.getFile();
+ if (!file) {
+ return undefined;
+ }
+
+ return Zotero.Utilities.Internal.md5(file) || undefined;
}
-
- return Zotero.Utilities.Internal.md5(file) || undefined;
});
@@ -2982,84 +3013,86 @@ Zotero.Item.prototype.__defineGetter__('attachmentHash', function () {
*
* @return {Promise<String>} - A promise for attachment text or empty string if unavailable
*/
-Zotero.Item.prototype.__defineGetter__('attachmentText', Zotero.Promise.coroutine(function* () {
- if (!this.isAttachment()) {
- return undefined;
- }
-
- if (!this.id) {
- return null;
- }
-
- var file = this.getFile();
-
- if (!(yield OS.File.exists(file.path))) {
- file = false;
- }
-
- var cacheFile = Zotero.Fulltext.getItemCacheFile(this);
- if (!file) {
- if (cacheFile.exists()) {
- var str = yield Zotero.File.getContentsAsync(cacheFile);
-
- return str.trim();
+Zotero.defineProperty(Zotero.Item.prototype, 'attachmentText', {
+ get: Zotero.Promise.coroutine(function* () {
+ if (!this.isAttachment()) {
+ return undefined;
}
- return '';
- }
-
- var contentType = this.attachmentContentType;
- if (!contentType) {
- contentType = yield Zotero.MIME.getMIMETypeFromFile(file);
- if (contentType) {
- this.attachmentContentType = contentType;
- yield this.save();
+
+ if (!this.id) {
+ return null;
}
- }
-
- var str;
- if (Zotero.Fulltext.isCachedMIMEType(contentType)) {
- var reindex = false;
- if (!cacheFile.exists()) {
- Zotero.debug("Regenerating item " + this.id + " full-text cache file");
- reindex = true;
+ var file = this.getFile();
+
+ if (!(yield OS.File.exists(file.path))) {
+ file = false;
}
- // Fully index item if it's not yet
- else if (!(yield Zotero.Fulltext.isFullyIndexed(this))) {
- Zotero.debug("Item " + this.id + " is not fully indexed -- caching now");
- reindex = true;
+
+ var cacheFile = Zotero.Fulltext.getItemCacheFile(this);
+ if (!file) {
+ if (cacheFile.exists()) {
+ var str = yield Zotero.File.getContentsAsync(cacheFile);
+
+ return str.trim();
+ }
+ return '';
}
- if (reindex) {
- if (!Zotero.Fulltext.pdfConverterIsRegistered()) {
- Zotero.debug("PDF converter is unavailable -- returning empty .attachmentText", 3);
+ var contentType = this.attachmentContentType;
+ if (!contentType) {
+ contentType = yield Zotero.MIME.getMIMETypeFromFile(file);
+ if (contentType) {
+ this.attachmentContentType = contentType;
+ yield this.save();
+ }
+ }
+
+ var str;
+ if (Zotero.Fulltext.isCachedMIMEType(contentType)) {
+ var reindex = false;
+
+ if (!cacheFile.exists()) {
+ Zotero.debug("Regenerating item " + this.id + " full-text cache file");
+ reindex = true;
+ }
+ // Fully index item if it's not yet
+ else if (!(yield Zotero.Fulltext.isFullyIndexed(this))) {
+ Zotero.debug("Item " + this.id + " is not fully indexed -- caching now");
+ reindex = true;
+ }
+
+ if (reindex) {
+ if (!Zotero.Fulltext.pdfConverterIsRegistered()) {
+ Zotero.debug("PDF converter is unavailable -- returning empty .attachmentText", 3);
+ return '';
+ }
+ yield Zotero.Fulltext.indexItems(this.id, false);
+ }
+
+ if (!cacheFile.exists()) {
+ Zotero.debug("Cache file doesn't exist after indexing -- returning empty .attachmentText");
return '';
}
- yield Zotero.Fulltext.indexItems(this.id, false);
+ str = yield Zotero.File.getContentsAsync(cacheFile);
}
- if (!cacheFile.exists()) {
- Zotero.debug("Cache file doesn't exist after indexing -- returning empty .attachmentText");
+ else if (contentType == 'text/html') {
+ str = yield Zotero.File.getContentsAsync(file);
+ str = Zotero.Utilities.unescapeHTML(str);
+ }
+
+ else if (contentType == 'text/plain') {
+ str = yield Zotero.File.getContentsAsync(file);
+ }
+
+ else {
return '';
}
- str = yield Zotero.File.getContentsAsync(cacheFile);
- }
-
- else if (contentType == 'text/html') {
- str = yield Zotero.File.getContentsAsync(file);
- str = Zotero.Utilities.unescapeHTML(str);
- }
-
- else if (contentType == 'text/plain') {
- str = yield Zotero.File.getContentsAsync(file);
- }
-
- else {
- return '';
- }
-
- return str.trim();
-}));
+
+ return str.trim();
+ })
+});
diff --git a/chrome/content/zotero/xpcom/search.js b/chrome/content/zotero/xpcom/search.js
@@ -62,21 +62,33 @@ Zotero.Search.prototype.setName = function(val) {
this.name = val;
}
-
-Zotero.Search.prototype.__defineGetter__('id', function () { return this._get('id'); });
-Zotero.Search.prototype.__defineSetter__('id', function (val) { this._set('id', val); });
-Zotero.Search.prototype.__defineGetter__('libraryID', function () { return this._get('libraryID'); });
-Zotero.Search.prototype.__defineSetter__('libraryID', function (val) { return this._set('libraryID', val); });
-Zotero.Search.prototype.__defineGetter__('key', function () { return this._get('key'); });
-Zotero.Search.prototype.__defineSetter__('key', function (val) { this._set('key', val) });
-Zotero.Search.prototype.__defineGetter__('name', function () { return this._get('name'); });
-Zotero.Search.prototype.__defineSetter__('name', function (val) { this._set('name', val); });
-Zotero.Search.prototype.__defineGetter__('version', function () { return this._get('version'); });
-Zotero.Search.prototype.__defineSetter__('version', function (val) { this._set('version', val); });
-Zotero.Search.prototype.__defineGetter__('synced', function () { return this._get('synced'); });
-Zotero.Search.prototype.__defineSetter__('synced', function (val) { this._set('synced', val); });
-
-Zotero.Search.prototype.__defineGetter__('conditions', function (arr) { this.getSearchConditions(); });
+Zotero.defineProperty(Zotero.Search.prototype, 'id', {
+ get: function() this._get('id'),
+ set: function(val) this._set('id', val)
+});
+Zotero.defineProperty(Zotero.Search.prototype, 'libraryID', {
+ get: function() this._get('libraryID'),
+ set: function(val) this._set('libraryID', val)
+});
+Zotero.defineProperty(Zotero.Search.prototype, 'key', {
+ get: function() this._get('key'),
+ set: function(val) this._set('key', val)
+});
+Zotero.defineProperty(Zotero.Search.prototype, 'name', {
+ get: function() this._get('name'),
+ set: function(val) this._set('name', val)
+});
+Zotero.defineProperty(Zotero.Search.prototype, 'version', {
+ get: function() this._get('version'),
+ set: function(val) this._set('version', val)
+});
+Zotero.defineProperty(Zotero.Search.prototype, 'synced', {
+ get: function() this._get('synced'),
+ set: function(val) this._set('synced', val)
+});
+Zotero.defineProperty(Zotero.Search.prototype, 'conditions', {
+ get: function() this.getSearchConditions()
+});
Zotero.Search.prototype._set = function (field, value) {
if (field == 'id' || field == 'libraryID' || field == 'key') {