File subscribed_cal_eds.diff of Package evolution-data-server-2.6

Index: servers/exchange/storage/exchange-account.c
===================================================================
--- servers/exchange/storage/exchange-account.c	(revision 7580)
+++ servers/exchange/storage/exchange-account.c	(working copy)
@@ -1306,6 +1306,7 @@
 				continue;
 
 			setup_hierarchy_foreign (account, hier);
+			exchange_hierarchy_scan_subtree (hier, hier->toplevel, mode);
 		}
 		g_dir_close (d);
 	}
Index: servers/exchange/storage/exchange-hierarchy-foreign.c
===================================================================
--- servers/exchange/storage/exchange-hierarchy-foreign.c	(revision 7580)
+++ servers/exchange/storage/exchange-hierarchy-foreign.c	(working copy)
@@ -353,17 +353,21 @@
         folder_type = e_folder_get_type_string (folder);
         physical_uri = e_folder_get_physical_uri (folder);
 
-        if (strcmp (folder_type, "calendar") == 0) {
+        if (!strcmp (folder_type, "calendar") || 
+			!strcmp (folder_type, "calendar/public")) {
                 remove_folder_esource (hier->account,
 				       EXCHANGE_CALENDAR_FOLDER,
 				       physical_uri);
         }
-        else if (strcmp (folder_type, "tasks") == 0) {
+        else if (!strcmp (folder_type, "tasks") ||
+			 !(strcmp (folder_type, "tasks/public"))) {
                 remove_folder_esource (hier->account,
 				       EXCHANGE_TASKS_FOLDER,
 				       physical_uri);
         }
-        else if (strcmp (folder_type, "contacts") == 0) {
+        else if (!strcmp (folder_type, "contacts") ||
+			 !(strcmp (folder_type, "contacts/public")) ||
+			 !(strcmp (folder_type, "contacts/ldap"))) {
                 remove_folder_esource (hier->account,
 				       EXCHANGE_CONTACTS_FOLDER,
 				       physical_uri);
Index: servers/exchange/storage/exchange-esource.c
===================================================================
--- servers/exchange/storage/exchange-esource.c	(revision 7580)
+++ servers/exchange/storage/exchange-esource.c	(working copy)
@@ -110,8 +110,10 @@
 			e_source_set_property (source, "offline_sync", "1");
 		}
 		
-		if (foriegn_folder && (folder_type != EXCHANGE_CONTACTS_FOLDER))
+		if (foriegn_folder && (folder_type != EXCHANGE_CONTACTS_FOLDER)) {
 			e_source_set_property (source, "alarm", "never");
+			e_source_set_property (source, "foreign", "1");
+		}
 
 		e_source_set_property (source, "username", username);
 		e_source_set_property (source, "auth-domain", "Exchange");
@@ -151,8 +153,10 @@
 			else
 				e_source_set_property (source, "auth", "1");
 
-			if (foriegn_folder && (folder_type != EXCHANGE_CONTACTS_FOLDER))
+			if (foriegn_folder && (folder_type != EXCHANGE_CONTACTS_FOLDER)) {
 				e_source_set_property (source, "alarm", "never");
+				e_source_set_property (source, "foreign", "1");
+			}
 
 			e_source_group_add_source (source_group, source, -1);
 			source_new = TRUE;
--- servers/exchange/storage/exchange-account.h	(revision 7574)
+++ servers/exchange/storage/exchange-account.h	(working copy)
@@ -89,6 +89,7 @@
 char                  *exchange_account_get_foreign_uri      (ExchangeAccount  *acct,
 							      E2kGlobalCatalogEntry *entry,
 							      const char       *std_uri_prop);
+ExchangeHierarchy     *exchange_account_get_hierarchy_by_email (ExchangeAccount *account, const char *email);
 
 char 		      *exchange_account_get_authtype 	     (ExchangeAccount *account);
 
--- servers/exchange/storage/exchange-account.c	(revision 7574)
+++ servers/exchange/storage/exchange-account.c	(working copy)
@@ -1767,6 +1767,42 @@
 }
 
 /**
+ * exchange_account_get_hierarchy_by_email:
+ * @account: an #ExchangeAccount
+ * @email: email id of the foreign user
+ *
+ * If the hierarchy is present just return it back. Else try to get it
+ * from the filesystem and return it. 
+ *
+ * Return value: Returns the ExchangeHierarchy of the foreign user's folder.
+ **/
+
+ExchangeHierarchy *
+exchange_account_get_hierarchy_by_email (ExchangeAccount *account, const char *email)
+{
+	char *dir;
+	ExchangeHierarchy *hier = NULL;
+	int mode;
+
+	g_return_val_if_fail (email != NULL, NULL);
+
+	hier = g_hash_table_lookup (account->priv->foreign_hierarchies, email);
+	if (!hier) {
+		dir = g_strdup_printf ("%s/%s", account->storage_dir, email);
+		if (g_file_test (dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) {
+			hier = exchange_hierarchy_foreign_new_from_dir (account, dir);
+			g_free (dir);
+			if (hier) {
+				exchange_account_is_offline (account, &mode);
+				setup_hierarchy_foreign (account, hier);
+			}
+		}
+	}
+
+	return hier;
+ }
+
+/**
  * exchange_account_get_folder:
  * @account: an #ExchangeAccount
  * @path_or_uri: the shell path or URI referring to the folder
			
openSUSE Build Service is sponsored by