From 6cb67e417c96e558961d0ef367309765179a7623 Mon Sep 17 00:00:00 2001 From: Evan Morikawa Date: Wed, 29 Jun 2016 16:25:51 -0700 Subject: [PATCH] Fix to use Imap BOX and simplify move helper --- packages/nylas-core/imap-connection.js | 30 ++++++++++--------- .../syncback_tasks/move-to-folder.imap.js | 4 +-- .../nylas-sync/syncback_tasks/task-helpers.js | 27 +++++++---------- 3 files changed, 28 insertions(+), 33 deletions(-) diff --git a/packages/nylas-core/imap-connection.js b/packages/nylas-core/imap-connection.js index 79d483a2d..4be439b88 100644 --- a/packages/nylas-core/imap-connection.js +++ b/packages/nylas-core/imap-connection.js @@ -102,6 +102,22 @@ class IMAPBox { f.once('end', () => resolve(attributesByUID)); }); } + + moveFromBox(range, categoryName) { + if (!this._imap) { + throw new Error(`IMAPConnection::move - You need to call connect() first.`) + } + return this._imap.moveAsync(range, categoryName) + } + + closeBox({expunge = true} = {}) { + if (!this._imap) { + throw new Error(`IMAPConnection::closeBox - You need to call connect() first.`) + } + return this._imap.closeBoxAsync(expunge) + } + + } @@ -228,13 +244,6 @@ class IMAPConnection extends EventEmitter { ) } - closeBox({expunge = true} = {}) { - if (!this._imap) { - throw new Error(`IMAPConnection::closeBox - You need to call connect() first.`) - } - return this._imap.closeBoxAsync(expunge) - } - getBoxes() { if (!this._imap) { throw new Error(`IMAPConnection::getBoxes - You need to call connect() first.`) @@ -249,13 +258,6 @@ class IMAPConnection extends EventEmitter { return this._imap.addFlagsAsync(messageSrc, flags) } - move(messageSrc, categoryName) { - if (!this._imap) { - throw new Error(`IMAPConnection::move - You need to call connect() first.`) - } - return this._imap.moveAsync(messageSrc, categoryName) - } - runOperation(operation) { if (!this._imap) { throw new Error(`IMAPConnection::runOperation - You need to call connect() first.`) diff --git a/packages/nylas-sync/syncback_tasks/move-to-folder.imap.js b/packages/nylas-sync/syncback_tasks/move-to-folder.imap.js index af7451081..665306f62 100644 --- a/packages/nylas-sync/syncback_tasks/move-to-folder.imap.js +++ b/packages/nylas-sync/syncback_tasks/move-to-folder.imap.js @@ -10,9 +10,9 @@ class MoveToFolderIMAP extends SyncbackTask { const threadId = this.syncbackRequestObject().props.threadId const toFolderId = this.syncbackRequestObject().props.folderId - const eachMsg = ({message}) => { + const eachMsg = ({message, box}) => { return db.Category.findById(toFolderId).then((category) => { - return imap.move(message.categoryUID, category.name) + return box.moveFromBox(message.categoryUID, category.name) }) } diff --git a/packages/nylas-sync/syncback_tasks/task-helpers.js b/packages/nylas-sync/syncback_tasks/task-helpers.js index bca3d85cf..00177cb64 100644 --- a/packages/nylas-sync/syncback_tasks/task-helpers.js +++ b/packages/nylas-sync/syncback_tasks/task-helpers.js @@ -1,31 +1,24 @@ +const _ = require('underscore') + const TaskHelpers = { messagesForThreadByCategory: function messagesForThreadByCategory(db, threadId) { - const msgsInCategories = {}; - - return db.Thread.findById(threadId).then((thread) => - thread.getMessages().each((message) => { - if (!msgsInCategories[message.categoryId]) { - msgsInCategories[message.categoryId] = [message]; - } else { - msgsInCategories.push(message); - } - }) - ).then(() => msgsInCategories) + return db.Thread.findById(threadId).then((thread) => { + return thread.getMessages() + }).then((messages) => { + return _.groupBy(messages, "categoryId") + }) }, forEachMessageInThread: function forEachMessageInThread({threadId, db, imap, callback}) { - console.log("FOR EACH MESSAGE IN THREAD") return TaskHelpers.messagesForThreadByCategory(db, threadId) .then((msgsInCategories) => { const cids = Object.keys(msgsInCategories); - console.log(`Messages in categories: ${cids}`) return db.Category.findAll({where: {id: cids}}) .each((category) => - imap.openBox(category.name, {readOnly: false}).then(() => { - console.log(`Category Box open: ${category.id} | ${category.name}`); + imap.openBox(category.name, {readOnly: false}).then((box) => { return Promise.all(msgsInCategories[category.id].map((message) => - callback({message, category}) - )).then(() => imap.closeBox()) + callback({message, category, box}) + )).then(() => box.closeBox()) }) ) })