Summary:
Move sync workers and Edgehill token checks to work window
Move the task queue and database setup to the work window
Move ContactStore background refresh to work window
Store the task queue in the database
WIP
The TaskQueue now puts tasks in the database instead of in a file, which also means it can be observed
Move all delta sync and initial sync to a package, make NylasSyncStore which exposes read-only sync state
DraftStore no longer reads task status. Once you set the "sending" bit on a draft, it never gets unset. But that's fine actually.
If your package lists windowTypes, you *only* get loaded in those windowTypes. If you specify no windowTypes, you get loaded in the root window.
This means that onboarding, worker-ui, worker-sync, etc. no longer get loaded into the main window
ActivitySidebar has a special little store that observes the task queue since it's no longer in the window
Move "toggle component regions" / "toggle react remote" to the Developer menu
Move sync worker specs, update draft store specs to not rely on TaskQueue at all
Test Plan: Run existing tests, all pass
Reviewers: dillon, evan
Reviewed By: evan
Differential Revision: https://phab.nylas.com/D1936
Summary: Emergency fix for broken logic consuming delta updates. Also includes specs for untested functionality.
Test Plan: Run new tests
Reviewers: dillon, evan
Reviewed By: evan
Differential Revision: https://phab.nylas.com/D1939
Summary:
Fixes T3427
Use the more generic serialize registered objects instead of the DatabaseObjectRegistry directly.
Fix a bug in the serialize function that was preventing it from inflating the top level object if it had a constructorName.
Remove contact checks because tokenizing-test-field is generic. Participant text field checks type.
Hot new drag and drop integration test
Test Plan: Run new test (<3 react)
Reviewers: dillon, evan
Reviewed By: dillon, evan
Maniphest Tasks: T3427
Differential Revision: https://phab.nylas.com/D1933
Summary:
We designed the onBeforeUnload handler to resume a "close window" event, but it actually needs to resume a quit as well. This has become an issue recently and may be due to the DraftStore sessions not being removed from the DraftStore.
To test: Create a popout draft, close it, and then try to quit the app.
Test Plan: Run updated tests
Reviewers: dillon, evan
Reviewed By: dillon, evan
Differential Revision: https://phab.nylas.com/D1932
Summary:
This diff replaces the Namespace object with the Account object, and changes all references to namespace_id => account_id, etc. The endpoints are now `/threads` instead of `/n/<id>/threads`.
This diff also adds preliminary support for multiple accounts. When you log in, we now log you in to all the attached accounts on edgehill server. From the preferences panel, you can auth with / unlink additional accounts. Shockingly, this all seems to pretty much work.
When replying to a thread, you cannot switch from addresses. However, when creating a new message in a popout composer, you can change the from address and the SaveDraftTask will delete/re-root the draft on the new account.
Search bar doesn't need to do full refresh on clear if it never committed
Allow drafts to be switched to a different account when not in reply to an existing thread
Fix edge case where ChangeMailTask throws exception if no models are modified during performLocal
Show many dots for many accounts in long polling status bar
add/remove accounts from prefs
Spec fixes!
Test Plan: Run tests, none broken!
Reviewers: evan, dillon
Reviewed By: evan, dillon
Differential Revision: https://phab.nylas.com/D1928
Summary:
Adding serialzable registry
Added DatabaseObjectRegistry
rename modelReviver to deserializeObject
Consolidate deserizlie
Get rid of model methods from Utils
DatabaseRegistry change notifications
Logic to throttle database refresh requests
Fixes in nylas-exports
Silent model setup
Continue to resolving the database setup phase for non main windows.
A packages `activate` method does not actually get called until the
DatabaseStore says that it's ready. This is necessary to ensure that a
package that introduces database changes has those schema changes take
hold before the activate happens.
However, in windows like the `onboarding` window that do not depend on a
database at all, there is no setup that is run and the promise use to
never resolve thereby making the packages never activate.
In this case, any external windows will go ahead and let their packages
activate.
Check subclass instead of instance!
Use the correct types for "messages" and "drafts"
Move Salesforce models
Proper references to Model and Attributes
Convert Salesforce stores to NylasStores and fix paths
Move database setup to DB
Test Plan: todo
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://phab.nylas.com/D1899
Summary:
Fixes T3252
When links were clicked with malformed, relative, or malicious href links
we'd perform default behavior instead of catching them.
If you have href="www.foo.bar" the browser by default thinks it's a
relative link. In our case it would prepend the full default base URI
which is file://path/to/edgehill. This would at best fail to do anything
and at worst execute an arbitrary file.
We now blacklist `file:` and check for the existence of a valid RFC 3986
schema on the URI.
Test Plan: manual
Reviewers: bengotow
Reviewed By: bengotow
Maniphest Tasks: T3252
Differential Revision: https://phab.nylas.com/D1888
Summary: @evan -- would love to get your opinion on this approach!
Test Plan: add new tests
Reviewers: evan
Reviewed By: evan
Subscribers: evan
Maniphest Tasks: T3360
Differential Revision: https://phab.nylas.com/D1904
Summary:
Things still to come:
- General tab
- Signatures tab (potentially remove and land)
Adding emacs things to gitignore
Adding progress. iterating on html/css is incredibly painful
Added layout for accounts page.
Adding layout for appearance page
layout for shortcuts preferences page
adding layount for notifications menu
Adding signatures layout
WIP
WIP - tab switching, accounts tab
WIP ALL THE THINGS
Keymap template support (Gmail / outlook, etc.)
Test Plan: No tests atm
Reviewers: evan
Differential Revision: https://phab.nylas.com/D1890
Summary: fix(service): Remove redundant tail newline when hiding previous in compose view. Fixes T2467.
Test Plan: Added a test to verify that all tail newlines are removed except one. Added another to verify that non-tail newlines aren't removed. Tweaked an existing test to make it pass.
Reviewers: bengotow
Reviewed By: bengotow
Maniphest Tasks: T2467
Differential Revision: https://phab.nylas.com/D1864
Summary: Allow 'Subject=' and 'SUBJECT=' as valid keys for 'mailto:' links.
Test Plan: Didn't break any tests, so I added a few.
Reviewers: bengotow
Reviewed By: bengotow
Maniphest Tasks: T2415
Differential Revision: https://phab.nylas.com/D1865
- It's slow, and causes performLocal to take much longer
- It's making changes we receive from the streaming API a few moments later
- We don't actually display nested folder data anywhere important
Summary:
Consolidate the smarts from ChangeFolderTask into a generic ChangeMailTask
ChangeMailTask:
- only makes requests for threads / messages that actually changed
- handles incrementing / decrementing locks
- writes changes to the database in a single pass, and only writes modified models
- encapsulates the undo state that was built into ChangeFolderTask
This change means that ChangeLabelsTask enjoys the same "smarts" as ChangeFolderTask. Label changes resulting in no-ops do not create web requests, you can undo label changes and they go back to the correct previous state.
Replace "UpdateThreadsTask" and "UpdateNylasObjectsTask" with subclasses based on the same code used for folder/labels
This means that the naming and parameter sets are consistent for all thread/message changing tasks. It also means that starring/marking as use the same (tested) business logic and starring 999 already-starred threads doesn't create 999 requests.
Go away DraftCountStore - nobody wants you in secondary windows
Add "Debug query plans" option which prints out the steps the database is taking. Look for "SCAN" to now you're having a bad time.
Make "version" field queryable, when we receive deltas/API response, find all versions of existing models in a single query without loading or parsing the objects
Contact: Add index for lookup by email
Label: add index for lookup by name
Message: Add index for message body join table
Test Plan: Run tests
Reviewers: evan
Reviewed By: evan
Differential Revision: https://phab.nylas.com/D1840
Summary:
Give UpdateThreadsTask a description method for strings like "Marked as read"
Give ChangeLabelsTask a better description method that returns shorter strings and is specific when possible
Give ChangeFolderTask a more specific description and don't assume folderOrId will always be a folder
Make it so that passive "mark as read" from the message store isn't undoable
Give the base class a description method that names the object
Change UndoRedo component CSS a bit:
- Use "inline-flexbox" with a max-width so that we can define shrinking rules on the label and Undo button (label gets ellipsis, button does not shrink at all)
- Avoid left:39%, since it assumed that the undo-redo element would be 22% of the width of the thread list, which wasn't always true. Instead, make the `undo-redo-manager` container "text-align:center", so the `undo-redo` div is always centered within it.
- Add `cursor:default` so that the user sees the pointer, not the text insertion cursor when hovering over "Undo"
- Add overflow / text-overflow so that if the message is ever too long, the user sees `...` ellipsis properly.
Test Plan: Run a few new tests
Reviewers: evan, ethanb
Reviewed By: ethanb
Differential Revision: https://phab.nylas.com/D1830
Summary:
The TokenizingTextField has several new optional props, including onEdit, which enables
editing of the tokens and tokenIsInvalid, which allows you to make tokens red, while still
accepting them as tokens.
When you go to send a message with invalid recipients it won't let you until you remove/
edit them.
Hotloading
Edit chips, keymappings not through command registry, 7 new tests for editing chips
Test Plan: Run 7 new tests
Reviewers: evan
Reviewed By: evan
Differential Revision: https://phab.nylas.com/D1825
Summary:
fix misc spec failure by making event store fetch immediately on setup
add specs for displayExtension, displayName
Test Plan: Run new tests
Reviewers: evan
Maniphest Tasks: T2387
Differential Revision: https://phab.nylas.com/D1821
Summary:
- We now build sqlite3 manually from source in script/bootstrap
- We now allow queries to run in parallel outside of transaction blocks
- When signining in and out, the main window creates the database file and then advances the database "phase", which allows all the windows to connect to the initialized database.
This diff also fixes T2411 where popout drafts opened twice, and several issues around Windows icons and install.
Test Plan: Run existing tests
Reviewers: evan
Reviewed By: evan
Maniphest Tasks: T2411
Differential Revision: https://phab.nylas.com/D1815
Summary: RSVP tile now appears for messages with attached events.
Test Plan: Tested manually. Will add unit tests
Reviewers: evan, bengotow
Reviewed By: bengotow
Differential Revision: https://phab.nylas.com/D1797
Summary: Threads are now sorted using the thread's receivedrecentdate instead of recentdate
Test Plan: Tested Manually
Reviewers: bengotow
Reviewed By: bengotow
Subscribers: mg
Differential Revision: https://phab.nylas.com/D1812
Summary:
We need to remove quoted text completely from bodies in a composer.
Unfortunately, that makes it very difficult to determine how to put it
back in.
For now the scheme is to append the quoted text at the end. However, that
means that we need to only pull out quoted text at the end of a message.
Unfortunately there are lots of places that quoted text appears inline
with regular text.
Determining whether or not some content is at the "end" of a message
turned out to be non-trivial.
We now have a new `DOMUtils` that looks for empty areas at the end.
We also have a new quoted HTML parser that finds trailing quotes.
Fixes T2335
Test Plan: lots of new quoted text tests
Reviewers: bengotow
Reviewed By: bengotow
Maniphest Tasks: T2335
Differential Revision: https://phab.nylas.com/D1773
Summary:
- You cannot drag an attachmentComponent unless it represents a fully downloaded file on disk.
- You cannot drag and drop an item from a composer onto the same composer.
- Attachments on expanded messages start downloading as soon as it's viewed (necessary for drag and dropping attachments, also probably best. Previously was just images.)
- You can now cancel an attachment download. Was really broken.
Test Plan: Run many new specs!
Reviewers: evan
Reviewed By: evan
Maniphest Tasks: T1196
Differential Revision: https://phab.nylas.com/D1764
Summary: The diff adds very basic versioning to the database via sqlite's built-in `user_version`. If the version is bumped in DatabaseStore, it means that all existing data should be blown away and the user should have to refetch the entire cache. Critically, this does not log the user out.
Test Plan: Run no new tests :-(
Reviewers: evan
Reviewed By: evan
Differential Revision: https://phab.nylas.com/D1760
Summary:
There are now two objects, Folders & Labels. These inherit from `Category`
(that's what Eben said they were using on the backend).
There are two separate tasks.
1. MoveToFolderTask
2. ApplyLabelsTask
It turns out that the semantics between the two are quite different.
The reverse operation for moving to a folder is a bit tricky.
As of 7-8-15, the Tasks are pretty much complete. I need to write tests
for them still and do some manual testing in the client.
Test Plan: Writing specs
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://phab.nylas.com/D1724