Prior commit did not completely fix the problem in the case where a remote folder open took
a long time. This bulletproofs the solution, but does mean that there will be some
situations where FAST messages return with EmailLocations that radically change in the near
future. As the contract allows for any changes whatsoever, this is acceptable.
This adds support for retrieving partial header and body blocks straight from the email, and
therefore support to pull the References header from a message (which, for some reason, IMAP
doesn't support or include in the FETCH ENVELOPE command). This is necessary for email conversations (#3808).
This required a change to the database schema, meaning old databases will need to be blown
away before starting.
Eric spotted a bug where messages retrieved via FAST (i.e. straight from the database) were
not assigned their proper EmailLocations, which has a lot of ramifications when more emails
are being requested.
This adds facilities to issue FETCH BODY<partial> syntax commands to IMAP server. Only
thing that is missing is the ability to specify body MIME parts, which can be added later.
(At that time we'll want to include support for the FETCH BODYSTRUCTURE command.)
This is a necessary component for threading (#3808).
The entire database module now uses Transactions in order to guarantee atomicity of all
operations. However, due to limitations in SQLHeavy and its implementation of async, we
can't use it (and SQLite's) transactional models. This patch introduces a rather hamhanded
transactional model where the entire database is locked for each request using a
NonblockingMutex. This is the safest approach, but certainly not an optimal one. When
SQLHeavy's code is in place, hopefully we can rip this out with a minimum of fuss.
Mailing list groups aren't completely accounted for in Geary (#3713) but in the last commit
I skipped one place they can easily be dealt with. This takes care of that.
message (email), suitable for decoding a message off the wire or converting a
human-generated form into something suitable for pushing on the wire via SMTP.
Email addresses were being stored in the database in a human-readable fashion, not proper
quoted RFC 822 format. This fixes that, as well as another error this exposed in
MessageListCellRenderer dealing with situations where no From: is available. Courtesy
Charles Lindsay.
Commands were build with their commands prior to this change, for various reasons (mostly as
a convenience for myself). This is not technically a good way to do things, it's far better
if the Tag is assigned right before the Command is sent to ensure they go out in order.
This bug was exacerbated by rapidly switching between folders. This patch introduces a
Cancellable to most of the requests the client performs so it can cancel old requests when
the user switches folders. This fixed some issues but exposed others.
Testing this demonstrates another bug: #4233
This adds a new flag when listing messages, FAST. This indicates that the caller wants
messages that are immediately available to the Folder, avoiding a round-trip to the server
(or even disk) if possible. Not all folders will support FAST, but it can be used (as it is
now in the client) to quickly populate the message list and then initiate a connection in
the background to get the straight dope.
This adds an SMTP library into Geary that can perform basic client submission of emails.
The interface is exposed generically through the Geary.EngineAccount interface.
This commit introduces a Scheduler module which deals with the problem of scheduling on the
idle or timeout queue unowned SourceFuncs (because the idle and timeout functions require
owned delegates). It also takes care of a handful of places where an out parameter was not
being set before the method returned, which Vala's new code analysis now picks up.