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