The prefetcher now ensures that previews for all messages are
pulled from the server. This is in aid of #5116, which will now
show previews for all collapsed messages, not simply the heads of
conversations.
The crash inside of HashMap appears to be due to a recent change
I made in Geary.Converstions to optimize loading large folders.
This reverts Geary back to returning copies of its conversation pools.
This doesn't close ticket #5089, as there is a larger question of
how we fetch headers from the server, but this addresses the problem
of displaying the headers and body after GMime has parsed them, which
is undesireable in this case.
One issue discovered while investigating #5081 was that the
Geary.Conversation object was being used to generated a lot of sorted
lists all over the place. This reduces that burden by keeping
sorted lists internally.
The keepalive timer previously scheduled a NOOP 29 minutes after
the last message was received from the server. Technically, this
was incorrect; we should schedule a keepalive 29 minutes after
sending a message to the server, as the server's timer is based
on receiving messages, not sending them.
Plus, this simplifies the code slightly.
Over the weekend I reconsidered how our conversations code was
operating. It was too complex for the use case and I've seen
some fragility in it in the past. This patch simplifies the code
greatly at the cost of not tracking all threading information;
now Geary.Conversations does nothing more than maintain pools of
related emails.
This patch also gets rid of the theseus program, which was nothing
but a test program for the original conversations interface. It
could be patched to use the new interface, but it's not needed or
useful any longer. This applies toward ticket #4915.
Christian introduces a new EmailEntry widget that validates email
addresses automatically, which is reflected by the Send button.
Also, RFC822.MailboxAddress now has a is_valid() method.
When the server reports it supports compression (DEFLATE), engine
will now enable compression and run from there.
Performance measurements are available. I currently see traffic
being reduced to 20-30% of its uncompressed size.