mirror of
https://github.com/Foundry376/Mailspring.git
synced 2025-10-01 00:46:54 +08:00
[local-sync] Run message processor for one message at a time
This avoids issues that arise when we process two messages on the same thread concurrently!
This commit is contained in:
parent
94722f27ab
commit
3d79f9b8be
1 changed files with 21 additions and 19 deletions
|
@ -3,27 +3,29 @@ const extractFiles = require('./extract-files')
|
||||||
const extractContacts = require('./extract-contacts')
|
const extractContacts = require('./extract-contacts')
|
||||||
const LocalDatabaseConnector = require('../shared/local-database-connector')
|
const LocalDatabaseConnector = require('../shared/local-database-connector')
|
||||||
|
|
||||||
|
const Queue = require('promise-queue');
|
||||||
|
const queue = new Queue(1, Infinity);
|
||||||
|
|
||||||
function processNewMessage(message, imapMessage) {
|
function processNewMessage(message, imapMessage) {
|
||||||
process.nextTick(() => {
|
queue.add(async () => {
|
||||||
const {accountId} = message
|
const {accountId} = message;
|
||||||
const logger = global.Logger.forAccount({id: accountId}).child({message})
|
const logger = global.Logger.forAccount({id: accountId}).child({message})
|
||||||
LocalDatabaseConnector.forAccount(accountId).then((db) => {
|
const db = await LocalDatabaseConnector.forAccount(accountId);
|
||||||
detectThread({db, message})
|
|
||||||
.then((thread) => {
|
try {
|
||||||
message.threadId = thread.id
|
const thread = await detectThread({db, message});
|
||||||
return db.Message.create(message)
|
message.threadId = thread.id;
|
||||||
})
|
await db.Message.create(message);
|
||||||
.then(() => extractFiles({db, message, imapMessage}))
|
await extractFiles({db, message, imapMessage});
|
||||||
.then(() => extractContacts({db, message}))
|
await extractContacts({db, message});
|
||||||
.then(() => {
|
logger.info({
|
||||||
logger.info({
|
message_id: message.id,
|
||||||
message_id: message.id,
|
uid: message.folderImapUID,
|
||||||
uid: message.folderImapUID,
|
}, `MessageProcessor: Created and processed message`);
|
||||||
}, `MessageProcessor: Created and processed message`)
|
} catch (err) {
|
||||||
})
|
logger.error(err, `MessageProcessor: Failed`);
|
||||||
.catch((err) => logger.error(err, `MessageProcessor: Failed`))
|
}
|
||||||
})
|
});
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {processNewMessage}
|
module.exports = {processNewMessage}
|
||||||
|
|
Loading…
Add table
Reference in a new issue