[geary/mjog/draft-errors: 3/6] Geary.App.DraftManager: Wait for remote to be open in ctor




commit be7938316eb31a95ed2f461fea635aeebb458f1c
Author: Michael Gratton <mike vee net>
Date:   Sun Oct 25 18:49:10 2020 +1100

    Geary.App.DraftManager: Wait for remote to be open in ctor
    
    When working offline, the draft manager is more or less useless and will
    just consume memory as drafts pile up. Also, when opening a composer
    immediately after application launch,
    `FolderProperties.create_never_returns_id` may not have been updated
    yet, and hence will prevent drafts from being saved, even if supported.
    
    So after opening the drafts folder, block waiting for the remote to
    open so we get an accurate idea of if the folder is usable.
    
    Fixes drafts issue mentioned in #955

 src/engine/app/app-draft-manager.vala | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)
---
diff --git a/src/engine/app/app-draft-manager.vala b/src/engine/app/app-draft-manager.vala
index 8e9863af4..9d5a31b1b 100644
--- a/src/engine/app/app-draft-manager.vala
+++ b/src/engine/app/app-draft-manager.vala
@@ -219,8 +219,17 @@ public class Geary.App.DraftManager : BaseObject {
 
         yield drafts_folder.open_async(Folder.OpenFlags.NO_DELAY, cancellable);
 
-        // if drafts folder doesn't return the identifier of newly created emails, then this object
-        // can't do it's work ... wait until open to check for this, to be absolutely sure
+        // if drafts folder doesn't return the identifier of newly
+        // created emails, then this object can't do it's work
+        // ... wait until open to check for this, to be absolutely
+        // sure
+        //
+        // Since open_async returns before a remote connection is
+        // made, need to wait for it here to ensure
+        var engine = this.drafts_folder as ImapEngine.MinimalFolder;
+        if (engine != null) {
+            yield engine.claim_remote_session(cancellable);
+        }
         if (drafts_folder.properties.create_never_returns_id) {
             try {
                 yield drafts_folder.close_async();


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]