commit 1e5090579b8e4d392119fb32db1924373f5124f3
parent d974206d6578889a6beaf7caecb997e9bec16b6d
Author: Dan Stillman <dstillman@zotero.org>
Date: Fri, 22 Apr 2016 21:13:01 -0400
Fix ordering of notifier events
I'm not sure this matters -- since it was broken, itemTreeView notify()
code probably accounts for situations where, say, a 'modify' comes in
before an 'add' -- but it might avoid some edge cases in the future.
Diffstat:
1 file changed, 20 insertions(+), 9 deletions(-)
diff --git a/chrome/content/zotero/xpcom/notifier.js b/chrome/content/zotero/xpcom/notifier.js
@@ -338,22 +338,33 @@ Zotero.Notifier = new function(){
var runQueue = [];
- function sorter(a, b) {
- return order.indexOf(b) - order.indexOf(a);
- }
- var order = ['collection', 'search', 'item', 'collection-item', 'item-tag', 'tag'];
- _queue.sort();
+ // Sort using order from array, unless missing, in which case sort after
+ var getSorter = function (orderArray) {
+ return function (a, b) {
+ var posA = orderArray.indexOf(a);
+ var posB = orderArray.indexOf(b);
+ if (posA == -1) posA = 100;
+ if (posB == -1) posB = 100;
+ return posA - posB;
+ }
+ };
+
+ var typeOrder = ['collection', 'search', 'item', 'collection-item', 'item-tag', 'tag'];
+ var eventOrder = ['add', 'modify', 'remove', 'move', 'delete', 'trash'];
+
+ var queueTypes = Object.keys(_queue);
+ queueTypes.sort(getSorter(typeOrder));
- var order = ['add', 'modify', 'remove', 'move', 'delete', 'trash'];
var totals = '';
- for (var type in _queue) {
+ for (let type of queueTypes) {
if (!runQueue[type]) {
runQueue[type] = [];
}
- _queue[type].sort();
+ let typeEvents = Object.keys(_queue[type]);
+ typeEvents.sort(getSorter(eventOrder));
- for (var event in _queue[type]) {
+ for (let event of typeEvents) {
runQueue[type][event] = {
ids: [],
data: _queue[type][event].data