1. Adds caching of the calculated fullName value
(which will slightly improve performance)
2. Incorporates fullNames that respect the first-name-first
rules of the currently unmerged PR #22
3. Adds two new fullName properties that can be used
for sorting comparators
4. Move the comparator into the model object for easy testing
Includes tests to ensure that the first name first and last name
first sorts are behaving as expected.
// FREEBIE
* Separate account registration from push token registration
* Provide better errors when validation fails (e.g. numbers don't match, numbers blank)
* More logging during registration
* Call success after setting phone number to avoid any future race condition
This isn't currently causing problems, but it's unexpected that we'd
mutate the state *after* calling a callback which might inuitively rely
on that state.
* Don't throw exception off thread when device keys 404's
* Better async startup handling
- move processing off main thread
- reduce code duplication
- don't wrap it in a transaction in the future case where we want to
further access the DB
// 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
* 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