Commit Graph

3495 Commits

Author SHA1 Message Date
Daniel Gasienica d5d0eabdfd Remove usage of storage module 2018-04-02 12:17:36 -04:00
Daniel Gasienica 8966e80284 Improve identifier names 2018-04-02 12:17:36 -04:00
Daniel Gasienica 3e2d575506 Document MessageDataMigrator module design 2018-04-02 12:17:36 -04:00
Daniel Gasienica 3c57dbfb56 Extract NUM_MESSAGES_PER_BATCH 2018-04-02 12:17:36 -04:00
Daniel Gasienica 85788d3c4a Match items storage format to Backbone adapter 2018-04-02 12:17:36 -04:00
Daniel Gasienica 7de7fcf561 Avoid no-param-reassign violation 2018-04-02 12:17:36 -04:00
Daniel Gasienica 070235b59b Implement MessageDataMigrator.processAll
Upgrades schema of all messags upon startup.
2018-04-02 12:17:36 -04:00
Daniel Gasienica b8a0bc3423 Run attachment to disk migration on startup 2018-04-02 12:17:36 -04:00
Daniel Gasienica 178a3cc262 Reduce work for verifying transaction completion 2018-04-02 12:17:36 -04:00
Daniel Gasienica b6e978f74c Implement MessagesDataMigrator.processAll 2018-04-02 12:17:36 -04:00
Daniel Gasienica 457bf7ab9d Add createCollection function 2018-04-02 12:17:36 -04:00
Daniel Gasienica 8ea257ad4d Use double quotes for identifiers in error messages 2018-04-02 12:17:36 -04:00
Daniel Gasienica 172616ca4f Add log message for dummy migration 18 2018-04-02 12:17:36 -04:00
Daniel Gasienica 579b01283e Replace wrapDeferred with deferredToPromise 2018-04-02 12:17:36 -04:00
Daniel Gasienica 40c40c800a Prefer exports 2018-04-02 12:17:36 -04:00
Daniel Gasienica da144edc56 Manually close database connection after migration 2018-04-02 12:17:36 -04:00
Daniel Gasienica 106ce21c49 Remove redundant log message 2018-04-02 12:17:36 -04:00
Daniel Gasienica fcd30cd919 Close database after migration
This is not 100% reliable as database connections are closed in a separate
thread according to the documentation:
- https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase/close
- https://stackoverflow.com/a/18639298
- https://github.com/superfeedr/indexeddb-backbonejs-adapter/blob/80c7a06d5c0a75296106e9a62663230459cef857/backbone-indexeddb.js#L558-L565
2018-04-02 12:17:36 -04:00
Daniel Gasienica c765422fa1 Extract deferredToPromise 2018-04-02 12:17:36 -04:00
Daniel Gasienica e2f1339ab9 Explicitly run post-attachment migrations 2018-04-02 12:17:36 -04:00
Daniel Gasienica d7c8d33edb Extract runMigrations 2018-04-02 12:17:36 -04:00
Daniel Gasienica d16178638e Split database migrations into pre- and post-attachment migration
- Run light-weight migrations before attachment migration.
- Run regular migrations after attachments have been moved to disk.
2018-04-02 12:17:36 -04:00
Daniel Gasienica 3841154295 Relax Node.js version requirements (#2203) 2018-04-02 11:09:44 -04:00
AJ Jordan 81ac6a9031 Don't lock the Node version so strictly
This is particularly problematic because Yarn apparently
errors (not warns) if the engine doesn't match.
2018-04-02 00:42:58 -04:00
Daniel Gasienica f6d0c1f171 Fix contact overwrite in search view (#2191)
When typing in an existing phone number into the search, clicking on it even
though there exists an existing contact will reinitialize that contact’s
database entry. This reinitialization clears that contact’s conversation’s name,
unread count, etc.

This change ensures we always reuse existing conversations using
`ConversationController.getOrCreateAndWait` when starting new conversations in
the search view.
2018-03-28 14:29:33 -04:00
Daniel Gasienica b24dad23ea Fix search view conversation reset bug
When searching for an existing conversation using a phone number, it’s possible
to click on ‘Start conversation…’ and have that new dummy entry overwrite the
existing conversation.

This change ensures we are always showing a dummy conversation model that is not
part of the conversation collection. Adding it is always idempotent as it goes
through `getOrCreateAndWait`.
2018-03-27 19:54:35 -04:00
Daniel Gasienica d6ea158e46 Avoid dangerouslyCreateAndAdd in MessageView test 2018-03-27 19:52:18 -04:00
Daniel Gasienica 08f6886f3e Strengthen precondition of ConversationController.getOrCreate 2018-03-27 19:52:18 -04:00
Daniel Gasienica 83c979fb84 Rename createTemporary to dangerouslyCreateAndAdd
Class: `ConversationController`.

This function should not be used in application code as it creates potentially
invalid `Conversation` instances in our global conversation collection. We keep
making it available for testing purposes.
2018-03-27 19:52:17 -04:00
Scott Nonnenberg 4e6d1e128f Update to electron 1.8.4 (#2186) 2018-03-26 14:39:55 -07:00
Daniel Gasienica a3d43a56a7 Show Optimization Message During Database Migration (#2165) 2018-03-26 17:02:12 -04:00
Daniel Gasienica 90de9d85a3 Remove type annotation 2018-03-26 16:56:37 -04:00
Daniel Gasienica 4c10fcfa17 Reduce threshold until optimization appears to 1s 2018-03-26 16:56:37 -04:00
Daniel Gasienica dede0f1e25 Improve user messaging during initialization
- We first show a localized loading message.
- If initialization takes longer than a certain threshold, we show a different
  ‘optimization’ message.
- If initialization is below the threshold the message change is canceled right
  before the regular loading screen.
2018-03-26 16:56:37 -04:00
Daniel Gasienica add19aa732 Add initialization view 2018-03-26 16:56:37 -04:00
Daniel Gasienica 1c4b7eb01c Make namespace generation clearer
Let’s make it clear that this is where we initialize our namespaces to avoid
proliferation of various initialization points now that we support CommonJS.
2018-03-26 16:56:20 -04:00
Daniel Gasienica fb4445cbd6 Run background script after DOM is parsed
This allows us to leverage the existing loading screen for messaging without
having to explicitly wait for DOM load event.
2018-03-26 16:53:45 -04:00
Daniel Gasienica d35e365507 Upgrade Message Schema (Data) in Background (#2162)
In order to avoid incurring long startup times, we migrate message schema (data) in the background using `window.requestIdleCallback` API. The migration moves attachment data from IndexedDB to disk and reduces load on our database which may cause data loss (#1589).

On my development profile, this migration reduced the IndexedDB directory from 33.4MB to 4.7MB.
2018-03-26 16:53:01 -04:00
Daniel Gasienica f253fef5c6 Explicitly make onDestroy have void return type 2018-03-26 16:49:21 -04:00
Daniel Gasienica 9b112489cd Upgrade 2 messages every 30 seconds
This results in 4 messages per minute or 240 messages per hour.
2018-03-26 16:49:21 -04:00
Daniel Gasienica 7c2fde4433 Add Signal.Workflow namespace 2018-03-26 16:49:21 -04:00
Daniel Gasienica 4a7cc22de3 🎨 Use window.requestIdleCallback 2018-03-26 16:49:21 -04:00
Daniel Gasienica 5c9f18e1ae Wire up background message migration 2018-03-26 16:49:21 -04:00
Daniel Gasienica 4651cbc2eb Improve `Message.upgradeSchema preconditions 2018-03-26 16:49:21 -04:00
Daniel Gasienica ca28f3030b Add MessageMigration module 2018-03-26 16:49:21 -04:00
Daniel Gasienica 8e762797c0 Remove attachment validation
Turns out `fileName` is optional and maybe even `contentType`. We should revisit
this at a later point in time.
2018-03-26 16:49:21 -04:00
Daniel Gasienica 0b7ce39ff7 Remove desktop-idle dependency
We’d rather not rely on a native dependency for this functionality.
2018-03-26 16:49:21 -04:00
Daniel Gasienica 09ee2d4ea2 Switch to using requestIdleCallback
Example:
https://developer.mozilla.org/en-US/docs/Web/API/Background_Tasks_API#Example
2018-03-26 16:49:21 -04:00
Daniel Gasienica d13668544d Rename IdleListener to IdleDetector 2018-03-26 16:49:21 -04:00
Daniel Gasienica 92ace67846 Start idle listener on startup 2018-03-26 16:49:21 -04:00