[neomutt-devel] Account Development
rich at flatcap.org
Fri Oct 26 12:13:22 CEST 2018
I've just pushed over 30 commits to `master`.
They introduce an Account object into each of the backends.
This diagram shows an example of all seven backends in action:
The commits also standardise the naming of a lot of functions and
variables that are common to the backends.
The code works, but is NOT STABLE. Crashes are likely.
NeoMutt keeps a list of Accounts. Each Account can hold many Mailboxes.
An Account has a type and a pointer for backend-private data.
The Account contains everything that's common to ALL Mailboxes, e.g.
A Mailbox has a type and many members common to all mailboxes (paths,
message counts, etc). It also has a pointer for backend-private data.
## How it Works
NeoMutt parses your config. When it finds a `mailboxes` command, it:
1. Creates a dummy Mailbox using the path
- Expand any abbreviations, e.g. ~ + ^ (Using HomeDir, Folder, etc)
- Create the canonical path
- Identify the type of the Mailbox
Many of these actions are delegated to the backend.
They're performed on a Mailbox so that they only need to happen once.
2. For each Account (already known)
- Ask Account: Do you understand this path?
- Yes: Ask Account to add the Mailbox
- Already exists: Drop the dummy Mailbox, return a real Mailbox
3. Create a new Account with the type of the Mailbox
- Ask Account to add the Mailbox
## Problems / To do
- Currently, they're stored in a separate list. This isn't
particularly useful since they're not shared between Accounts.
- Plan: split up find-or-open function and move the Connection to the
private Account object
- Result: Connections list dies
- Currently, this uses the AllMailboxes list, which can lead to some
strange sorting and indentation.
- Plan: Refactor the sidebar to use the AllAccounts list
- Result: AllMailboxes list dies
Questions are welcomed.
Rich / FlatCap
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 833 bytes
Desc: not available
More information about the neomutt-devel