[evolution-data-server] Add camel_imapx_folder_invalidate_local_cache().



commit 1c9cef1cd6c413fc1d898d96a230e61dc89c797e
Author: Matthew Barnes <mbarnes redhat com>
Date:   Wed Aug 28 08:01:21 2013 -0400

    Add camel_imapx_folder_invalidate_local_cache().
    
    Replaces the internal invalidate_local_cache() in camel-imapx-server.c.

 camel/camel-imapx-folder.c              |   49 +++++++++++++++++++++++++++++++
 camel/camel-imapx-folder.h              |    3 ++
 camel/camel-imapx-server.c              |   46 ++++-------------------------
 docs/reference/camel/camel-sections.txt |    1 +
 4 files changed, 59 insertions(+), 40 deletions(-)
---
diff --git a/camel/camel-imapx-folder.c b/camel/camel-imapx-folder.c
index 89b7941..7e9d134 100644
--- a/camel/camel-imapx-folder.c
+++ b/camel/camel-imapx-folder.c
@@ -1261,6 +1261,55 @@ camel_imapx_folder_add_move_to_real_trash (CamelIMAPXFolder *folder,
 }
 
 /**
+ * camel_imapx_folder_invalidate_local_cache:
+ * @folder: a #CamelIMAPXFolder
+ * @new_uidvalidity: the new UIDVALIDITY value
+ *
+ * Call this function when the IMAP server reports a different UIDVALIDITY
+ * value than what is presently cached.  This means all cached message UIDs
+ * are now invalid and must be discarded.
+ *
+ * The local cache for @folder is reset and the @new_uidvalidity value is
+ * recorded in the newly-reset cache.
+ *
+ * Since: 3.10
+ **/
+void
+camel_imapx_folder_invalidate_local_cache (CamelIMAPXFolder *folder,
+                                           guint64 new_uidvalidity)
+{
+       CamelFolderSummary *summary;
+       CamelFolderChangeInfo *changes;
+       GPtrArray *array;
+       guint ii;
+
+       g_return_if_fail (CAMEL_IS_IMAPX_FOLDER (folder));
+       g_return_if_fail (new_uidvalidity > 0);
+
+       summary = CAMEL_FOLDER (folder)->summary;
+
+       changes = camel_folder_change_info_new ();
+       array = camel_folder_summary_get_array (summary);
+
+       for (ii = 0; ii < array->len; ii++) {
+               const gchar *uid = array->pdata[ii];
+               camel_folder_change_info_change_uid (changes, uid);
+       }
+
+       CAMEL_IMAPX_SUMMARY (summary)->validity = new_uidvalidity;
+       camel_folder_summary_touch (summary);
+       camel_folder_summary_save_to_db (summary, NULL);
+
+       camel_data_cache_clear (folder->cache, "cache");
+       camel_data_cache_clear (folder->cache, "cur");
+
+       camel_folder_changed (CAMEL_FOLDER (folder), changes);
+
+       camel_folder_change_info_free (changes);
+       camel_folder_summary_free_array (array);
+}
+
+/**
  * camel_imapx_folder_process_status_response:
  * @folder: a #CamelIMAPXFolder
  * @response: a #CamelIMAPXStatusResponse
diff --git a/camel/camel-imapx-folder.h b/camel/camel-imapx-folder.h
index c17b106..ccebbc4 100644
--- a/camel/camel-imapx-folder.h
+++ b/camel/camel-imapx-folder.h
@@ -102,6 +102,9 @@ void                camel_imapx_folder_add_move_to_real_junk
 void           camel_imapx_folder_add_move_to_real_trash
                                                (CamelIMAPXFolder *folder,
                                                 const gchar *message_uid);
+void           camel_imapx_folder_invalidate_local_cache
+                                               (CamelIMAPXFolder *folder,
+                                                guint64 new_uidvalidity);
 void           camel_imapx_folder_process_status_response
                                                (CamelIMAPXFolder *folder,
                                                 CamelIMAPXStatusResponse *response);
diff --git a/camel/camel-imapx-server.c b/camel/camel-imapx-server.c
index 6a0788f..2f215cd 100644
--- a/camel/camel-imapx-server.c
+++ b/camel/camel-imapx-server.c
@@ -1409,43 +1409,6 @@ imapx_expunge_uid_from_summary (CamelIMAPXServer *is,
        g_object_unref (folder);
 }
 
-static void
-invalidate_local_cache (CamelIMAPXFolder *ifolder,
-                        guint64 new_uidvalidity)
-{
-       CamelFolder *cfolder;
-       CamelFolderChangeInfo *changes;
-       GPtrArray *uids;
-       gint ii;
-
-       g_return_if_fail (ifolder != NULL);
-
-       cfolder = CAMEL_FOLDER (ifolder);
-       g_return_if_fail (cfolder != NULL);
-
-       changes = camel_folder_change_info_new ();
-
-       uids = camel_folder_summary_get_array (cfolder->summary);
-       for (ii = 0; uids && ii < uids->len; ii++) {
-               const gchar *uid = uids->pdata[ii];
-
-               if (uid)
-                       camel_folder_change_info_change_uid (changes, uid);
-       }
-
-       camel_folder_summary_free_array (uids);
-
-       CAMEL_IMAPX_SUMMARY (cfolder->summary)->validity = new_uidvalidity;
-       camel_folder_summary_touch (cfolder->summary);
-       camel_folder_summary_save_to_db (cfolder->summary, NULL);
-
-       camel_data_cache_clear (ifolder->cache, "cache");
-       camel_data_cache_clear (ifolder->cache, "cur");
-
-       camel_folder_changed (cfolder, changes);
-       camel_folder_change_info_free (changes);
-}
-
 /* untagged response handler functions */
 
 static gboolean
