'\n'
when an empty header is last, the rest of the body keeps getting parsed
as headers. when header starts with '\n' because the value is long, the
value gets parsed as a name and the header parser fails.
closes#100closes#101closes#122
Check subattachments in has_attachments check.
Instead of getting a flattened attachment view of multipart/mixed (eg
[multipart/mixed, text/plain, text/plain]) get only the subattachments
(eg [text/plain, text/plain]). Don't count text-only multipart/mixed as attachments
Each account had one mailbox per folder, which had one associated
collection. Now each Account has one Collection for all folders and each
Mailbox object holds only the hashes of each message.
Collection also gets Threads for each folder in order to mix messages
(ie from/to Sent folder).
Insert Sent emails in chronological order
if inserted unsorted, mails a, b with a happened-before b, might never
get added.
Fix multiple insertions in ThreadTree upon insert_reply
insert_reply was creating multiple copies in threading
snooze field translated to whether the user wants to be notified of new
email in the thread or not. This is toggled with an (temp) EX cmd: `toggle_thread_snooze`
closes#112
put shortcuts in different maps according to their source component
instead of bagging them all in the same one, and then print each
shortcut section on its own in the shortcut window
A thread's chain link would get broken when empty intermediate
ThreadNodes exist. The pruning of the empty node did not properly chain
the empty node's parent with the empty node's children.
Old behaviour:
- [A]
/* [B] is missing */
- [C]
/* [D] is missing */
- [E]
New behaviour (`x` represents deleted links)
- [A]
|
|xxx> [empty node of B]
| x
| x
| \/
|_______>[C]
|
|xxx> [empty node of D]
| x
| x
| \/
|_______>[E]