From 8ff258fe03852cf358b2f54aa54db50103fd2347 Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Sat, 25 Apr 2015 03:12:19 -0400 Subject: [PATCH] Don't require parent item to be loaded when setting item parent --- chrome/content/zotero/xpcom/data/item.js | 68 ++++++++++++------------ 1 file changed, 35 insertions(+), 33 deletions(-) diff --git a/chrome/content/zotero/xpcom/data/item.js b/chrome/content/zotero/xpcom/data/item.js index 0ddabd8378..bf7ec11dd0 100644 --- a/chrome/content/zotero/xpcom/data/item.js +++ b/chrome/content/zotero/xpcom/data/item.js @@ -1338,24 +1338,24 @@ Zotero.Item.prototype._saveData = Zotero.Promise.coroutine(function* (env) { } // Parent item - let parentItem = this.parentKey; - parentItem = parentItem ? this.ObjectsClass.getByLibraryAndKey(this.libraryID, parentItem) : null; + var parentItemKey = this.parentKey; + var parentItemID = this.ObjectsClass.getIDFromLibraryAndKey(this.libraryID, parentItemKey) || null; if (this._changed.parentKey) { if (isNew) { - if (!parentItem) { + if (!parentItemID) { // TODO: clear caches? - let msg = this._parentKey + " is not a valid item key"; + let msg = parentItemKey + " is not a valid item key"; throw new Zotero.Error(msg, "MISSING_OBJECT"); } let newParentItemNotifierData = {}; //newParentItemNotifierData[newParentItem.id] = {}; - Zotero.Notifier.trigger('modify', 'item', parentItem.id, newParentItemNotifierData); + Zotero.Notifier.trigger('modify', 'item', parentItemID, newParentItemNotifierData); switch (Zotero.ItemTypes.getName(itemTypeID)) { case 'note': case 'attachment': - reloadParentChildItems[parentItem.id] = true; + reloadParentChildItems[parentItemID] = true; break; } } @@ -1363,25 +1363,25 @@ Zotero.Item.prototype._saveData = Zotero.Promise.coroutine(function* (env) { let type = Zotero.ItemTypes.getName(itemTypeID); let Type = type[0].toUpperCase() + type.substr(1); - if (this._parentKey) { - if (!parentItem) { + if (parentItemKey) { + if (!parentItemID) { // TODO: clear caches - let msg = "Cannot set source to invalid item " + this._parentKey; + let msg = "Cannot set source to invalid item " + parentItemKey; throw new Zotero.Error(msg, "MISSING_OBJECT"); } let newParentItemNotifierData = {}; //newParentItemNotifierData[newParentItem.id] = {}; - Zotero.Notifier.trigger('modify', 'item', parentItem.id, newParentItemNotifierData); + Zotero.Notifier.trigger('modify', 'item', parentItemID, newParentItemNotifierData); } - var oldParentKey = this._previousData.parentKey; + let oldParentKey = this._previousData.parentKey; if (oldParentKey) { - var oldParentItem = this.ObjectsClass.getByLibraryAndKey(this.libraryID, oldParentKey); - if (oldParentItem) { + let oldParentItemID = this.ObjectsClass.getIDFromLibraryAndKey(this.libraryID, oldParentKey); + if (oldParentItemID) { let oldParentItemNotifierData = {}; - //oldParentItemNotifierData[oldParentItem.id] = {}; - Zotero.Notifier.trigger('modify', 'item', oldParentItem.id, oldParentItemNotifierData); + //oldParentItemNotifierData[oldParentItemID] = {}; + Zotero.Notifier.trigger('modify', 'item', oldParentItemID, oldParentItemNotifierData); } else { Zotero.debug("Old source item " + oldParentKey @@ -1394,7 +1394,10 @@ Zotero.Item.prototype._saveData = Zotero.Promise.coroutine(function* (env) { if (!oldParentKey) { let sql = "SELECT collectionID FROM collectionItems WHERE itemID=?"; let changedCollections = yield Zotero.DB.columnQueryAsync(sql, this.id); - if (changedCollections) { + if (changedCollections.length) { + let parentItem = yield this.ObjectsClass.getByLibraryAndKeyAsync( + this.libraryID, oldParentKey + ) for (let i=0; i