Mailbox client for our own mailbox
Mailbox clients for communicating with our own mailbox and contacts' mailboxes are managed by a singleton mailbox client manager (#2228).
This ticket covers the client for communicating with our own mailbox. Some code will be shared with the client for communicating with a contact's mailbox (#2289 (closed)). The shared code is covered by #2229 (closed).
The client's connectivity check will use #2170 (closed).
- At any given time the client has zero or more contacts assigned for upload and zero or more contacts assigned for download
- Each contact assigned for upload has its own upload worker
- The client has a single download worker that's shared by all contacts assigned for download
- The client also has a single contact list worker
When the client is created:
- Create and start the contact list worker (#2294 (closed))
When the client is destroyed:
- Do all the stuff the superclass does when it's destroyed
- Destroy the contact list worker
When a contact is assigned for upload:
- Create and start the contact's upload worker (#2291 (closed))
When a contact is deassigned for upload:
- Destroy the contact's upload worker
When a contact is assigned for download:
- If this is the only contact assigned for download:
- Create and start the shared download worker (#2293)
When a contact is deassigned for download:
- If there are no more contacts assigned for download:
- Destroy the shared download worker