Commit Graph

3451 Commits (ca28f3030b75aece34ee2ad74700f860f74ebd95)
 

Author SHA1 Message Date
Daniel Gasienica ca28f3030b Add `MessageMigration` module 7 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.
7 years ago
Daniel Gasienica 0b7ce39ff7 Remove `desktop-idle` dependency
We’d rather not rely on a native dependency for this functionality.
7 years ago
Daniel Gasienica 09ee2d4ea2 Switch to using `requestIdleCallback`
Example:
https://developer.mozilla.org/en-US/docs/Web/API/Background_Tasks_API#Example
7 years ago
Daniel Gasienica d13668544d Rename `IdleListener` to `IdleDetector` 7 years ago
Daniel Gasienica 92ace67846 Start idle listener on startup 7 years ago
Daniel Gasienica 3140e4d66d Implement basic `IdleListener` 7 years ago
Daniel Gasienica ca2afdc202 Add `desktop-idle` dependency 7 years ago
Daniel Gasienica 2e9f3bcf8d Migrate attachments from IndexedDB to file system (#2129)
- [x] Generate random file names.
- [x] Generate random file paths that prevent too many files per folder using
      fan-out.
- [x] Create attachment directory in user data folder.
- [x] Investigate operating system file indexing on:
  - [x] Windows: Confirmed that `AppData` is not indexed by default.
  - [x] macOS: Confirmed that `~/Library` files are not indexed by default.
        Searching system files using Spotlight requires multi-step opt-in:
        https://lifehacker.com/5711409/how-to-search-for-hidden-packaged-and-system-files-in-os-x.
        More info https://apple.stackexchange.com/a/92785.
        Added `.noindex` suffix to `attachments` folder.
  - [x] Linux: n/a
- [x] Save incoming attachment files to disk
  - [x] On received
  - [x] On sync
- [x] Save outgoing attachments files to disk before sending
- [x] Display attachments either from disk or memory in attachment view.
      Be robust to multiple render passes.
  - [x] Test that missing attachment on disk doesn’t break app.
        Behavior: Message is displayed without attachment.
- [x] Delete attachment files when message is deleted.

Relates to #1589.
7 years ago
Daniel Gasienica 7eaa6ef2f7 Remove `string-to-arraybuffer` dependency
The function is simple enough to inline and this allows us to reduce our
dependencies surface area.
7 years ago
Daniel Gasienica 0c06fff47b Wire up `Message` / `Attachment` migration functions on startup
Makes `migrationContext` obsolete.
7 years ago
Daniel Gasienica 867f73b80a Use double quotes for identifiers in error messages 7 years ago
Daniel Gasienica 06e7bca276 Use new `stringToArrayBuffer` function 7 years ago
Daniel Gasienica 70cdd2b350 Add `stringToArrayBuffer` utility
This way we can avoid an extra dependency.
7 years ago
Daniel Gasienica 232e906650 Remove `tmp` as dev dependency 7 years ago
Daniel Gasienica 2ad0fd7db6 Use Lodash `omit` instead of `delete` 7 years ago
Daniel Gasienica ef2be2cf5f Make `MessageView::onUnload` synchronous
Our tests rely on that.
7 years ago
Daniel Gasienica add5d4ab0b Prevent macOS Spotlight indexing of attachments folder
See: https://apple.stackexchange.com/a/92785
7 years ago
Daniel Gasienica b3251a8de2 Prevent potential NPE 7 years ago
Daniel Gasienica 9d25aa4e43 Delete attachment files on disk upon message delete 7 years ago
Daniel Gasienica 279b3f81c7 Add `Attachment.deleteData` 7 years ago
Daniel Gasienica 10afcf1bb0 Add `Attachments.deleteData` 7 years ago
Daniel Gasienica 9b636a1885 Add test for `Attachments.readData` 7 years ago
Daniel Gasienica f6f0359a61 Use `assert.deepEqual` instead of Lodash `isEqual` 7 years ago
Daniel Gasienica 833a203559 Remove Vim modeline 7 years ago
Daniel Gasienica aba261122f 🎨 Use `camelCase` for mutable variable 7 years ago
Daniel Gasienica e1c1b1aa72 Load attachment data before rendering
Prevent double rendering of attachments by multiple entries into
`MessageView::render` using promises.
7 years ago
Daniel Gasienica 97e3b49a36 Whitelist `js/views/message_view.js` for ESLint 7 years ago
Daniel Gasienica b5721c2594 Remove Vim modeline 7 years ago
Daniel Gasienica f031ac3126 Remove duplicate ESLint ignore entry 7 years ago
Daniel Gasienica 38e2468b2e Set `schemaVersion` in `handleMessage` 7 years ago
Daniel Gasienica e3dbeba963 Initialize schema version during `Message` construction 7 years ago
Daniel Gasienica 9a540d6d18 Load attachment data before sending message 7 years ago
Daniel Gasienica 1c8123ff1a Move `writeAttachmentData` into `Attachments`
Encapsulates all attachment operations that require Node.js / Electron APIs,
e.g. file system access.
7 years ago
Daniel Gasienica 19a70ad8b8 Add `to-arraybuffer` dependency
Used for converting Node.js buffers to `ArrayBuffer`.
7 years ago
Daniel Gasienica 32911002d4 Verify `makeAttachmentPointer` and `encryptAttachment` arguments
The underlying `crypto.subtle.encrypt` API requires it.
7 years ago
Daniel Gasienica 8218e308cd Improve identifier names 7 years ago
Daniel Gasienica 6355c54114 Return relative path from `writeAttachmentData`
This will make our app more robust to changes in location on the file system.
7 years ago
Daniel Gasienica 1262d1d696 Shorten prefix to 2 characters
Using 2 hex characters [0-9a-f] will give us 16 * 16 = 256 root folders which
seems more manageable than 4096 (16^3). Assuming a user has 10,000 attachments,
they should roughly distribute at ~40 per folder with prefix length 2 rather
than ~2.5 per folder with a prefix of 3.
7 years ago
Daniel Gasienica 2cd3d5ac16 Add `Message` schema version 3 7 years ago
Daniel Gasienica e0428355be Wire up `writeAttachment` 7 years ago
Daniel Gasienica aa82a2a5fb Add `context` to `Message.upgradeSchema`
Allows us to pass in Electron/Node.js specific functions. This allows better
unit testing in Mocha where we don’t have access to Electron APIs.
7 years ago
Daniel Gasienica ebe2a769c9 Add `Attachment.migrateDataToFileSystem` 7 years ago
Daniel Gasienica 0fc2868f0e Remove `tempy` dependency
We already use `tmp`.
7 years ago
Daniel Gasienica 8a94ca5c42 🎨 Use `Buffer.from` 7 years ago
Daniel Gasienica 1283c77518 Switch from hashed to random attachment file names
Using hashes, we get the benefit of deduplication but if a user receives two
messages with the same attachment, deleting one would delete it for both since
they are only stored once. To avoid the complexity of tracking number of
references, we simply generate random file names similar to iMessage on MacOS
(?) and Signal Android.
7 years ago
Daniel Gasienica d9de6dacba Add `writeAttachmentData` module 7 years ago
Daniel Gasienica 14f58281bc Add `string-to-array-buffer` as dev dependency
Used for testing attachment data migration.
7 years ago
Daniel Gasienica 925ddbd7db Add `tempy` as dev dependency
Useful for creating random temporary directories for testing.
7 years ago
Daniel Gasienica 14422652c6 Add `fs-extra` as direct dependency
Allows us to use `fs` with promises. Turns out it’s already a
transitive dependency.
7 years ago