## UI * [x] List `mailboxes` all in the `Email Provider`, identifying those *registered* locally. * [x] Select which to *register* or unregister for watching. * [x] List *registered* `mailboxes`. * [x] List `messages` for selected `mailbox`. * [x] Schedule `attachments` downloads. * [ ] Download `attachments` (*encrypted* & *decrypted*). ## CLI #### Automatic * [x] `mailboxes:check`: Get *registered* `mailboxes` and schedule `messages:grab` for `mailbox_id`. * [x] `attachments:check`: Check *saved* `attachments` and schedule `attachments:decrypt` for `attachment_id`. * [x] `jobs:check`: Get *pending* `jobs` and run them. #### Scheduled * [x] `messages:grab`: Grab `messages` for `mailbox`. Arguments: `mailbox_id`. * [x] `attachments:grab`: Grab `attachments` for `message`. Arguments: `message_id`. * [x] `attachments:decrypt`: Decrypt `attachment`. Arguments: `attachment_id`. ## API * [x] Grab all `mailboxes` from `Email Provider`, identifying those that are registered. * [x] Register `mailboxes` into **[database]** and grab latest `messages`. * [x] Grab new `messages` from `Email Provider` for selected `mailboxes` and store them in the `database`. * [x] Grab `messages` from **[database]** for selected `mailboxes`. * [x] Grab `attachments` from `Email Provider` for selected `messages`. * [x] Register `messages` for `attachment` job. * [x] Decrypt `attachments`. ## Workflow * **[User]** Choose `mailboxes` to register or unregister. -> **[API]** Register selected `mailboxes`, register new `messages:grab` job. * **[Cron]** Get `jobs`, run `jobs`. * **[User]** Check messages found -> **[API]** Schedule `attachments`. ## Jobs #### Automatic * [x] Check *registered* `mailboxes` for new `messages`. Every weekday. * [x] Check if `attachments` are *encrypted*. Every weekday. * [x] Check for new *scheduled* `jobs`. Every minute. #### Scheduled * [ ] Grab `messages` for `mailbox` id. * [ ] Grab `attachments` for `message` id. * [ ] Decrypt `attachment`.