mirror of
https://github.com/nodemailer/wildduck.git
synced 2024-09-20 15:26:03 +08:00
keep an index of POP3 messages to show
This commit is contained in:
parent
01463cf386
commit
d7de6fadd4
25
pop3.js
25
pop3.js
|
@ -107,11 +107,17 @@ const serverOptions = {
|
|||
|
||||
session.user.mailbox = mailbox._id;
|
||||
|
||||
db.redis.hget('pop3uid', mailbox._id.toString(), (err, lastIndex) => {
|
||||
let query = {
|
||||
mailbox: mailbox._id
|
||||
};
|
||||
if (!err && lastIndex && !isNaN(lastIndex)) {
|
||||
query.uid = { $gte: Number(lastIndex) };
|
||||
}
|
||||
|
||||
db.database
|
||||
.collection('messages')
|
||||
.find({
|
||||
mailbox: mailbox._id
|
||||
})
|
||||
.find(query)
|
||||
.project({
|
||||
uid: true,
|
||||
size: true,
|
||||
|
@ -127,6 +133,17 @@ const serverOptions = {
|
|||
return callback(err);
|
||||
}
|
||||
|
||||
let updateUIDIndex = done => {
|
||||
// first is the newest, last the oldest
|
||||
let oldestMessageData = messages && messages.length && messages[messages.length - 1];
|
||||
if (oldestMessageData || !oldestMessageData.uid) {
|
||||
return done();
|
||||
}
|
||||
// try to update index, ignore result
|
||||
db.redis.hset('pop3uid', mailbox._id.toString(), oldestMessageData.uid, done);
|
||||
};
|
||||
|
||||
updateUIDIndex(() => {
|
||||
return callback(null, {
|
||||
messages: messages
|
||||
// show older first
|
||||
|
@ -144,6 +161,8 @@ const serverOptions = {
|
|||
size: messages.reduce((acc, message) => acc + message.size, 0)
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
);
|
||||
},
|
||||
|
|
Loading…
Reference in a new issue