[evolution-data-server] CamelSpoolStore: Use cache for often accessed data



commit 0a372113dd0033ac605e535440f33d9203852a61
Author: Milan Crha <mcrha redhat com>
Date:   Tue Mar 2 21:30:56 2021 +0100

    CamelSpoolStore: Use cache for often accessed data
    
    * cache the store type, to not check the disk repeatedly;
    * use camel_store_get_folder_sync() in spool_store_get_inbox_folder_sync(),
      thus an already created Inbox folder is returned, instead
      of a new instance, when it exists.

 src/camel/providers/local/camel-spool-store.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)
---
diff --git a/src/camel/providers/local/camel-spool-store.c b/src/camel/providers/local/camel-spool-store.c
index 151da9adf..e6bb8eed1 100644
--- a/src/camel/providers/local/camel-spool-store.c
+++ b/src/camel/providers/local/camel-spool-store.c
@@ -44,7 +44,7 @@ typedef enum _camel_spool_store_t {
 } camel_spool_store_t;
 
 struct _CamelSpoolStorePrivate {
-       gint placeholder;  /* for future expansion */
+       camel_spool_store_t store_type;
 };
 
 G_DEFINE_TYPE_WITH_PRIVATE (
@@ -63,6 +63,9 @@ spool_store_get_type (CamelSpoolStore *spool_store,
        struct stat st;
        gchar *path;
 
+       if (spool_store->priv->store_type != CAMEL_SPOOL_STORE_INVALID)
+               return spool_store->priv->store_type;
+
        service = CAMEL_SERVICE (spool_store);
 
        settings = camel_service_ref_settings (service);
@@ -107,6 +110,8 @@ spool_store_get_type (CamelSpoolStore *spool_store,
 
        g_free (path);
 
+       spool_store->priv->store_type = type;
+
        return type;
 }
 
@@ -566,7 +571,7 @@ spool_store_get_inbox_folder_sync (CamelStore *store,
 
        switch (spool_store_get_type (spool_store, error)) {
                case CAMEL_SPOOL_STORE_MBOX:
-                       folder = spool_store_get_folder_sync (
+                       folder = camel_store_get_folder_sync (
                                store, "INBOX", CAMEL_STORE_FOLDER_CREATE,
                                cancellable, error);
                        break;
@@ -701,4 +706,5 @@ static void
 camel_spool_store_init (CamelSpoolStore *spool_store)
 {
        spool_store->priv = camel_spool_store_get_instance_private (spool_store);
+       spool_store->priv->store_type = CAMEL_SPOOL_STORE_INVALID;
 }


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