Commit Graph

2330 Commits (d6436de3bda3e253b7968a7e098a80f21d16debb)

Author SHA1 Message Date
Daniel Gasienica 1e04083813 Support database upgrades in `Database.open` 8 years ago
Daniel Gasienica f50ac1c99e Reduce excessive logging about database status 8 years ago
Daniel Gasienica 77b1f3c505 Replace startup with attachment background migration
Iterates through `Message::id` index.
8 years ago
Daniel Gasienica c853d1bccd Remove whole database migrations
We should enable this when we are willing to run attachment migration
on startup.
8 years ago
Daniel Gasienica 057762806e Add support for attachment background migration without index 8 years ago
Daniel Gasienica 32ac99b439 Prefer ISO date formatting
Previously, this was formatted using locale specific settings. This will allow
easier debugging by matching key rotation timestamps against log timestamps.
8 years ago
Daniel Gasienica 2e4893f4c1 Clarify implications of introducing new migrations 8 years ago
Daniel Gasienica 7413b787b6 Make `migrations` private 8 years ago
Daniel Gasienica b07c66eaa7 Generate attachments from local files
This ensures our benchmarking is closer to real-world usage, e.g. images, video,
etc. that are not compressible.
8 years ago
Daniel Gasienica 064a40544c Fix error message formatting 8 years ago
Daniel Gasienica 442f5d7295 Use `done` to match JavaScript iterators
See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators
8 years ago
Daniel Gasienica a4f0c5242f Document why batch size is one 8 years ago
Daniel Gasienica d59fdddb43 Improve `storage.fetch` error message 8 years ago
Daniel Gasienica 805031ade8 Conditionally run post-attachment migrations
Introduce placeholder migrations for Backbone models so they never implicitly
run migrations whenever they are `fetch`ed. We prefer to run our migrations
explicitly upon app startup and then let Backbone models be (slightly) dumb(er)
models, without inadvertently triggering migrations.
8 years ago
Daniel Gasienica bfbeedab5c Temporarily disable post-attachment migration migrations 8 years ago
Daniel Gasienica d9be6a0f94 Destructure Lodash `require`s 8 years ago
Daniel Gasienica b7b6195cfc Extract IIFE into separate function 8 years ago
Daniel Gasienica 11f98474ba Capture how many messages we have to process 8 years ago
Daniel Gasienica 0fdc1140dd Add `Database.getCount` function 8 years ago
Daniel Gasienica 1f8556b049 Remove unused `createCollection` 8 years ago
Daniel Gasienica c67c2a858a Remove Backbone references for attachment migration
It has to run without any other migrations interfering.
8 years ago
Daniel Gasienica 0c40f35623 Document disadvantage of fetching messages without index 8 years ago
Daniel Gasienica a4ecf1a9d6 Define constant after creating idle detector 8 years ago
Daniel Gasienica d3c9de4712 Add debug module
Lets us generate large conversations with large attachments.
8 years ago
Daniel Gasienica 30037e5308 Reduce attachment migration batch size to 1
This prevents ‘Maximum IPC message size exceeded’ due to IDB `getAll` operation.

