Commit graph

2707 commits

Author SHA1 Message Date
Ben Gotow 25349295dc fix(schedule): Use draft session to udpate metadata, always save in syncback 2016-04-11 14:32:54 -07:00
Ben Gotow ebc0072bfc fix(db): Don't blow up over table SCANs with covering indexes 2016-04-11 13:51:58 -07:00
Ben Gotow f7bfb2aceb fix(db): Counts no longer require Thread table join 2016-04-11 13:51:31 -07:00
Ben Gotow b75ed6f920 perf(db): Use subselect to improve thread list query perf (53%!)
Summary:
- Use a sub-select query with much better performance to display the thread list
- Perform analyze on tables after launch

The new query is:

```
SELECT `Thread`.`data` FROM `Thread` WHERE `Thread`.`id` IN (SELECT `id` FROM `ThreadCategory` AS `M26` WHERE `M26`.`value` IN ('9m9ks71k06n5rmx82kgues09p','9s9k25q6j1krjgpkovbcjm7d','13b7ufruoymvih07ki0uahlto','dtmhlzz6phr47zp512knhjgf8','16dvjb84bszfh15kgfrjj37i3','aclwmgncdqjfibp51bvgbeik','17qad7jhbp6tozog3klm5zagt','4x4bkbawiq825u4eu3aus8tll','7axr9f5f1lzpwm2rw2ghkirhq','dsnn660af0pmou2gg3nstga8a','361qr5rva1ieby2r0ec3sn0bm','10fyvba7pjyjgeyr5i65i1zri') AND `M26`.`in_all_mail` = 1  ORDER BY `M26`.`last_message_received_timestamp` DESC LIMIT 200 OFFSET 0) ORDER BY `Thread`.`last_message_received_timestamp` DESC;
`
0|0|0|SEARCH TABLE Thread USING INDEX Thread_id (id=?)
0|0|0|EXECUTE LIST SUBQUERY 1
1|0|0|SCAN TABLE Thread-Category AS M26 USING COVERING INDEX ThreadFancyIndex
1|0|0|EXECUTE LIST SUBQUERY 2
0|0|0|USE TEMP B-TREE FOR (only on 200 result items)
```

Which is twice as performant as:
```
SELECT `Thread`.`data` FROM `Thread` INNER JOIN `ThreadCategory` AS `M26` ON `M26`.`id` = `Thread`.`id` WHERE `M26`.`value` IN ('9m9ks71k06n5rmx82kgues09p','9s9k25q6j1krjgpkovbcjm7d','13b7ufruoymvih07ki0uahlto','dtmhlzz6phr47zp512knhjgf8','16dvjb84bszfh15kgfrjj37i3','aclwmgncdqjfibp51bvgbeik','17qad7jhbp6tozog3klm5zagt','4x4bkbawiq825u4eu3aus8tll','7axr9f5f1lzpwm2rw2ghkirhq','361qr5rva1ieby2r0ec3sn0bm','10fyvba7pjyjgeyr5i65i1zri') AND `M26`.`in_all_mail` = 1  ORDER BY `M26`.`last_message_received_timestamp` DESC LIMIT 200 OFFSET 0;

