[evolution-exchange] Always add newly recognized folders to folder list



commit e8329aed8189cb0ea610e36b0f6b3dd544cd6cd8
Author: Milan Crha <mcrha redhat com>
Date:   Thu Feb 18 18:17:25 2010 +0100

    Always add newly recognized folders to folder list
    
    It's properly fixing issue from the previous commit.

 camel/camel-exchange-utils.c |   18 +++++++++++++++++-
 1 files changed, 17 insertions(+), 1 deletions(-)
---
diff --git a/camel/camel-exchange-utils.c b/camel/camel-exchange-utils.c
index fd4c9a4..b5ca301 100644
--- a/camel/camel-exchange-utils.c
+++ b/camel/camel-exchange-utils.c
@@ -1887,6 +1887,15 @@ unmangle_sender_field (ExchangeData *ed, E2kOperation *op, const gchar *uri, gch
 }
 
 static void
+foreign_new_folder_cb (ExchangeAccount *account, EFolder *folder, GPtrArray *folders)
+{
+	g_return_if_fail (folder != NULL);
+	g_return_if_fail (folders != NULL);
+
+	g_ptr_array_add (folders, folder);
+}
+
+static void
 get_folder_info_data (ExchangeData *ed, const gchar *top, guint32 store_flags, GPtrArray **names, GPtrArray **uris, GArray **unread, GArray **flags)
 {
 	GPtrArray *folders = NULL;
@@ -1948,6 +1957,11 @@ get_folder_info_data (ExchangeData *ed, const gchar *top, guint32 store_flags, G
 	}
 
 	if (folders) {
+		guint new_folder_handler_id = 0;
+
+		if (ed->new_folder_id == 0)
+			new_folder_handler_id = g_signal_connect (ed->account, "new_folder", G_CALLBACK (foreign_new_folder_cb), folders);
+
 		for (i = 0; i < folders->len; i++) {
 			folder = folders->pdata[i];
 			hier = e_folder_exchange_get_hierarchy (folder);
@@ -1990,7 +2004,7 @@ get_folder_info_data (ExchangeData *ed, const gchar *top, guint32 store_flags, G
 					}
 					break;
 				case EXCHANGE_HIERARCHY_FOREIGN:
-					if (folder_flags & CAMEL_FOLDER_NOSELECT && ed->new_folder_id == 0) {
+					if ((folder_flags & CAMEL_FOLDER_NOSELECT) != 0 && ed->new_folder_id == 0) {
 						/* Rescan the hierarchy - as we don't rescan
 						   foreign hierarchies anywhere for mailer and
 						   only when we are starting up
@@ -2031,6 +2045,8 @@ get_folder_info_data (ExchangeData *ed, const gchar *top, guint32 store_flags, G
 			g_array_append_val (*flags, folder_flags);
 		}
 
+		if (new_folder_handler_id)
+			g_signal_handler_disconnect (ed->account, new_folder_handler_id);
 		g_ptr_array_free (folders, TRUE);
 	}
 }



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