www

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

commit 6f04b34d597f97ec5fa548bb4cce6947c7528e64
parent 56dcd6da268a5e8bcd6472e022d4ba700c9733ad
Author: Dan Stillman <dstillman@zotero.org>
Date:   Mon, 16 May 2016 18:25:35 -0400

Close #945, Optimize bulk reload on multi-item changes

Diffstat:
Mchrome/content/zotero/xpcom/data/dataObjects.js | 29++++++++++++++++++++++++++---
1 file changed, 26 insertions(+), 3 deletions(-)

diff --git a/chrome/content/zotero/xpcom/data/dataObjects.js b/chrome/content/zotero/xpcom/data/dataObjects.js @@ -654,9 +654,32 @@ Zotero.DataObjects.prototype.reload = Zotero.Promise.coroutine(function* (ids, d Zotero.debug('Reloading ' + (dataTypes ? '[' + dataTypes.join(', ') + '] for ' : '') + this._ZDO_objects + ' ' + ids); - for (let i=0; i<ids.length; i++) { - if (this._objectCache[ids[i]]) { - yield this._objectCache[ids[i]].reload(dataTypes, reloadUnchanged); + // If data types not specified, reload loaded data for each object individually. + // TODO: optimize + if (!dataTypes) { + for (let i=0; i<ids.length; i++) { + if (this._objectCache[ids[i]]) { + yield this._objectCache[ids[i]].reload(dataTypes, reloadUnchanged); + } + } + return; + } + + for (let dataType of dataTypes) { + let typeIDsByLibrary = {}; + for (let id of ids) { + let obj = this._objectCache[id]; + if (!obj || !obj._loaded[dataType] || obj._skipDataTypeLoad[dataType] + || (!reloadUnchanged && !obj._changed[dataType])) { + continue; + } + if (!typeIDsByLibrary[obj.libraryID]) { + typeIDsByLibrary[obj.libraryID] = []; + } + typeIDsByLibrary[obj.libraryID].push(id); + } + for (let libraryID in typeIDsByLibrary) { + yield this._loadDataType(dataType, parseInt(libraryID), typeIDsByLibrary[libraryID]); } }