- https://github.com/zincbase/zincdb/issues/17
- https://cs.chromium.org/chromium/src/content/browser/indexed_db/indexed_db_database.cc?q=%22Maximum+IPC+message+size+exceeded%22&sq=package:chromium&l=1160
8 years ago
Daniel Gasienica 21147a20a0 Add `sleep` module 8 years ago
Daniel Gasienica 08f73b8420 Remove last processed index after attachment migration 8 years ago
Daniel Gasienica 696a144ab7 Add `settings.deleteItem` 8 years ago
Daniel Gasienica a18e462817 Move migrations to `Signal.Migrations` 8 years ago
Daniel Gasienica 5910f84af4 Remove outdated documentation 8 years ago
Daniel Gasienica efe3cd67fc Allow attachment migration run on higher database version 8 years ago
Daniel Gasienica 921c3dba7c Skip migrations that have already been applied 8 years ago
Daniel Gasienica 417511ffd2 Add `database.getVersion` 8 years ago
Daniel Gasienica c5c94bc3ab Extract `getMigrationVersions` 8 years ago
Daniel Gasienica 6aea36240d Rename `closeDatabase` to `closeDatabaseConnection` 8 years ago
Daniel Gasienica 016432826b Extract `database` and `settings` modules 8 years ago
Daniel Gasienica 5bea894abd Close database connection via Backbone IDB adapter 8 years ago
Daniel Gasienica f50e9ae364 Log closing connection of database 8 years ago
Daniel Gasienica 4ff8bc3357 Use `camelCase` for non-constructors 8 years ago
Daniel Gasienica 3720c3f3bb Improve log message 8 years ago
Daniel Gasienica ce5b450fdb Log `targetSchemaVersion` 8 years ago
Daniel Gasienica f7f24b5822 Log total number of processed messages 8 years ago
Daniel Gasienica eca930770c Remove hard-coded database connection settings 8 years ago
Daniel Gasienica 1df6dc8378 Abort processing if there are no more messages 8 years ago
Daniel Gasienica 85490fbc98 Disable JSHint for `background.js`
It doesn’t recognize `async` and I couldn’t figure out how to ignore a top-level
`async` without cascading errors.
8 years ago
Daniel Gasienica d5d0eabdfd Remove usage of `storage` module 8 years ago
Daniel Gasienica 8966e80284 Improve identifier names 8 years ago
Daniel Gasienica 3e2d575506 Document `MessageDataMigrator` module design 8 years ago
Daniel Gasienica 3c57dbfb56 Extract `NUM_MESSAGES_PER_BATCH` 8 years ago
Daniel Gasienica 85788d3c4a Match `items` storage format to Backbone adapter 8 years ago
Daniel Gasienica 7de7fcf561 Avoid `no-param-reassign` violation 8 years ago
Daniel Gasienica 070235b59b Implement `MessageDataMigrator.processAll`
Upgrades schema of all messags upon startup.
8 years ago
Daniel Gasienica b8a0bc3423 Run attachment to disk migration on startup 8 years ago
Daniel Gasienica 178a3cc262 Reduce work for verifying transaction completion 8 years ago
Daniel Gasienica b6e978f74c Implement `MessagesDataMigrator.processAll` 8 years ago
Daniel Gasienica 457bf7ab9d Add `createCollection` function 8 years ago
Daniel Gasienica 8ea257ad4d Use double quotes for identifiers in error messages 8 years ago
Daniel Gasienica 172616ca4f Add log message for dummy migration 18 8 years ago
Daniel Gasienica 579b01283e Replace `wrapDeferred` with `deferredToPromise` 8 years ago
Daniel Gasienica 40c40c800a Prefer `exports` 8 years ago
Daniel Gasienica da144edc56 Manually close database connection after migration 8 years ago
Daniel Gasienica 106ce21c49 Remove redundant log message 8 years ago
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
- 80c7a06d5c/backbone-indexeddb.js (L558-L565)
8 years ago
Daniel Gasienica c765422fa1 Extract `deferredToPromise` 8 years ago
Daniel Gasienica e2f1339ab9 Explicitly run post-attachment migrations 8 years ago
Daniel Gasienica d7c8d33edb Extract `runMigrations` 8 years ago
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.
8 years ago
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`.
8 years ago
Daniel Gasienica 08f6886f3e Strengthen precondition of `ConversationController.getOrCreate` 8 years ago
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.
8 years ago
Daniel Gasienica 90de9d85a3 Remove type annotation 8 years ago
Daniel Gasienica 4c10fcfa17 Reduce threshold until optimization appears to 1s 8 years ago
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.
8 years ago
Daniel Gasienica add19aa732 Add initialization view 8 years ago
Daniel Gasienica f253fef5c6 Explicitly make `onDestroy` have `void` return type 8 years ago
Daniel Gasienica 9b112489cd Upgrade 2 messages every 30 seconds
This results in 4 messages per minute or 240 messages per hour.
8 years ago
Daniel Gasienica 7c2fde4433 Add `Signal.Workflow` namespace 8 years ago
Daniel Gasienica 4a7cc22de3 🎨 Use `window.requestIdleCallback` 8 years ago
Daniel Gasienica 5c9f18e1ae Wire up background message migration 8 years ago
Daniel Gasienica 4651cbc2eb Improve ``Message.upgradeSchema` preconditions 8 years ago
Daniel Gasienica ca28f3030b Add `MessageMigration` module 8 years ago
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.
8 years ago
Daniel Gasienica 09ee2d4ea2 Switch to using `requestIdleCallback`
Example:
https://developer.mozilla.org/en-US/docs/Web/API/Background_Tasks_API#Example
8 years ago
Daniel Gasienica d13668544d Rename `IdleListener` to `IdleDetector` 8 years ago
Daniel Gasienica 92ace67846 Start idle listener on startup 8 years ago
Daniel Gasienica 3140e4d66d Implement basic `IdleListener` 8 years ago
Daniel Gasienica 0c06fff47b Wire up `Message` / `Attachment` migration functions on startup
Makes `migrationContext` obsolete.
8 years ago
Daniel Gasienica 867f73b80a Use double quotes for identifiers in error messages 8 years ago
Daniel Gasienica 70cdd2b350 Add `stringToArrayBuffer` utility
This way we can avoid an extra dependency.
8 years ago
Daniel Gasienica 2ad0fd7db6 Use Lodash `omit` instead of `delete` 8 years ago
Daniel Gasienica ef2be2cf5f Make `MessageView::onUnload` synchronous
Our tests rely on that.
8 years ago
Daniel Gasienica b3251a8de2 Prevent potential NPE 8 years ago
Daniel Gasienica 9d25aa4e43 Delete attachment files on disk upon message delete 8 years ago
Daniel Gasienica 279b3f81c7 Add `Attachment.deleteData` 8 years ago
Daniel Gasienica 833a203559 Remove Vim modeline 8 years ago
Daniel Gasienica e1c1b1aa72 Load attachment data before rendering
Prevent double rendering of attachments by multiple entries into
`MessageView::render` using promises.
8 years ago
Daniel Gasienica 97e3b49a36 Whitelist `js/views/message_view.js` for ESLint 8 years ago
Daniel Gasienica b5721c2594 Remove Vim modeline 8 years ago
Daniel Gasienica 38e2468b2e Set `schemaVersion` in `handleMessage` 8 years ago
Daniel Gasienica e3dbeba963 Initialize schema version during `Message` construction 8 years ago