updated api

This commit is contained in:
Andris Reinman 2017-08-01 21:14:17 +03:00
parent 7c7a8a84e8
commit 6044abdeba
2 changed files with 59 additions and 33 deletions

View file

@ -16,11 +16,11 @@ module.exports = (db, server, messageHandler) => {
const schema = Joi.object().keys({
user: Joi.string().hex().lowercase().length(24).required(),
mailbox: Joi.string().hex().lowercase().length(24).required(),
limit: Joi.number().default(20).min(1).max(250),
order: Joi.any().allow(['asc', 'desc']).default('desc'),
next: Joi.string().alphanum().max(100),
prev: Joi.string().alphanum().max(100),
page: Joi.number().default(1)
limit: Joi.number().empty('').default(20).min(1).max(250),
order: Joi.any().empty('').allow(['asc', 'desc']).default('desc'),
next: Joi.string().empty('').alphanum().max(100),
previous: Joi.string().empty('').alphanum().max(100),
page: Joi.number().empty('').default(1)
});
req.query.user = req.params.user;
@ -44,7 +44,7 @@ module.exports = (db, server, messageHandler) => {
let limit = result.value.limit;
let page = result.value.page;
let pageNext = result.value.next;
let pagePrev = result.value.prev;
let pagePrevious = result.value.previous;
let sortAscending = result.value.order === 'asc';
db.database.collection('mailboxes').findOne({
@ -106,8 +106,8 @@ module.exports = (db, server, messageHandler) => {
if (pageNext) {
opts.next = pageNext;
} else if (pagePrev) {
opts.prev = pagePrev;
} else if (pagePrevious) {
opts.previous = pagePrevious;
}
MongoPaging.find(db.users.collection('messages'), opts, (err, result) => {
@ -142,7 +142,9 @@ module.exports = (db, server, messageHandler) => {
total,
page,
prev: prevUrl,
previousCursor: result.hasPrevious ? result.previous : false,
next: nextUrl,
nextCursor: result.hasNext ? result.next : false,
specialUse: mailboxData.specialUse,
results: (result.results || []).map(messageData => {
let parsedHeader = (messageData.mimeTree && messageData.mimeTree.parsedHeader) || {};
@ -351,13 +353,18 @@ module.exports = (db, server, messageHandler) => {
user: Joi.string().hex().lowercase().length(24).required(),
mailbox: Joi.string().hex().lowercase().length(24).required(),
message: Joi.number().min(1).required(),
replaceCidLinks: Joi.boolean().truthy(['Y', 'true', 'yes', 1]).default(false)
replaceCidLinks: Joi.boolean().truthy(['Y', 'true', 'yes', 1]).default(false),
markAsSeen: Joi.boolean().truthy(['Y', 'true', 'yes', 1]).default(false)
});
if (req.query.replaceCidLinks) {
req.params.replaceCidLinks = req.query.replaceCidLinks;
}
if (req.query.markAsSeen) {
req.params.markAsSeen = req.query.markAsSeen;
}
const result = Joi.validate(req.params, schema, {
abortEarly: false,
convert: true
@ -474,30 +481,49 @@ module.exports = (db, server, messageHandler) => {
);
}
res.json({
success: true,
id: message,
from: from[0],
replyTo,
to,
cc,
subject: messageData.subject,
messageId: messageData.msgid,
date: messageData.hdate.toISOString(),
list,
expires,
seen: !messageData.unseen,
deleted: !messageData.undeleted,
flagged: messageData.flagged,
draft: messageData.draft,
html: messageData.html,
attachments: (messageData.attachments || []).map(attachment => {
attachment.url = server.router.render('attachment', { user, mailbox, message, attachment: attachment.id });
return attachment;
}),
raw: server.router.render('attachment', { user, mailbox, message })
let ensureSeen = done => {
if (!result.value.markAsSeen || !messageData.unseen) {
return done();
}
// we need to mark this message as seen
return messageHandler.update(user, mailbox, message, { seen: true }, err => {
if (err) {
res.json({
error: err.message
});
return next();
}
messageData.unseen = false;
done();
});
};
ensureSeen(() => {
res.json({
success: true,
id: message,
from: from[0],
replyTo,
to,
cc,
subject: messageData.subject,
messageId: messageData.msgid,
date: messageData.hdate.toISOString(),
list,
expires,
seen: !messageData.unseen,
deleted: !messageData.undeleted,
flagged: messageData.flagged,
draft: messageData.draft,
html: messageData.html,
attachments: (messageData.attachments || []).map(attachment => {
attachment.url = server.router.render('attachment', { user, mailbox, message, attachment: attachment.id });
return attachment;
}),
raw: server.router.render('raw', { user, mailbox, message })
});
return next();
});
return next();
});
});

View file

@ -1141,7 +1141,7 @@ class MessageHandler {
uid: messageData.uid,
flags: messageData.flags,
message: messageData._id,
unseenChange: !!changes.unseen
unseenChange: !!changes.seen
});
if (notifyEntries.length >= consts.BULK_BATCH_SIZE) {