Mailspring/packages/local-sync/src/new-message-processor/index.js

31 lines
1.1 KiB
JavaScript

const detectThread = require('./detect-thread');
const extractFiles = require('./extract-files');
const extractContacts = require('./extract-contacts');
const LocalDatabaseConnector = require('../shared/local-database-connector');
const Queue = require('promise-queue');
const queue = new Queue(1, Infinity);
function processNewMessage(message, imapMessage) {
queue.add(async () => {
const {accountId} = message;
const logger = global.Logger.forAccount({id: accountId}).child({message})
const db = await LocalDatabaseConnector.forAccount(accountId);
try {
const thread = await detectThread({db, message});
message.threadId = thread.id;
await db.Message.create(message);
await extractFiles({db, message, imapMessage});
await extractContacts({db, message});
logger.info({
message_id: message.id,
uid: message.folderImapUID,
}, `MessageProcessor: Created and processed message`);
} catch (err) {
logger.error(err, `MessageProcessor: Failed`);
}
});
}
module.exports = {processNewMessage}