* 'master' of https://github.com/signalapp/Signal-Desktop: (38 commits)
v1.17.0
v1.17.0-beta.4
Ensure that blue group avatars are preserved in dark theme
Android theme: Incoming quotes take color from containing message
Conversations have blue avatar backgrounds if no image provided
Fix lint errors
Add ca language
inboxView: Ensure Conversation exists for our own number
Ensure that file is not attached if we've filtered it
v1.17.0-beta.3
Localization updates
v1.16.3
Lint fixes
Lint fixes
Better handle large numbers of messages in cache on startup
Keep object stores after conversations migrate to SQLCipher
Longer timeout for orphaned file cleanup
Tests and increase consistency for isFileDangerous calls
Longer timeout for orphaned file cleanup
v1.17.0-beta.2
...
# Conflicts:
# background.html
# package.json
* add 'recipient' attribute in prekey database to allow binding a prekey to a recipient pub key
* Attach a PreKeyBundleMessage to the ContentMessage in fallback encryption mode
* Skip generating 100 prekeys upon registration
* Store the signed key signature in database
When indexing message attachment metadata using numeric indexes such as:
```javascript
{
conversationId: '+12223334455',
received_at: 123,
attachments: […],
numAttachments: 2,
},
{
conversationId: '+12223334455',
received_at: 456,
attachments: [],
numAttachments: 0,
}
{
conversationId: '+12223334455',
received_at: 789,
attachments: [],
numAttachments: 1,
}
```
It creates an index as follows:
```
[conversationId, received_at, numAttachments]
['+12223334455', 123, 2]
['+12223334455', 456, 0]
['+12223334455', 789, 1]
```
This means a query such as…
```
lowerBound: ['+12223334455', 0, 1 ]
upperBound: ['+12223334455', Number.MAX_VALUE, Number.MAX_VALUE]
```
…will return all three original entries because they span the `received_at`
from `0` through `Number.MAX_VALUE`. One workaround is to index booleans using
`1 | undefined` where `1` is included in the index and `undefined` is not, but
that way we lose the ability to query for the `false` value. Instead, we flip
adjust the index to `[conversationId, hasAttachments, received_at]` and can
then query messages with attachments using
```
[conversationId, 1 /* hasAttachments */, 0 /* received_at */]
[conversationId, 1 /* hasAttachments */, Number.MAX_VALUE /* received_at */]
```
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.
Previously, I messily combined promises and callbacks because I thought we
were affected by the microtask issue:
https://github.com/gasi/idb#iteratecursor--iteratekeycursor
ESLint’s `more/no-then` encouraged me to revisit this and it works as expected.