- Reload the menu after changing keymap sets
- Do not allow accelerators in the menu like "z", because they do not go through selector-based command matching and always fire into the window.
- Do not match `cmdctrl` to both `cmd` and `ctrl` on the Mac. Just `cmd`
- Re-order `shift-delete` mapping to `core:cut`, because it causes the menu to have no binding on Mac OS X
This fixes#393.
The name "Olivia" was being caught in our parser designed to shorten "Mike Kaylor via LinkedIn" to "Mike Kaylor". We now check that "via" is it's own distinct word in the phrase.
Summary:
Can select all, deselect-all, read, unread, starred, unstarred.
Yes, it's not REALLY select "all", but it uses the items in the current
`retainedRange`. This is actually similar to what gmail does (only selects
on the first page of a 100).
Test Plan: new test
Reviewers: juan, bengotow
Reviewed By: bengotow
Differential Revision: https://phab.nylas.com/D2241
- move babelrc to static so that it can be used during the build process and also whenever the app is transpiling things on the fly.
- move babel back to version 5, which is compatible with `apm install`. (babel 6 seems to require the "dedupe" behavior of NPM3)
- update harmony-collections to use an unpublished commit that fixes the "WeakMap is not generic" issue
Summary: This diff implements Gmails "load images, always load images from bengotow@gmail.com" option. Someone asked for it late last night and I figured it'd be fun to add. We also needed to refactor the MessageItem to allow for a GPG plugin - MessageItems now subscribe to the body of the message from the messageBodyProcessor, so in the event that processing rules change, someone can invalidate the processor cache by calling `resetCache()`, and then it recomputes bodies and triggers a refresh of each message body.
Test Plan: Updated existing tests, no new tests for this plugin just yet.
Reviewers: evan, juan
Reviewed By: evan
Differential Revision: https://phab.nylas.com/D2235
Summary:
Refactor keymaps to wrap components with a <KeymapHandlers /> component.
This more Reactful way of declaring keyback handlers prevents us from
needing to subscribe to `atom.commands`
Test Plan: new tests
Reviewers: bengotow, juan
Reviewed By: bengotow
Differential Revision: https://phab.nylas.com/D2226
Summary:
We send database `trigger()` events through the ActionBrige to all windows of the app. This means that during initial sync, we're serializing, IPCing and unserializing thousands of models a minute x "N" windows.
This diff converts the payload of the trigger method into an actual class that implements a custom toJSON. It converts the impacted `objects` into a string, and doesn't deserialize them until it's asked.
Bottom line: this means that in many scenarios, we can avoid creating Contact models, etc. in composer windows only to broadcast them and then gc them.
Test Plan: No new tests yet, but this should definitel be tested. #willfix.
Reviewers: juan, evan
Reviewed By: evan
Differential Revision: https://phab.nylas.com/D2236
Summary:
- Updates support for ES6 code inside packages
- Displays system tray icon with unread count on darwin, or with bubble on other platforms
- Uses canvas api to dynamically generate icon image given unread count:
- Adds CavasUtils.canvasFromImgAndText to do this
- Adds config option to display system tray icon on darwin
Test Plan: Need to write the tests for this.
Reviewers: evan, bengotow
Reviewed By: bengotow
Differential Revision: https://phab.nylas.com/D2231
Summary:
ignores composition event commands until they're done. We then simply
update the new state after that happens.
Some additional refactoring:
- The <Contenteditable /> prop is 'value' instead of 'html' to make it
look more like a standard React controlled input
- Removed `filters` prop and `footerElements` prop from Contenteditable.
These could easily be moved into the composer (where they belong).
- Moved contenteditable and a few of its helper classes into their own
folder.
- Moved `UndoManager` up out of the `flux` folder into `src`. Currently
undo/redo is only in the composer when all contenteditables should have
the basic funcionality. Will refactor this later.
- Fix tests
Test Plan: manual
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://phab.nylas.com/D2211
Summary:
Adding signature support in preferences
Extracting out DraftStore extensions from the Contenteditable component
Moved Contenteditable to the nylas component kit
Build react remote window selection synchronization.
Test Plan: todo
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://phab.nylas.com/D2204
Summary: Replaces `new Notification`-based HTML5 notifications with system native notifications on Mac OS X. This allows us to implement the "Reply" button in the notifications. This will also serve as the hook for native Windows notifications, which are unsupported in Chromium.
Test Plan: Run tests
Reviewers: evan
Reviewed By: evan
Differential Revision: https://phab.nylas.com/D2199
Summary: Link to the changelog, and add a new notification which appears after updates are installed
Test Plan: No tests to see here..
Reviewers: evan
Reviewed By: evan
Differential Revision: https://phab.nylas.com/D2201
Summary:
The Promise chain we were creating was never cleared and created a memory
leak. We instead use a `PromiseQueue` to cleanup finished promises.
Also added several more tests and verified that the memory leak is gone
with the Chrome profiler
Test Plan: new tests
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://phab.nylas.com/D2184
Summary:
The EventStore was really doing nothing, except caching hundreds of MB of
event data unnecessarily in each and every window :(
Test Plan: manual
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://phab.nylas.com/D2187
Summary:
Fix label sorting... apparently we just synced them in creation date order
Allow labels / folders to be nested using separators `.`, `/`, and `\`
Allow collapsing of nested labels in sidebar
Add overflow hidden to some core flexboxes, which dramatically reduces repaints because it knows columns will not overflow into other columns
Prevent scroll region contents from re-rendering all the time, not sure why this works
Add test for account sidebar store
Test Plan: Run new test of AccountSidebarStore
Reviewers: evan
Reviewed By: evan
Differential Revision: https://phab.nylas.com/D2181
Summary:
This diff centralizes logic for creating common tasks for things like moving to trash, archive, etc. TaskFactory exposes a set of convenience methods and hides the whole "and also remove the current label" business from the user.
This diff also formally separates the concept of "moving to trash" and "archiving" so that "remove" isn't used in an unclear way.
I also refactored where selection is managed. Previously you'd fire some action like archiveSelection and it'd clear the selection, but if you selected some items and used another method to archive a few, they were still selected. The selection is now bound to the ModelView as intended, so if items are removed from the modelView, they are removed from it's attached selection. This means that it shouldn't /technically/ be possible to have selected items which are not in view.
I haven't refactored the tests yet. They are likely broken...
Fix next/prev logic
Test Plan: Run tests
Reviewers: evan
Reviewed By: evan
Differential Revision: https://phab.nylas.com/D2157
Summary:
This diff removes the timeout transition group from the sheet-toolbar, which was causing toolbar items to fade when columns were opened / closed and they were moved from column to column.
Instead, I'm just animating the message toolbar items, which are one of the few sets of toolbar items that really should fade, and do so as an entire set.
I've also renamed the "sheet-toolbar" animation to "opacity-125ms". I think it'd be cool to create a standard set of these animations, but I didn't see any others it would make sense to create generic names for yet. (The others have weird timings or are bound up inside packages).
Resolves Github #90
Test Plan: No new tests
Reviewers: evan
Reviewed By: evan
Differential Revision: https://phab.nylas.com/D2159
Summary:
Fixes T4291
If I made a final edit to a pre-existing draft and sent, we'd queue a
`SyncbackDraftTask` before a `SendDraftTask`. This is important because
since we have a valid draft `server_id`, the `SendDraftTask` will send by
server_id, not by POSTing the whole body.
If the `SyncbackDraftTask` fails, then we had a very serious issue whereby
the `SendDraftTask` would keep on sending. Unfortunately the server never
got the latest changes and sent the wrong version of the draft. This
incorrect version would show up later when the `/send` endpoint returned
the message that got actually sent.
The solution was to make any queued `SendDraftTask` fail if a dependent
`SyncbackDraftTask` failed.
This meant we needed to make the requirements for `shouldWaitForTask`
stricter, and block if tasks failed.
Unfortunatley there was no infrastructure in place to do this.
The first change was to change `shouldWaitForTask` to `isDependentTask`.
If we're going to fail when a dependent task fails, I wanted the method
name to reflect this.
Now, if a dependent task fails, we recursively check the dependency tree
(and check for cycles) and `dequeue` anything that needed that to succeed.
I chose `dequeue` as the default action because it seemed as though all
current uses of `shouldWaitForTask` really should bail if their
dependencies fail. It's possible you don't want your task dequeued in this
dependency case. You can return the special `Task.DO_NOT_DEQUEUE_ME`
constant from the `onDependentTaskError` method.
When a task gets dequeued because of the reason above, the
`onDependentTaskError` callback gets fired. This gives tasks like the
`SendDraftTask` a chance to notify the user that it bailed. Not all tasks
need to notify.
The next big issue was a better way to determine if a task truely errored
to the point that we need to dequeue dependencies. In the Developer Status
area we were showing tasks that had errored as "Green" because we caught
the error and resolved with `Task.Status.Finished`. This used to be fine
since nothing life-or-death cared if a task errored or not. Now that it
might cause abortions down the line, we needed a more robust method then
this.
For one I changed `Task.Status.Finished` to a variety of finish types
including `Task.Status.Success`. The way you "error" out is to `throw` or
`Promise.reject` an `Error` object from the `performRemote` method. This
allows us to propagate API errors up, and acts as a safety net that can
catch any malformed code or unexpected responses.
The developer bar now shows a much richer set of statuses instead of a
binary one, which was REALLY helpful in debugging this. We also record
when a Task got dequeued because of the conditions introduced here.
Once all this was working we still had an issue of sending old drafts.
If after a `SyncbackDraftTask` failed, now we'd block the send and notify
the users as such. However, if we tried to send again, there was a
separate issue whereby we wouldn't queue another `SyncbackDraftTask` to
update the server with the latest information. Since our changes were
persisted to the DB, we thought we had no changes, and therefore didn't
need to queue a `SyncbackDraftTask`.
The fix to this is to always force the creation of a `SyncbackDraftTask`
before send regardless of the state of the `DraftStoreProxy`.
Test Plan: new tests. Lots of manual testing
Reviewers: bengotow
Reviewed By: bengotow
Subscribers: mg
Maniphest Tasks: T4291
Differential Revision: https://phab.nylas.com/D2156
Summary:
Also added tests to catch the case
Fixes T4290
Test Plan: new tests
Reviewers: bengotow
Reviewed By: bengotow
Maniphest Tasks: T4290
Differential Revision: https://phab.nylas.com/D2153
Summary:
Fixes bug where contact ranking was not being fetched, and refactors the refreshing
of contact ranks. Moves periodic refreshing of the database-stored ranks to the sync
workers so it occurs in the background, once per account. Refactors JSON cache code
accordingly.
Test Plan: manual
Reviewers: evan, bengotow
Reviewed By: bengotow
Differential Revision: https://phab.nylas.com/D2137
Summary:
`ChaosMonkey.unleashOnAPI()` will by default cause all API requests to 500
`ChaosMonkey.unleashOnAPI(timeoutMonkey: true)` will cause all API requests
to SOCKETTIMEOUT
`ChaosMonkey.unleashOnAPI(numMonkeys: 10)` will cause the next 10 API
requests to 500
`ChaosMonkey.unleashOnAPI(errorCode: 401, numMonkeys: 10)` will cause the
next 10 API requests to 401.
It must be manually invoked from the console on each window you want the
Monkeys wrecking havok.
It is available on the `window` object as well
This was created to manually test our server failure cases.
Test Plan: manual
Reviewers: drew, bengotow
Reviewed By: bengotow
Differential Revision: https://phab.nylas.com/D2133
Summary:
Contact ranking is now tested.
There was a bug whereby the RankingsJSONCache would only update in the
workerwindow. This regressed when Contact ranking moved exclusively into
the main window and separate composer windws requested rankings via ipc
Test Plan: New tests
Reviewers: drew, bengotow
Reviewed By: bengotow
Differential Revision: https://phab.nylas.com/D2134
Summary: Move all Intercom feedback code to a package. Change the appearance of the lower right question mark icon when a new intercom message is received (red, with repeating CSS bounce animation). New messages are detected by keeping the intercom window open (after the first time it's opened by the user), and listening for DOM mutations of particular classes.
Test Plan: manual
Reviewers: bengotow
Reviewed By: bengotow
Subscribers: evan
Differential Revision: https://phab.nylas.com/D2125
Summary: Fixes Sentry 3319 and 3303
Test Plan: Run three new tests
Reviewers: dillon, evan
Reviewed By: dillon, evan
Differential Revision: https://phab.nylas.com/D2118
Summary:
Change `addAccountFromJSON` in `AccountStore` to throw an exception when it encounters
invalid data, instead of calling `atom.emitError()`. Just calling `emitError` doesn't
throw an exception, so the code proceeds as if an account has been added. Instead, call
`emitError` from AccountSettingsPage, and display an error message to the user.
Test Plan: manual
Reviewers: bengotow
Reviewed By: bengotow
Subscribers: evan
Differential Revision: https://phab.nylas.com/D2116
Summary:
fixes T4080
set the maximum default viewport size to 1440x900, the screen resolution for a 15 inch macbook pro.
if the monitor is either wider or taller than the default, then cap the dimension and center it.
Test Plan: added tests
Reviewers: evan, bengotow
Reviewed By: evan, bengotow
Maniphest Tasks: T4080
Differential Revision: https://phab.nylas.com/D2115
Summary:
It wasn't selecting the account after you added it
Fixes T3569
Test Plan: new tests
Reviewers: dillon, bengotow
Reviewed By: bengotow
Maniphest Tasks: T3569
Differential Revision: https://phab.nylas.com/D2085
Summary:
Package names must match directory names
Not going to use new Swithc component, but might as well be part of component kit
Move APMWrapper into core so it can be used from anywhere
Move manual package install coe to package-manager
Gray out window titles when in the background
Do not allow multiple onboarding windows at the same time
Finalize styling f initial-prefs and initial-packages, make it work (only github package atm)
Other nits
Change the welcome copy:
- Call it easy to extend vs easy to use
- Remove the subtitle from the first screen which doesn't really fit
- Make the second page emphasize that its created /for/ developers and easy to extend with Javascript.
- Explain what the sync engine is rather than saying it's "faster and more extensible" (??)
Test Plan: Run tests
Reviewers: evan, dillon
Reviewed By: evan
Maniphest Tasks: T3346
Differential Revision: https://phab.nylas.com/D2079
Summary: Adds a prominent blue button to email us feedback
Test Plan: Run tests
Reviewers: dillon, evan
Reviewed By: dillon, evan
Differential Revision: https://phab.nylas.com/D2081
Summary: Fixes in tabbing and css updates in composer
Test Plan: new tests
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://phab.nylas.com/D2075
- rm dead addAccount code that came back in a merge
- use command everywhere to open onboarding
- centralize close vs. quit logic in an OnboardingAction
- fix issue where the window size is calculated improperly because we have a padding value which is a fraction of height. In fact, remove no-top / padding-top 10% for good.