[geary] Remove redundant and unimplemented Folder.OpenFlags.FAST_OPEN option.



commit 0c837d31014750aee14db4c35cf37042d4f3e141
Author: Michael James Gratton <mike vee net>
Date:   Fri Jan 26 17:12:28 2018 +1030

    Remove redundant and unimplemented Folder.OpenFlags.FAST_OPEN option.
    
    * src/engine/api/geary-folder.vala (OpenFlags): Remove FAST_OPEN, since
      it is unimplemented and redundant with NO_DELAY. Update uses to simply
      use its equivalent, NONE.
    
    * src/client/application/geary-controller.vala (do_empty_folder_async),
      src/engine/imap-db/outbox/smtp-outbox-folder.vala (save_sent_mail_async),
      src/engine/imap-db/search/imap-db-search-folder.vala
      (remove_email_async): Ensure folders opened are always correctly closed
      after being opened.

 src/client/application/geary-controller.vala       |   38 +++++++++++--------
 src/engine/api/geary-folder.vala                   |   25 +++++++------
 src/engine/app/app-draft-manager.vala              |    6 ++--
 src/engine/app/app-email-store.vala                |    4 +-
 src/engine/imap-db/outbox/smtp-outbox-folder.vala  |   14 ++-----
 .../imap-db/search/imap-db-search-folder.vala      |   21 ++++-------
 .../imap-engine-account-synchronizer.vala          |    2 +-
 7 files changed, 53 insertions(+), 57 deletions(-)
---
diff --git a/src/client/application/geary-controller.vala b/src/client/application/geary-controller.vala
index 6cd04ef..1ba87c1 100644
--- a/src/client/application/geary-controller.vala
+++ b/src/client/application/geary-controller.vala
@@ -1344,10 +1344,13 @@ public class GearyController : Geary.BaseObject {
         }
         
         update_ui();
-        
-        current_conversations = new Geary.App.ConversationMonitor(current_folder, 
Geary.Folder.OpenFlags.NO_DELAY,
-            ConversationListStore.REQUIRED_FIELDS, MIN_CONVERSATION_COUNT);
-        
+
+        current_conversations = new Geary.App.ConversationMonitor(
+            current_folder,
+            Geary.Folder.OpenFlags.NO_DELAY,
+            ConversationListStore.REQUIRED_FIELDS,
+            MIN_CONVERSATION_COUNT);
+
         if (inboxes.values.contains(current_folder)) {
             // Inbox selected, clear new messages if visible
             clear_new_messages("do_select_folder (inbox)", null);
@@ -1565,10 +1568,10 @@ public class GearyController : Geary.BaseObject {
                         if (!main_window.folder_list.select_inbox(select_folder.account))
                             main_window.folder_list.select_folder(select_folder);
                     }
-                    
+
                     GLib.Cancellable cancellable = inbox_cancellables.get(folder.account);
-                    folder.open_async.begin(Geary.Folder.OpenFlags.NONE, cancellable);
-                    
+                    folder.open_async.begin(Geary.Folder.OpenFlags.NO_DELAY, cancellable);
+
                     new_messages_monitor.add_folder(folder, cancellable);
 
                     // also monitor Inbox's children for notifications
@@ -2415,23 +2418,26 @@ public class GearyController : Geary.BaseObject {
             dialog.run();
         }
     }
