From be7938316eb31a95ed2f461fea635aeebb458f1c Mon Sep 17 00:00:00 2001 From: Michael Gratton Date: Sun, 25 Oct 2020 18:49:10 +1100 Subject: [PATCH 113/124] 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 8e9863af..9d5a31b1 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(); -- 2.29.2