Julian Lam 9 years ago
parent 8c84ce9914
commit 64efe541f5

@ -340,7 +340,7 @@ var async = require('async'),
'notifications:user_posted_to', 'notifications:user_posted_to',
'notifications:user_flagged_post_in' 'notifications:user_flagged_post_in'
], ],
isolated, differentiator, modifyIndex; isolated, differentiators, differentiator, modifyIndex, set;
notifications = mergeIds.reduce(function(notifications, mergeId) { notifications = mergeIds.reduce(function(notifications, mergeId) {
isolated = notifications.filter(function(notifObj) { isolated = notifications.filter(function(notifObj) {
@ -355,34 +355,54 @@ var async = require('async'),
return notifications; // Nothing to merge return notifications; // Nothing to merge
} }
differentiator = isolated[0].mergeId.split('|')[1]; // Each isolated mergeId may have multiple differentiators, so process each separately
differentiators = isolated.reduce(function(cur, next) {
differentiator = next.mergeId.split('|')[1];
if (cur.indexOf(differentiator) === -1) {
cur.push(differentiator);
}
modifyIndex = notifications.indexOf(isolated[0]); return cur;
}, []);
switch(mergeId) { differentiators.forEach(function(differentiator) {
case 'notifications:favourited_your_post_in': // intentional fall-through set = isolated.filter(function(notifObj) {
case 'notifications:upvoted_your_post_in': return notifObj.mergeId === (mergeId + '|' + differentiator);
case 'notifications:user_started_following_you': });
case 'notifications:user_posted_to': modifyIndex = notifications.indexOf(set[0]);
case 'notifications:user_flagged_post_in': if (modifyIndex === -1) {
var usernames = isolated.map(function(notifObj) { return notifications;
return notifObj.user.username; }
});
var numUsers = usernames.length;
// Update bodyShort switch(mergeId) {
if (numUsers === 2) { case 'notifications:favourited_your_post_in': // intentional fall-through
isolated[0].bodyShort = '[[' + mergeId + '_dual, ' + usernames.join(', ') + ', ' + isolated[0].topicTitle + ']]' case 'notifications:upvoted_your_post_in':
} else { case 'notifications:user_started_following_you':
isolated[0].bodyShort = '[[' + mergeId + '_multiple, ' + usernames[0] + ', ' + (numUsers-1) + ', ' + isolated[0].topicTitle + ']]' case 'notifications:user_posted_to':
} case 'notifications:user_flagged_post_in':
break; var usernames = set.map(function(notifObj) {
} return notifObj.user.username;
});
var numUsers = usernames.length;
// Update bodyShort
if (numUsers === 2) {
notifications[modifyIndex].bodyShort = '[[' + mergeId + '_dual, ' + usernames.join(', ') + ', ' + notifications[modifyIndex].topicTitle + ']]'
} else {
notifications[modifyIndex].bodyShort = '[[' + mergeId + '_multiple, ' + usernames[0] + ', ' + (numUsers-1) + ', ' + notifications[modifyIndex].topicTitle + ']]'
}
break;
}
// Filter out duplicates // Filter out duplicates
return notifications.filter(function(notifObj, idx) { notifications = notifications.filter(function(notifObj, idx) {
return notifObj.mergeId !== mergeId + '|' + differentiator || idx === modifyIndex; if (notifObj.mergeId === (mergeId + '|' + differentiator) && idx !== modifyIndex) {
}
return !(notifObj.mergeId === (mergeId + '|' + differentiator) && idx !== modifyIndex);
});
}); });
return notifications;
}, notifications); }, notifications);
plugins.fireHook('filter:notifications.merge', { plugins.fireHook('filter:notifications.merge', {

Loading…
Cancel
Save