-    
+
     private async void do_empty_folder_async(Geary.FolderSupport.Empty emptyable, Cancellable? cancellable)
         throws Error {
-        yield emptyable.open_async(Geary.Folder.OpenFlags.NONE, cancellable);
-        
-        // be sure to close in all code paths
+        bool open = false;
         try {
+            yield emptyable.open_async(Geary.Folder.OpenFlags.NO_DELAY, cancellable);
+            open = true;
+            yield emptyable.wait_for_open_async(cancellable);
             yield emptyable.empty_folder_async(cancellable);
         } finally {
-            try {
-                yield emptyable.close_async(null);
-            } catch (Error err) {
-                // ignored
+            if (open) {
+                try {
+                    yield emptyable.close_async(null);
+                } catch (Error err) {
+                    // ignored
+                }
             }
         }
     }
-    
+
     private bool current_folder_supports_trash() {
         return (current_folder != null && current_folder.special_folder_type != Geary.SpecialFolderType.TRASH
             && !current_folder.properties.is_local_only && current_account != null
diff --git a/src/engine/api/geary-folder.vala b/src/engine/api/geary-folder.vala
index d07a400..6aad114 100644
--- a/src/engine/api/geary-folder.vala
+++ b/src/engine/api/geary-folder.vala
@@ -104,36 +104,37 @@ public abstract class Geary.Folder : BaseObject {
         INSERTED,
         REMOVED
     }
-    
+
     /**
-     * Flags modifying the behavior of open_async().
+     * Flags that modify the behavior of {@link open_async}.
      */
     [Flags]
     public enum OpenFlags {
+        /** If only //NONE// is set, the folder will be opened normally. */
         NONE = 0,
-        /**
-         * Perform the minimal amount of activity possible to open the folder
-         * and be synchronized with the server.  This may mean some attributes of
-         * the messages (such as their flags or other metadata) may not be up-to-date
-         * when the folder opens.  Not all folders will support this flag.
-         */
-        FAST_OPEN,
+
         /**
          * Do not delay opening a connection to the server.
          *
+         * This has no effect for folders that are not backed by a
+         * remote server.
+         *
          * @see open_async
          */
         NO_DELAY;
-        
+
+        /** Determines if any one of the given //flags// are set. */
         public bool is_any_set(OpenFlags flags) {
             return (this & flags) != 0;
         }
-        
+
+        /** Determines all of the given //flags// are set. */
         public bool is_all_set(OpenFlags flags) {
             return (this & flags) == flags;
         }
+
     }
-    
+
     /**
      * Flags modifying how email is retrieved.
      */
diff --git a/src/engine/app/app-draft-manager.vala b/src/engine/app/app-draft-manager.vala
index 798e7f0..4c80e22 100644
--- a/src/engine/app/app-draft-manager.vala
+++ b/src/engine/app/app-draft-manager.vala
@@ -225,9 +225,9 @@ public class Geary.App.DraftManager : BaseObject {
         }
         
         drafts_folder.closed.connect(on_folder_closed);
-        
-        yield drafts_folder.open_async(Folder.OpenFlags.NONE, cancellable);
-        
+
+        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.properties.create_never_returns_id) {
diff --git a/src/engine/app/app-email-store.vala b/src/engine/app/app-email-store.vala
index e616755..db107d2 100644
--- a/src/engine/app/app-email-store.vala
+++ b/src/engine/app/app-email-store.vala
@@ -175,11 +175,11 @@ public class Geary.App.EmailStore : BaseObject {
             Geary.Folder folder = folders.get(path);
             Gee.Collection<Geary.EmailIdentifier> ids = folders_to_ids.get(path);
             assert(ids.size > 0);
-            
+
             bool open = false;
             Gee.Collection<Geary.EmailIdentifier>? used_ids = null;
             try {
-                yield folder.open_async(Geary.Folder.OpenFlags.FAST_OPEN, cancellable);
+                yield folder.open_async(Folder.OpenFlags.NONE, cancellable);
                 open = true;
                 used_ids = yield operation.execute_async(folder, ids, cancellable);
             } catch (Error e) {
diff --git a/src/engine/imap-db/outbox/smtp-outbox-folder.vala 
b/src/engine/imap-db/outbox/smtp-outbox-folder.vala
index 4231731..70085b9 100644
--- a/src/engine/imap-db/outbox/smtp-outbox-folder.vala
+++ b/src/engine/imap-db/outbox/smtp-outbox-folder.vala
@@ -1,6 +1,6 @@
 /*
- * Copyright 2017 Michael Gratton <mike vee net>
  * Copyright 2016 Software Freedom Conservancy Inc.
+ * Copyright 2017-2018 Michael Gratton <mike vee net>
  *
  * This software is licensed under the GNU Lesser General Public License
  * (version 2.1 or later).  See the COPYING file in this distribution.
@@ -726,23 +726,17 @@ private class Geary.SmtpOutboxFolder :
 
         bool open = false;
         try {
-            yield create.open_async(Geary.Folder.OpenFlags.FAST_OPEN, cancellable);
+            yield create.open_async(Geary.Folder.OpenFlags.NONE, cancellable);
             open = true;
-
             yield create.create_email_async(rfc822, null, null, null, cancellable);
-
-            yield create.close_async(cancellable);
-            open = false;
-        } catch (Error e) {
+        } finally {
             if (open) {
                 try {
-                    yield create.close_async(cancellable);
-                    open = false;
+                    yield create.close_async();
                 } catch (Error e) {
                     debug("Error closing folder %s: %s", create.to_string(), e.message);
                 }
             }
-            throw e;
         }
     }
 
diff --git a/src/engine/imap-db/search/imap-db-search-folder.vala 
b/src/engine/imap-db/search/imap-db-search-folder.vala
index 0e5b084..b9d46f3 100644
--- a/src/engine/imap-db/search/imap-db-search-folder.vala
+++ b/src/engine/imap-db/search/imap-db-search-folder.vala
@@ -350,24 +350,19 @@ private class Geary.ImapDB.SearchFolder : Geary.SearchFolder, Geary.FolderSuppor
             assert(ids.size > 0);
             
             debug("Search folder removing %d emails from %s", ids.size, folder.to_string());
-            
+
             bool open = false;
             try {
-                yield folder.open_async(Geary.Folder.OpenFlags.FAST_OPEN, cancellable);
+                yield folder.open_async(Geary.Folder.OpenFlags.NONE, cancellable);
                 open = true;
-                
                 yield remove.remove_email_async(
-                    Geary.Collection.to_array_list<Geary.EmailIdentifier>(ids), cancellable);
-                
-                yield folder.close_async(cancellable);
-                open = false;
-            } catch (Error e) {
-                debug("Error removing messages in %s: %s", folder.to_string(), e.message);
-                
+                    Geary.Collection.to_array_list<Geary.EmailIdentifier>(ids),
+                    cancellable
+                );
+            } finally {
                 if (open) {
                     try {
-                        yield folder.close_async(cancellable);
-                        open = false;
+                        yield folder.close_async();
                     } catch (Error e) {
                         debug("Error closing folder %s: %s", folder.to_string(), e.message);
                     }
@@ -375,7 +370,7 @@ private class Geary.ImapDB.SearchFolder : Geary.SearchFolder, Geary.FolderSuppor
             }
         }
     }
-    
+
     /**
      * Given a list of mail IDs, returns a set of casefolded words that match for the current
      * search query.
diff --git a/src/engine/imap-engine/imap-engine-account-synchronizer.vala 
b/src/engine/imap-engine/imap-engine-account-synchronizer.vala
index a14fded..bec8eb6 100644
--- a/src/engine/imap-engine/imap-engine-account-synchronizer.vala
+++ b/src/engine/imap-engine/imap-engine-account-synchronizer.vala
@@ -104,7 +104,7 @@ private class Geary.ImapEngine.RefreshFolderSync : FolderOperation {
         throws Error {
         bool opened = false;
         try {
-            yield this.folder.open_async(Folder.OpenFlags.FAST_OPEN, cancellable);
+            yield this.folder.open_async(Folder.OpenFlags.NONE, cancellable);
             opened = true;
             yield this.folder.wait_for_open_async(cancellable);
             yield sync_folder(cancellable);


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