Alternatively, I considered deleting *only* the session with the device
which sent the message, but since other clients are deleting *all*
sessions associated with the contact, it will be less disruptive to get
in line with their behavior.
Fixes the scenario wherein:
* Alice.1 has a session with Bob.1 and Bob.2
* Bob.1 sends an EndSession to Alice
* Thus Alice.1 deletes her sessions with Bob.1 and Bob.2
* Bob.2 sends Alice1 "hi" (with the existing session - as a regular WM,
not a PKWM)
* Alice has no session with Bob.2 so cannot decrypt the message.
// FREEBIE
Motivation
----------
We were often swallowing errors or yielding generic errors when it would
be better to provide specific errors.
We also didn't create an attachment when attachments failed to send,
making it impossible to show the user what was happening with an
in-progress or failed attachment.
Primary Changes
---------------
- Funnel all message sending through MessageSender, and remove message sending
from MessagesManager.
- Record most recent sending error so we can expose it in the UI
- Can resend attachments.
- Update message status for attachments, just like text messages
- Extracted UploadingService from MessagesManager
- Saving attachment stream before uploading gives uniform API for send vs.
resend
- update status for downloading transcript attachments
- TSAttachments have a local id, separate from the server allocated id
This allows us to save the attachment before the allocation request. Which is
is good because:
1. can show feedback to user faster.
2. allows us to show an error when allocation fails.
Code Cleanup
------------
- Replaced a lot of global singleton access with injected dependencies to make
for easier testing.
- Never save group meta messages. Rather than checking before (hopefully) every
save, do it in the save method.
- Don't use callbacks for sync code.
- Handle errors on writing attachment data
- Fix old long broken tests that weren't even running. =(
- Removed dead code
- Use constants vs define
- Port flaky travis fixes from Signal-iOS
// FREEBIE
This would especially affect users with large databases on older
devices.
Some of these database extensions aren't strictly necessary to launch
the app. Theoretically we could see weird read receipt behavior for
the initial 10-30 seconds after the app is launched for first time.
// FREEBIE
* By providing a view extension for secondary devices we can use that in
a view mapping to power our devices view controller, and avoid any race
conditions with uncommitted transactions.
* Fix crash when you're not in your own contacts
* New device appears on top
* Don't show "edit" button unless there are devices, or rather, the helpers to do so.
* Fix glitchy refresh
Saving unchanged records was causing the tableview to redraw, which was
mostly invisible, except that if the refresh indicator were running, it
would twitch.
// FREEBIE
Ideally we'd be using file streams so we wouldn't have to load it all
into ram but none of the attachment uploading infrastructure takes
streams (yet!)
// FREEBIE