Reestablish dropped connections: Closes #4568

This rather large patch makes Geary.Conversations now responsible
for reestablishing a connection with the server if it ever drops
due to error.  Once reestablished, Conversations will resynchronize
and report any new messages to the client.  To the client, it's
invisible.

Working on this revealed problems with session teardown and Folder
state issues, as well as a memory leak.  These are all fixed in
the patch.

There remains other connection timeout problems when the network is
unavailable, but will need to be addressed in a separate patch.
This commit is contained in:
Jim Nelson 2012-05-01 20:32:31 -07:00
parent 643d6dbc33
commit 4b6ac96a7d
22 changed files with 706 additions and 200 deletions

View file

@ -11,6 +11,8 @@ private class Geary.Sqlite.Folder : Object, Geary.ReferenceSemantics {
public const Geary.Email.Field REQUIRED_FOR_DUPLICATE_DETECTION =
Geary.Email.Field.REFERENCES | Geary.Email.Field.PROPERTIES;
public bool opened { get; private set; default = false; }
protected int manual_ref_count { get; protected set; }
private ImapDatabase db;
@ -20,7 +22,6 @@ private class Geary.Sqlite.Folder : Object, Geary.ReferenceSemantics {
private MessageLocationTable location_table;
private ImapMessagePropertiesTable imap_message_properties_table;
private Geary.FolderPath path;
private bool opened = false;
internal Folder(ImapDatabase db, FolderRow folder_row, Geary.Imap.FolderProperties? properties,
Geary.FolderPath path) throws Error {