From 06ad073769493f75ab828c1bc1da4eabf8cc86fd Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Thu, 4 Jan 2018 12:15:08 +0200 Subject: [PATCH] fixed #51 #52 --- lib/api/addresses.js | 18 +++++++++--------- lib/filter-handler.js | 26 +++++++++++++------------- lib/message-handler.js | 28 ++++++++++++++++++++++------ 3 files changed, 44 insertions(+), 28 deletions(-) diff --git a/lib/api/addresses.js b/lib/api/addresses.js index d0d793b..2c0525b 100644 --- a/lib/api/addresses.js +++ b/lib/api/addresses.js @@ -111,15 +111,15 @@ module.exports = (db, server) => { let pageNext = result.value.next; let pagePrevious = result.value.previous; - let filter = query - ? { - address: { - // cannot use dotless version as this would break domain search - $regex: query.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&'), - $options: '' - } - } - : {}; + let filter = + (query && { + address: { + // cannot use dotless version as this would break domain search + $regex: query.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&'), + $options: '' + } + }) || + {}; db.users.collection('addresses').count(filter, (err, total) => { if (err) { diff --git a/lib/filter-handler.js b/lib/filter-handler.js index 43b3c3c..b6b48b6 100644 --- a/lib/filter-handler.js +++ b/lib/filter-handler.js @@ -378,12 +378,13 @@ class FilterHandler { sender, recipient, - targets: forwardTargets.size - ? Array.from(forwardTargets).map(row => ({ - type: row[1].type, - value: row[1].value - })) - : false, + targets: + (forwardTargets.size && + Array.from(forwardTargets).map(row => ({ + type: row[1].type, + value: row[1].value + }))) || + false, chunks, chunklen @@ -570,13 +571,12 @@ class FilterHandler { response: err ? err : 'Message stored as ' + info.id.toString(), error: err }, - !isEncrypted - ? { - // reuse parsed values - mimeTree: messageOpts.prepared.mimeTree, - maildata: messageOpts.maildata - } - : false + (!isEncrypted && { + // reuse parsed values + mimeTree: messageOpts.prepared.mimeTree, + maildata: messageOpts.maildata + }) || + false ); }); }); diff --git a/lib/message-handler.js b/lib/message-handler.js index 6ac260b..54f00d8 100644 --- a/lib/message-handler.js +++ b/lib/message-handler.js @@ -424,7 +424,9 @@ class MessageHandler { // no need to load extra data when we only need to know the basics queryOpts.fields = { _id: true, - uid: true + uid: true, + outbound: true, + mailbox: true }; } @@ -535,7 +537,7 @@ class MessageHandler { messageData._id = messageOpts.id; messageData.uid = newUid; - messageOpts.modseq = newModseq; + messageData.modseq = newModseq; messageData.flags = messageOpts.flags; this.database.collection('messages').insertOne(messageData, err => { @@ -570,7 +572,9 @@ class MessageHandler { ignore: options.session && options.session.id, uid: existingUid, message: existingId, - unseen: messageData.unseen + unseen: messageData.unseen, + // modseq is needed to avoid updating mailbox entry + modseq: newModseq }, () => { this.notifier.addEntries( @@ -775,9 +779,19 @@ class MessageHandler { } }, { - uidNext: true + returnOriginal: false, + projection: { + _id: true, + uidNext: true + } }, - () => { + (err, item) => { + if (err) { + return callback(err); + } + + let newModseq = (item && item.value && item.value.modifyIndex) || 1; + let cursor = this.database .collection('messages') .find({ @@ -995,7 +1009,9 @@ class MessageHandler { ignore: options.session && options.session.id, uid: messageUid, message: messageId, - unseen + unseen, + // modseq is needed to avoid updating mailbox entry + modseq: newModseq }); if (options.showExpunged) {