mirror of
https://github.com/nodemailer/wildduck.git
synced 2025-10-24 04:42:58 +08:00
use index for sorting
This commit is contained in:
parent
3ad81e4fa9
commit
e42a128ee6
4 changed files with 32 additions and 29 deletions
28
api.js
28
api.js
|
|
@ -732,9 +732,10 @@ server.get('/mailbox/:id', (req, res, next) => {
|
|||
mailbox: mailbox._id
|
||||
};
|
||||
let reverse = false;
|
||||
let sort = {
|
||||
uid: -1
|
||||
};
|
||||
let sort = [
|
||||
['mailbox', 1],
|
||||
['uid', -1]
|
||||
];
|
||||
|
||||
if (req.params.before) {
|
||||
query.uid = {
|
||||
|
|
@ -744,9 +745,10 @@ server.get('/mailbox/:id', (req, res, next) => {
|
|||
query.uid = {
|
||||
$gt: after
|
||||
};
|
||||
sort = {
|
||||
uid: 1
|
||||
};
|
||||
sort = [
|
||||
['mailbox', 1],
|
||||
['uid', 1]
|
||||
];
|
||||
reverse = true;
|
||||
}
|
||||
|
||||
|
|
@ -756,9 +758,10 @@ server.get('/mailbox/:id', (req, res, next) => {
|
|||
fields: {
|
||||
uid: true
|
||||
},
|
||||
sort: {
|
||||
uid: -1
|
||||
}
|
||||
sort: [
|
||||
['mailbox', 1],
|
||||
['uid', -1]
|
||||
]
|
||||
}, (err, entry) => {
|
||||
if (err) {
|
||||
res.json({
|
||||
|
|
@ -790,9 +793,10 @@ server.get('/mailbox/:id', (req, res, next) => {
|
|||
fields: {
|
||||
uid: true
|
||||
},
|
||||
sort: {
|
||||
uid: 1
|
||||
}
|
||||
sort: [
|
||||
['mailbox', 1],
|
||||
['uid', 1]
|
||||
]
|
||||
}, (err, entry) => {
|
||||
if (err) {
|
||||
res.json({
|
||||
|
|
|
|||
7
imap.js
7
imap.js
|
|
@ -319,6 +319,7 @@ server.onOpen = function (path, session, callback) {
|
|||
}).project({
|
||||
uid: true
|
||||
}).sort([
|
||||
['mailbox', 1],
|
||||
['uid', 1]
|
||||
]).toArray((err, messages) => {
|
||||
if (err) {
|
||||
|
|
@ -476,6 +477,7 @@ server.onStore = function (path, update, session, callback) {
|
|||
uid: true,
|
||||
flags: true
|
||||
}).sort([
|
||||
['mailbox', 1],
|
||||
['uid', 1]
|
||||
]);
|
||||
|
||||
|
|
@ -661,6 +663,7 @@ server.onExpunge = function (path, update, session, callback) {
|
|||
uid: true,
|
||||
size: true
|
||||
}).sort([
|
||||
['mailbox', 1],
|
||||
['uid', 1]
|
||||
]);
|
||||
|
||||
|
|
@ -781,6 +784,7 @@ server.onCopy = function (path, update, session, callback) {
|
|||
$in: update.messages
|
||||
}
|
||||
}).sort([
|
||||
['mailbox', 1],
|
||||
['uid', 1]
|
||||
]); // no projection as we need to copy the entire message
|
||||
|
||||
|
|
@ -925,6 +929,7 @@ server.onMove = function (path, update, session, callback) {
|
|||
}).project({
|
||||
uid: 1
|
||||
}).sort([
|
||||
['mailbox', 1],
|
||||
['uid', 1]
|
||||
]);
|
||||
|
||||
|
|
@ -1064,6 +1069,7 @@ server.onFetch = function (path, options, session, callback) {
|
|||
}
|
||||
|
||||
let cursor = db.database.collection('messages').find(query).project(projection).sort([
|
||||
['mailbox', 1],
|
||||
['uid', 1]
|
||||
]);
|
||||
|
||||
|
|
@ -1429,6 +1435,7 @@ server.onSearch = function (path, options, session, callback) {
|
|||
let cursor = db.database.collection('messages').find(query).
|
||||
project(projection).
|
||||
sort([
|
||||
['mailbox', 1],
|
||||
['uid', 1]
|
||||
]);
|
||||
|
||||
|
|
|
|||
|
|
@ -279,12 +279,12 @@ class ImapNotifier extends EventEmitter {
|
|||
modseq: {
|
||||
$gt: modifyIndex
|
||||
}
|
||||
}).sort({
|
||||
modseq: 1
|
||||
}).toArray(callback);
|
||||
}).sort([
|
||||
['mailbox', 1],
|
||||
['modseq', 1]
|
||||
]).toArray(callback);
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = ImapNotifier;
|
||||
|
|
|
|||
|
|
@ -122,8 +122,7 @@ class MessageHandler {
|
|||
_id: mailbox.user
|
||||
}, {
|
||||
$inc: {
|
||||
storageUsed: size,
|
||||
messages: 1
|
||||
storageUsed: size
|
||||
}
|
||||
}, err => {
|
||||
if (err) {
|
||||
|
|
@ -136,8 +135,7 @@ class MessageHandler {
|
|||
_id: mailbox.user
|
||||
}, {
|
||||
$inc: {
|
||||
storageUsed: -size,
|
||||
messages: -1
|
||||
storageUsed: -size
|
||||
}
|
||||
}, () => {
|
||||
this.redlock.releaseLock(lock, () => callback(err));
|
||||
|
|
@ -253,24 +251,19 @@ class MessageHandler {
|
|||
|
||||
updateQuota(mailbox, inc, callback) {
|
||||
inc = inc || {};
|
||||
if (!inc.messages) {
|
||||
return callback();
|
||||
}
|
||||
|
||||
this.database.collection('mailboxes').findOneAndUpdate({
|
||||
_id: mailbox._id
|
||||
}, {
|
||||
$inc: {
|
||||
storageUsed: Number(inc.storageUsed) || 0,
|
||||
messages: Number(inc.messages) || 0
|
||||
storageUsed: Number(inc.storageUsed) || 0
|
||||
}
|
||||
}, () => {
|
||||
this.database.collection('users').findOneAndUpdate({
|
||||
_id: mailbox.user
|
||||
}, {
|
||||
$inc: {
|
||||
storageUsed: Number(inc.storageUsed) || 0,
|
||||
messages: Number(inc.messages) || 0
|
||||
storageUsed: Number(inc.storageUsed) || 0
|
||||
}
|
||||
}, callback);
|
||||
});
|
||||
|
|
@ -305,8 +298,7 @@ class MessageHandler {
|
|||
}
|
||||
|
||||
this.updateQuota(mailbox, {
|
||||
storageUsed: -message.size,
|
||||
messages: -1
|
||||
storageUsed: -message.size
|
||||
}, () => {
|
||||
// remove link to message from attachments (if any exist)
|
||||
this.database.collection('attachments.files').updateMany({
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue