Make thread counters work correctly

This commit is contained in:
Louis Laureys 2021-09-12 22:15:39 +02:00
parent 48be006eba
commit d7d73179ee

View file

@ -61,6 +61,35 @@ module.exports = (db, server, messageHandler, userHandler, storageHandler, setti
});
});
const addThreadCountersToMessageList = async (user, list) => {
const threadIdsToCount = list.map(message => message.thread);
const threadCounts = await db.database
.collection('messages')
.aggregate([
{
$match: {
user: new ObjectId(user),
thread: { $in: threadIdsToCount }
}
},
{
$group: {
_id: '$thread',
count: {
$sum: 1
}
}
}
])
.toArray();
return list.map(message => {
const matchingThreadCount = threadCounts.find(thread => thread._id.toString() === message.thread.toString());
message.threadMessageCount = matchingThreadCount ? matchingThreadCount.count : undefined
return message
});
};
const putMessageHandler = async (req, res, next) => {
res.charSet('utf-8');
@ -413,16 +442,7 @@ module.exports = (db, server, messageHandler, userHandler, storageHandler, setti
}
if (threadCounters) {
const threadIdsToFetch = listing.results.map(message => message.thread);
const threads = await db.database
.collection('threads')
.find({ _id: { $in: threadIdsToFetch } })
.toArray();
listing.results = listing.results.map(message => ({
...message,
threadEntity: threads.find(thread => thread._id.toString() === message.thread.toString())
}));
listing.results = await addThreadCountersToMessageList(user, listing.results);
}
let response = {
@ -837,16 +857,7 @@ module.exports = (db, server, messageHandler, userHandler, storageHandler, setti
}
if (threadCounters) {
const threadIdsToFetch = listing.results.map(message => message.thread);
const threads = await db.database
.collection('threads')
.find({ _id: { $in: threadIdsToFetch } })
.toArray();
listing.results = listing.results.map(message => ({
...message,
threadEntity: threads.find(thread => thread._id.toString() === message.thread.toString())
}));
listing.results = await addThreadCountersToMessageList(user, listing.results);
}
let response = {
@ -3169,7 +3180,7 @@ function formatMessageListing(messageData) {
id: messageData.uid,
mailbox: messageData.mailbox,
thread: messageData.thread,
threadMessageCount: messageData.threadEntity?.ids?.length,
threadMessageCount: messageData.threadMessageCount,
from: from && from[0],
to,
cc,