0|0|1|SCAN TABLE Thread-Category AS M26 USING COVERING INDEX ThreadFancyIndex
0|0|0|EXECUTE LIST SUBQUERY 1
0|1|0|SEARCH TABLE Thread USING INDEX Thread_id (id=?)
```

Test Plan: Broken!

Reviewers: evan, juan

Reviewed By: juan

Differential Revision: https://phab.nylas.com/D2869
2016-04-11 13:29:05 -07:00
Juan Tejada ded1b657d3 fix(thread-list): Prevent empty state from showing when loading list
- EmptyState should only be displayed when the thread-list is actually
empty, not while it is being loaded
- Update ObservableListDataSource to have a state of loaded only when
the requested range is > 0, i.e. when we are actually requesting threads
2016-04-11 13:15:59 -07:00
Ben Gotow 5e4eea2fa2 bump(version): 0.4.24 2016-04-11 12:01:47 -07:00
Ben Gotow 7183918ab2 fix(auth): Fix missing var. This is why we should go ES6! 2016-04-11 10:48:16 -07:00
Juan Tejada d9517101d5 fix(perspective): Fix specs for FocusedPerspectiveStore 2016-04-11 07:59:40 -07:00
Ben Gotow 92268ad099 fix(initial-sync): Fix sync sidebar showing all the time 2016-04-11 00:43:06 -07:00
Ben Gotow 7a7272eae8 fix(perspective): Just wait for first CategoryStore trigger to load perspective
The FocusedPerspectiveStore wants to restore a saved current perspective from disk. It needs to wait for the categories to be ready, but it doesn't necessarily need to wait for them to be synced, because it's unlikely unsynced categories are in the saved perspective and it just falls back to unified inbox.

I think there was some dead code in `_onCategoryStoreChanged` that initialized the perspective also, so I merged the two
2016-04-11 00:43:02 -07:00
Ben Gotow ca9162a2d5 bump(version): 0.4.23 2016-04-10 17:31:54 -07:00
Juan Tejada e160d05d36 fix(deps): Add moment-round 2016-04-10 16:37:33 -07:00
Juan Tejada aef785eb12 feat(thread-search): Add spinner to indicate search in progress
Summary:
- This diff also restructures the search package in a few ways:
  - Rename package to `thread-search` instead of `search-bar`
  - Move SearchQuerySubscription and SearchMailboxPerspective inside
  package. This allows SearchQuerySubscription to have access to
  SearchActions in a clean way and keeps all of the search related code
  in 1 package
  - Remove SearchMailboxPerspetcive from mailbox-perspective.coffee
- Adds temporary spinner while we get a new design for it

Test Plan: - TODO

Reviewers: evan, bengotow

Reviewed By: bengotow

Differential Revision: https://phab.nylas.com/D2868
2016-04-10 16:20:26 -07:00
Evan Morikawa 286664341b fix(scheduler): use proper start and end time formats for when block 2016-04-10 11:44:24 -04:00
Evan Morikawa 0cc3f32d8e fix(spec): fix bad ref 2016-04-09 22:07:50 -04:00
Evan Morikawa 68bb96e83f fix(scheduler): properly formatting when objects for post 2016-04-09 21:47:52 -04:00
Evan Morikawa 16e1331393 fix(scheduler): properly set proposals 2016-04-09 21:25:01 -04:00
Evan Morikawa a1b5a23273 refactor(scheduler): move all event data into metadata
Summary: Moved events into metadata. Removed a lot of code

Test Plan: todo

Reviewers: juan, bengotow

Reviewed By: bengotow

Differential Revision: https://phab.nylas.com/D2866
2016-04-09 21:19:01 -04:00
Ben Gotow f316c06f7a fix(specs): * 2016-04-08 16:03:21 -07:00
Juan Tejada b10942a4b3 update(search): Add search usage reporting + other fixes
Summary:
- Converts SearchQuerySubscription to ES6 to fix method overriding for
  `removeCallback`
- Reports different usage metrics for search
- Removes unecessary data source listener iniside ThreadListStore:
  - This listener focused the first thread on the list, which is
  actually unwanted (#1461)
  - It prevented QuerySubscriptions from being disposed promptly because
  of the remaining listener. They qould only be disposed until the
  subscription triggered once, which is not actually desired behavior
  (e.g. for SearchQuerySubscription)

Test Plan: - Manual

Reviewers: evan, bengotow

Reviewed By: bengotow

Differential Revision: https://phab.nylas.com/D2864
2016-04-08 14:11:32 -07:00
Ben Gotow c6e24ce948 fix(sync-errors): Improve display of sync errors and offline status
- Make the retry interval go 2 sec, 3.4s, 6 sec...
- Only show the connection status bar if the interval is > 5 seconds, in case the error was temporary.
- Do not show sync errors in the sidebar. The only available action is "Try Again", and we try again on our own. The error is frustrating and the user can't do anything about it anyway.
2016-04-08 13:52:26 -07:00
Drew Regitsky 2edc2e5c32 feat(auth): Provide reauth param to handle changed server endpoints
Summary:
Notify the backend when auth is a reauth of an existing account by
providing the `accountId`. This lets the backend differentiate between
a new auth (where a new account will be created if the server endpoints
don't match) and a re-auth (where the auth will fail on server endpoint
mismatch, prompting the user).

Test Plan: manual

Reviewers: juan, evan, bengotow

Reviewed By: bengotow

Subscribers: mg, spang, kav-ya

Differential Revision: https://phab.nylas.com/D2833
2016-04-08 12:00:03 -07:00
Juan Tejada 5d96fb227f feat(search-streaming): Add support for new search streaming api
Summary:
- This diff includes code to connect to the new search stremaming API. It converts the old NylasLongConnection into ES6 without any of the cursor management and includes it as part of NylasAPI
- Removes current search error handling because of the new error semantics of the api. If no results are returned a message will be displayed to the user indicating that
- WIP TODO:
  - Replace old NylasLongConnection class with new one and add test coverage.
  I did not replace our  current streaming code with the new ES6 code yet because
  the old code doesn't have test coverage and I don't want to introduce any
  (subtle) regressions to a vital piece of the app.
  - Potentially replace with JSONStreaming library or new http library
  (e.g. fetch)

- Note that Streaming API is not in production yet and only works for Gmail and IMAP (no EAS)

Test Plan: -TODO, manual

Reviewers: bengotow, evan

Reviewed By: evan

Differential Revision: https://phab.nylas.com/D2859
2016-04-08 11:47:12 -07:00
Ben Gotow 3d00837c4a fix(autoscale): Apply vw when width and height are not present 2016-04-07 18:02:04 -07:00
Juan Tejada d75e7e7fac fix(search): Escape single quotes correctly 2016-04-07 15:31:55 -07:00
Evan Morikawa 6bc42a10dc feat(scheduler): better time picker
fix(scheduler): time picker fixed
2016-04-07 15:14:33 -07:00
Jackie Luo 199a900ac1 🎨(preferences): Change spacing and button sizes 2016-04-07 14:32:51 -07:00
Ben Gotow 08792f00bd 💄(prefs): Shrink top tabs better, add min-widths 2016-04-07 14:14:20 -07:00
Ben Gotow 37add7741e bump(version): 0.4.22 2016-04-07 14:14:20 -07:00
Jackie Luo fc2b178d6e 🎨(preferences): Adjust textbox styles for signatures and templates 2016-04-07 14:12:35 -07:00
Evan Morikawa e61424b7a5 fix(tracking): uid uses draftClientId 2016-04-07 12:18:37 -07:00
Juan Tejada 76ccab606e fix(search): Escape search query properly 2016-04-07 09:57:53 -07:00
Juan Tejada c0d9915318 fix(contact-sidebar): Don't render <select> when no contacts available 2016-04-07 09:57:53 -07:00
Juan Tejada a2a3e8af3c feat(thread-search): Make thread search indexing smarter
Summary:
- When accounts change, make sure sync has completed, and only add or
remove threads from the index based on accounts that were added or
removed instead of rebuilding the entire index from scratch

- When thread is updated, make sure to only update the index for threads
that belong to accounts that are not currently in the sync process

- Add more logging and docs

Test Plan: TODO

Reviewers: evan, bengotow

Reviewed By: bengotow

Differential Revision: https://phab.nylas.com/D2852
2016-04-07 09:57:29 -07:00
Ben Gotow ba0251fd7e lint(*): Fix linter errors from QA fixes 2016-04-06 16:15:46 -07:00
Ben Gotow 4329f53ce8 fix(fwd): Do not mention Bcc'd recipeints in forward headers #1873 2016-04-06 14:51:17 -07:00
Ben Gotow 15eafa7c55 fix(autolinker): Additional test case from #1863 2016-04-06 14:29:28 -07:00
Ben Gotow f98fedadc0 fix(autolinker): Add test cases, .ly, url hash chars 2016-04-06 14:17:10 -07:00
Evan Morikawa 25b896ccbb fix(scheduler): can scheduler on 30 min intervals 2016-04-06 14:09:51 -07:00
Evan Morikawa 5311ab6b34 fix(scheduler): removes proposals from metadata when removing event
Also add <tbody> tags
2016-04-06 13:59:24 -07:00
Evan Morikawa 5140cf5f07 fix(scheduler): can remove proposed times 2016-04-06 13:59:24 -07:00
Evan Morikawa 0d4fe7e5e5 fix(scheduler): fix time bar scroll height 2016-04-06 13:59:24 -07:00
Evan Morikawa 0aa8aeb70f fix(calendar): today correctly jumps to this week 2016-04-06 13:59:24 -07:00
Evan Morikawa 6b2d820316 fix(scheduler): fix top banner 2016-04-06 13:59:24 -07:00
Ben Gotow 2226e85e65 fix(cc/bcc): Make targets bigger, wait longer before declaring focus left 2016-04-06 13:54:39 -07:00
Ben Gotow db79e4d48a fix(composer): Do not steal focus when it is in other components
This is to fix a bug where changing the "from" address to an address with a different signature caused the composer to become focused, hiding the from field.
2016-04-06 13:54:39 -07:00
Jackie Luo 53fb45aec5 🎨(preferences): Update styling 2016-04-06 13:08:44 -07:00
Ben Gotow 5c2ee75026 fix(*): Minor CSS fixes, open tracking fix when only message is draft 2016-04-06 12:35:30 -07:00
Ben Gotow 5f044c22bc fix(error): Show actual API domain in connection error bar 2016-04-06 12:35:30 -07:00
Jackie Luo 2dbd1a0914 fix(composer-emoji): Fix tabs to scroll correctly 2016-04-06 12:06:27 -07:00