[evolution-data-server/gnome-3-6] Bug #202576 - A way to refresh IMAP folder list



commit c6a397fbba5ae4901a6e6748f97818630edffbaf
Author: Milan Crha <mcrha redhat com>
Date:   Thu Nov 22 16:17:29 2012 +0100

    Bug #202576 - A way to refresh IMAP folder list

 camel/camel-imapx-store.c               |   11 +++++++++++
 camel/providers/imap/camel-imap-store.c |   12 +++++++++++-
 2 files changed, 22 insertions(+), 1 deletions(-)
---
diff --git a/camel/camel-imapx-store.c b/camel/camel-imapx-store.c
index 4fde4a8..c26c978 100644
--- a/camel/camel-imapx-store.c
+++ b/camel/camel-imapx-store.c
@@ -1027,7 +1027,9 @@ sync_folders (CamelIMAPXStore *istore,
               GCancellable *cancellable,
               GError **error)
 {
+	CamelSettings *settings;
 	GHashTable *folders_from_server;
+	gboolean notify_all;
 	gint i, total;
 
 	folders_from_server = fetch_folders_for_namespaces (
@@ -1035,6 +1037,10 @@ sync_folders (CamelIMAPXStore *istore,
 	if (folders_from_server == NULL)
 		return FALSE;
 
+	settings = camel_service_ref_settings (CAMEL_SERVICE (istore));
+	notify_all = !camel_imapx_settings_get_use_subscriptions (CAMEL_IMAPX_SETTINGS (settings));
+	g_object_unref (settings);
+
 	total = camel_store_summary_count ((CamelStoreSummary *) istore->summary);
 	for (i = 0; i < total; i++) {
 		CamelStoreInfo *si;
@@ -1053,10 +1059,15 @@ sync_folders (CamelIMAPXStore *istore,
 
 		if (!pattern || !*pattern || imapx_match_pattern (camel_imapx_store_summary_namespace_find_full (istore->summary, full_name), pattern, full_name)) {
 			if ((fi = g_hash_table_lookup (folders_from_server, camel_store_info_path (istore->summary, si))) != NULL) {
+				gboolean do_notify = notify_all;
+
 				if (((fi->flags ^ si->flags) & CAMEL_STORE_INFO_FOLDER_SUBSCRIBED)) {
 					si->flags = (si->flags & ~CAMEL_FOLDER_SUBSCRIBED) | (fi->flags & CAMEL_FOLDER_SUBSCRIBED);
 					camel_store_summary_touch ((CamelStoreSummary *) istore->summary);
+					do_notify = TRUE;
+				}
 
+				if (do_notify) {
 					camel_store_folder_created (CAMEL_STORE (istore), fi);
 					camel_subscribable_folder_subscribed (CAMEL_SUBSCRIBABLE (istore), fi);
 				}
diff --git a/camel/providers/imap/camel-imap-store.c b/camel/providers/imap/camel-imap-store.c
index 0bd0700..175fbec 100644
--- a/camel/providers/imap/camel-imap-store.c
+++ b/camel/providers/imap/camel-imap-store.c
@@ -2775,11 +2775,16 @@ get_folders_sync (CamelImapStore *imap_store,
 	CamelStoreInfo *si;
 	const gchar *pattern = ppattern;
 	CamelImapStoreNamespace *ns;
-	gboolean success = TRUE, first_namespace = TRUE;
+	CamelSettings *settings;
+	gboolean success = TRUE, first_namespace = TRUE, notify_all;
 
 	if (g_cancellable_is_cancelled (cancellable))
 		return FALSE;
 
+	settings = camel_service_ref_settings (CAMEL_SERVICE (imap_store));
+	notify_all = !camel_imap_settings_get_use_subscriptions (CAMEL_IMAP_SETTINGS (settings));
+	g_object_unref (settings);
+
 	/* We do a LIST followed by LSUB, and merge the results.  LSUB may not be a strict
 	 * subset of LIST for some servers, so we can't use either or separately */
 	present = g_hash_table_new (folder_hash, folder_eq);
@@ -2878,10 +2883,15 @@ get_folders_sync (CamelImapStore *imap_store,
 
 		if (!ppattern || imap_match_pattern (camel_imap_store_summary_namespace_find_full (imap_store->summary, full_name), pattern, full_name)) {
 			if ((fi = g_hash_table_lookup (present, camel_store_info_path (imap_store->summary, si))) != NULL) {
+				gboolean do_notify = notify_all;
+
 				if (((fi->flags ^ si->flags) & CAMEL_STORE_INFO_FOLDER_SUBSCRIBED)) {
 					si->flags = (si->flags & ~CAMEL_FOLDER_SUBSCRIBED) | (fi->flags & CAMEL_FOLDER_SUBSCRIBED);
 					camel_store_summary_touch ((CamelStoreSummary *) imap_store->summary);
+					do_notify = TRUE;
+				}
 
+				if (do_notify) {
 					camel_store_folder_created (CAMEL_STORE (imap_store), fi);
 					camel_subscribable_folder_subscribed (CAMEL_SUBSCRIBABLE (imap_store), fi);
 				}



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