diff --git a/package.json b/package.json index b67104175..3d887676a 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,6 @@ "description": "k2", "main": "", "dependencies": { - "bluebird": "3.x.x", "bunyan": "1.8.0", "bunyan-cloudwatch": "2.0.0", "bunyan-loggly": "^1.0.0", diff --git a/packages/nylas-api/routes/send.js b/packages/nylas-api/routes/send.js index 90725786c..1c7f0fae7 100644 --- a/packages/nylas-api/routes/send.js +++ b/packages/nylas-api/routes/send.js @@ -10,21 +10,6 @@ module.exports = (server) => { server.route({ method: 'POST', path: '/send', - config: { - validate: { - payload: { - subject: Joi.string(), - reply_to_message_id: Joi.number().integer(), - from: Joi.array(), - reply_to: Joi.array(), - to: Joi.array(), - cc: Joi.array(), - bcc: Joi.array(), - body: Joi.string(), - file_ids: Joi.array(), - }, - }, - }, handler: (request, reply) => { DatabaseConnector.forShared().then((db) => { const accountId = request.auth.credentials.id; db.Account.findById(accountId).then((account) => { diff --git a/packages/nylas-api/routes/threads.js b/packages/nylas-api/routes/threads.js index d785b4a46..aa6d8102d 100644 --- a/packages/nylas-api/routes/threads.js +++ b/packages/nylas-api/routes/threads.js @@ -184,16 +184,15 @@ module.exports = (server) => { }, handler: (request, reply) => { const payload = request.payload - if (payload.folder_id) { + if (payload.folder_id || payload.folder) { createSyncbackRequest(request, reply, { type: "MoveToFolder", props: { - folderId: request.payload.folder_id, + folderId: request.payload.folder_id || request.payload.folder, threadId: request.params.id, }, }) - } - if (payload.unread === false) { + } else if (payload.unread === false) { createSyncbackRequest(request, reply, { type: "MarkThreadAsRead", props: { @@ -207,8 +206,7 @@ module.exports = (server) => { threadId: request.params.id, }, }) - } - if (payload.starred === false) { + } else if (payload.starred === false) { createSyncbackRequest(request, reply, { type: "UnstarThread", props: { @@ -222,6 +220,8 @@ module.exports = (server) => { threadId: request.params.id, }, }) + } else { + reply("Invalid thread update").code(400) } }, }); diff --git a/packages/nylas-core/models/account/syncbackRequest.js b/packages/nylas-core/models/account/syncbackRequest.js index c70cf8580..007be0223 100644 --- a/packages/nylas-core/models/account/syncbackRequest.js +++ b/packages/nylas-core/models/account/syncbackRequest.js @@ -10,5 +10,17 @@ module.exports = (sequelize, Sequelize) => { }, error: JSONType('error'), props: JSONType('props'), + }, { + instanceMethods: { + toJSON: function toJSON() { + return { + id: this.id, + type: this.type, + status: this.status, + error: this.error, + props: this.props, + } + } + } }); }; diff --git a/packages/nylas-dashboard/public/css/app.css b/packages/nylas-dashboard/public/css/app.css index 2cfe5fe04..2a874590a 100644 --- a/packages/nylas-dashboard/public/css/app.css +++ b/packages/nylas-dashboard/public/css/app.css @@ -239,6 +239,12 @@ pre { font-size: 12px; } +.sum-accounts { + border-top: solid black 1px; + margin-top: 5px; + padding-top: 5px; +} + .account-filter { padding-left: 5px; } diff --git a/packages/nylas-dashboard/public/js/process-loads.jsx b/packages/nylas-dashboard/public/js/process-loads.jsx index dc412a7e8..ceb8334b3 100644 --- a/packages/nylas-dashboard/public/js/process-loads.jsx +++ b/packages/nylas-dashboard/public/js/process-loads.jsx @@ -1,30 +1,33 @@ const React = window.React; -class ProcessLoads extends React.Component { - - render() { - let entries; - if (this.props.counts == null || Object.keys(this.props.counts).length === 0) { - entries = "No Data" +function ProcessLoads(props) { + let entries; + let sumElem; + if (props.counts == null || Object.keys(props.counts).length === 0) { + entries = "No Data"; + sumElem = ""; + } else { + entries = []; + let sum = 0; + for (const processName of Object.keys(props.counts)) { + const count = props.counts[processName]; + sum += count; + entries.push( +
+ {processName}: {count} accounts +
+ ); } - else { - entries = []; - for (const processName of Object.keys(this.props.counts).sort()) { - entries.push( -
- {processName}: {this.props.counts[processName]} accounts -
- ); - } - } - - return ( -
-
Process Loads
- {entries} -
- ) + sumElem =
Total Accounts: {sum}
} + + return ( +
+
Process Loads
+ {entries} + {sumElem} +
+ ) } ProcessLoads.propTypes = { diff --git a/packages/nylas-sync/sync-worker.js b/packages/nylas-sync/sync-worker.js index 388060445..89e8ba95c 100644 --- a/packages/nylas-sync/sync-worker.js +++ b/packages/nylas-sync/sync-worker.js @@ -5,6 +5,7 @@ const { DatabaseConnector, MessageTypes, Errors, + PromiseUtils, } = require('nylas-core'); const { jsonError, @@ -137,9 +138,9 @@ class SyncWorker { syncbackMessageActions() { const where = {where: {status: "NEW"}, limit: 100}; - return this._db.SyncbackRequest.findAll(where) - .map((req) => SyncbackTaskFactory.create(this._account, req)) - .each(this.runSyncbackTask.bind(this)) + return PromiseUtils.each((this._db.SyncbackRequest.findAll(where) + .map((req) => SyncbackTaskFactory.create(this._account, req))), + this.runSyncbackTask.bind(this)) } runSyncbackTask(task) { diff --git a/packages/nylas-sync/syncback_tasks/task-helpers.js b/packages/nylas-sync/syncback_tasks/task-helpers.js index 66a8759d8..d16ccf187 100644 --- a/packages/nylas-sync/syncback_tasks/task-helpers.js +++ b/packages/nylas-sync/syncback_tasks/task-helpers.js @@ -1,10 +1,11 @@ const _ = require('underscore') +const {PromiseUtils} = require('nylas-core') const TaskHelpers = { messagesForThreadByFolder: function messagesForThreadByFolder(db, threadId) { - return db.Thread.findById(threadId).then((thread) => { + return Promise.resolve(db.Thread.findById(threadId).then((thread) => { return thread.getMessages() - }).then((messages) => { + })).then((messages) => { return _.groupBy(messages, "folderId") }) }, @@ -13,25 +14,24 @@ const TaskHelpers = { return TaskHelpers.messagesForThreadByFolder(db, threadId) .then((msgsInCategories) => { const cids = Object.keys(msgsInCategories); - return db.Folder.findAll({where: {id: cids}}) - .each((category) => - imap.openBox(category.name, {readOnly: false}).then((box) => { - return Promise.all(msgsInCategories[category.id].map((message) => + return PromiseUtils.each(db.Folder.findAll({where: {id: cids}}), (category) => + imap.openBox(category.name, {readOnly: false}).then((box) => + Promise.all(msgsInCategories[category.id].map((message) => callback({message, category, box}) )).then(() => box.closeBox()) - }) + ) ) }) }, openMessageBox: function openMessageBox({messageId, db, imap}) { - return db.Message.findById(messageId).then((message) => { + return Promise.resolve(db.Message.findById(messageId).then((message) => { return db.Folder.findById(message.folderId).then((category) => { return imap.openBox(category.name).then((box) => { return Promise.resolve({box, message}) }) }) - }) + })) }, } module.exports = TaskHelpers