💌 A beautiful, fast and fully open source mail client for Mac, Windows and Linux.
Find a file
Evan Morikawa 4237cf2bd5 refactor(send): split delivery from sent folder stuffing
Summary:
refactor multi-send

This diff started off by fixing sending with attachments.

The issue is that our `FileUploadStore` listened for
`Actions.sendDraftSuccess` as its signal to remove the files from the
.nylas temp directory. Unfortunately, the old MultiSend tasks, after
delivery of the message, would try and put the base message in the sent
folder. Since we already deleted the file from our local temp dir,
creating the base message for the sent folder would fail.

This exposed a much bigger issue which is that we don't consistently
distinguish between "delivery" of a message and any post-processing we do
(like filling the sent folder). This was leading to a variety of other
subtle issues.

For example, N1 assumes that if the SendMessage task fails, then we pop
the draft back up and ask the user to try again. Unfortunately, since we
were combining "delivery" and "post processing" it was possible for the
message to actually deliver, but fail when stuffing the sent folder, or
fail due to some other random bug. This would cause the user to send the
message twice.

To help us ensure we never "deliver" twice and handle errors more
intuitively, I separated out the two concepts.

Now there are "send" set of tasks and endpoints, and a
"EnsureMessageInSentFolder" set of tasks and endpoint (the latter used to
be ambiguously known as ReconcileMultiSend, whatever that meant)

The logic for send hasn't changed. This is mostly a renaming and moving
files around.

Test Plan: manual :(

Reviewers: jackie, juan, halla

Reviewed By: juan, halla

Differential Revision: https://phab.nylas.com/D3577
2017-01-04 15:41:35 -08:00
.ebextensions Fixes to Docker and better docs/debugging 2017-01-03 09:32:08 -08:00
arclib [local-private] move old edgehill src/pro into packages/local-private 2016-12-12 10:09:58 -05:00
packages refactor(send): split delivery from sent folder stuffing 2017-01-04 15:41:35 -08:00
scripts [*] Add basic babel toolchain 2016-12-16 13:08:21 -05:00
.arcconfig [local-private] move old edgehill src/pro into packages/local-private 2016-12-12 10:09:58 -05:00
.arclint [local-private] move old edgehill src/pro into packages/local-private 2016-12-12 10:09:58 -05:00
.babelrc [*] Add basic babel toolchain 2016-12-16 13:08:21 -05:00
.dockerignore Fixes to Docker and better docs/debugging 2017-01-03 09:32:08 -08:00
.eslintrc Fix linter issues 2016-11-21 14:00:35 -08:00
.gitignore [*] Add basic babel toolchain 2016-12-16 13:08:21 -05:00
.tern-project Enable nodejs completion with tern 2016-12-07 07:25:48 -08:00
Dockerfile [*] Add basic babel toolchain 2016-12-16 13:08:21 -05:00
lerna.json [*] update lerna to 2.0.0-beta.30 2016-12-06 16:03:31 -08:00
package.json [*] Add basic babel toolchain 2016-12-16 13:08:21 -05:00
pm2-dev.yml [cloud-api] refactor cloud API routes to use es6 & fix Gmail Auth 2016-12-19 09:25:07 -08:00
pm2-prod-api.yml [*] Add basic babel toolchain 2016-12-16 13:08:21 -05:00
pm2-prod-workers.yml [*] Add basic babel toolchain 2016-12-16 13:08:21 -05:00
README.md Readme updates 2016-11-28 14:13:23 -08:00
test_accounts.txt First step to getting persistent id in K2 2016-12-01 11:15:13 -08:00

K2 - Local Sync Engine & Cloud Services for Nylas N1

This is a collection of all sync and cloud components required to run N1.

  1. Cloud API: The cloud-based auth and metadata APIs for N1
  2. Cloud Core: Shared code used in all remote cloud services
  3. Cloud Workers: Cloud workers for services like send later
  4. Isomorphic Core: Shared code across local client and cloud servers
  5. Local Sync: The local mailsync engine integreated in Nylas N1

See /packages for the separate pieces. Each folder in /packages is designed to be its own stand-alone repositoriy. They are all bundled here for the ease of source control management.

Initial Setup for All Local & Cloud Services:

New Computer (Mac):

  1. Install Homebrew
  2. Install NVM brew install nvm
  3. Install Node 6 via NVM: nvm install 6
  4. Install Redis locally brew install redis

New Computer (Linux - Debian/Ubuntu):

  1. Install Node 6+ via NodeSource (trusted):
  2. curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
  3. sudo apt-get install -y nodejs
  4. Install Redis locally sudo apt-get install -y redis-server redis-tools benefit of letting us use subdomains.