[evolution-data-server] Add camel_imapx_folder_invalidate_local_cache().
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server] Add camel_imapx_folder_invalidate_local_cache().
- Date: Wed, 28 Aug 2013 12:01:04 +0000 (UTC)
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]