@@ -2246,7 +2209,8 @@ imapx_untagged_status (CamelIMAPXServer *is,
                        imapx_folder, response);
 
                if (uidvalidity > 0 && uidvalidity != imapx_summary->validity)
-                       invalidate_local_cache (imapx_folder, uidvalidity);
+                       camel_imapx_folder_invalidate_local_cache (
+                               imapx_folder, uidvalidity);
        } else {
                c (is->tagprefix,
                        "Received STATUS for unknown folder '%s'\n",
@@ -3571,7 +3535,8 @@ imapx_command_select_done (CamelIMAPXServer *is,
                ifolder->uidvalidity_on_server = is->uidvalidity;
 
                if (is->uidvalidity && is->uidvalidity != ((CamelIMAPXSummary *) folder->summary)->validity)
-                       invalidate_local_cache (ifolder, is->uidvalidity);
+                       camel_imapx_folder_invalidate_local_cache (
+                               ifolder, is->uidvalidity);
 
 #if 0  /* see comment for disabled bits in imapx_job_refresh_info_start() */
                /* This should trigger a new messages scan */
@@ -5657,7 +5622,8 @@ imapx_job_refresh_info_start (CamelIMAPXJob *job,
        total = camel_folder_summary_count (folder->summary);
 
        if (ifolder->uidvalidity_on_server && isum->validity && isum->validity != 
ifolder->uidvalidity_on_server) {
-               invalidate_local_cache (ifolder, ifolder->uidvalidity_on_server);
+               camel_imapx_folder_invalidate_local_cache (
+                       ifolder, ifolder->uidvalidity_on_server);
                need_rescan = TRUE;
        }
 
diff --git a/docs/reference/camel/camel-sections.txt b/docs/reference/camel/camel-sections.txt
index 4588ade..ba08212 100644
--- a/docs/reference/camel/camel-sections.txt
+++ b/docs/reference/camel/camel-sections.txt
@@ -780,6 +780,7 @@ camel_imapx_folder_dup_quota_root_names
 camel_imapx_folder_set_quota_root_names
 camel_imapx_folder_add_move_to_real_junk
 camel_imapx_folder_add_move_to_real_trash
+camel_imapx_folder_invalidate_local_cache
 camel_imapx_folder_process_status_response
 <SUBSECTION Standard>
 CAMEL_IMAPX_FOLDER


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