[evolution-mapi] Adapt to CamelService API changes.



commit 2f2d1fbd02ac4b7472fcea3b7332d18302103d9f
Author: Matthew Barnes <mbarnes redhat com>
Date:   Sun Aug 12 16:00:47 2012 -0400

    Adapt to CamelService API changes.
    
    camel_service_get_settings() is now camel_service_ref_settings()
    and it returns a new CamelSettings reference which the caller must
    release with g_object_unref().

 src/camel/camel-mapi-folder.c                      |   26 ++++--
 src/camel/camel-mapi-store.c                       |   93 ++++++++++++++------
 src/camel/camel-mapi-transport.c                   |   39 ++++++---
 src/configuration/e-mapi-config-utils.c            |   38 +++++---
 .../e-mapi-subscribe-foreign-folder.c              |   14 ++-
 5 files changed, 147 insertions(+), 63 deletions(-)
---
diff --git a/src/camel/camel-mapi-folder.c b/src/camel/camel-mapi-folder.c
index c5d23dd..451c418 100644
--- a/src/camel/camel-mapi-folder.c
+++ b/src/camel/camel-mapi-folder.c
@@ -766,11 +766,14 @@ camel_mapi_folder_fetch_summary (CamelFolder *folder, GCancellable *cancellable,
 
 	camel_folder_freeze (folder);
 
-	settings = camel_service_get_settings (CAMEL_SERVICE (store));
+	settings = camel_service_ref_settings (CAMEL_SERVICE (store));
+
 	full_download =
 		camel_offline_settings_get_stay_synchronized (CAMEL_OFFLINE_SETTINGS (settings)) ||
 		camel_offline_folder_get_offline_sync (CAMEL_OFFLINE_FOLDER (folder));
 
+	g_object_unref (settings);
+
 	camel_operation_push_message (cancellable, _("Refreshing folder '%s'"), camel_folder_get_display_name (folder));
 
 	si = camel_mapi_store_summary_get_folder_id (mapi_store->summary, mapi_folder->folder_id);
@@ -1111,25 +1114,31 @@ mapi_folder_constructed (GObject *object)
 	CamelService *service;
 	CamelFolder *folder;
 	const gchar *full_name;
-	const gchar *host;
-	const gchar *user;
 	gchar *description;
+	gchar *host;
+	gchar *user;
 
 	folder = CAMEL_FOLDER (object);
 	full_name = camel_folder_get_full_name (folder);
 	parent_store = camel_folder_get_parent_store (folder);
 
 	service = CAMEL_SERVICE (parent_store);
-	settings = camel_service_get_settings (service);
+
+	settings = camel_service_ref_settings (service);
 
 	network_settings = CAMEL_NETWORK_SETTINGS (settings);
-	host = camel_network_settings_get_host (network_settings);
-	user = camel_network_settings_get_user (network_settings);
+	host = camel_network_settings_dup_host (network_settings);
+	user = camel_network_settings_dup_user (network_settings);
+
+	g_object_unref (settings);
 
 	description = g_strdup_printf (
 		"%s %s:%s", user, host, full_name);
 	camel_folder_set_description (folder, description);
 	g_free (description);
+
+	g_free (host);
+	g_free (user);
 }
 
 struct CamelMapiCreateData
@@ -2015,10 +2024,13 @@ camel_mapi_folder_new (CamelStore *store,
 	gboolean filter_inbox;
 
 	service = CAMEL_SERVICE (store);
-	settings = camel_service_get_settings (service);
+
+	settings = camel_service_ref_settings (service);
 
 	filter_inbox = camel_store_settings_get_filter_inbox (CAMEL_STORE_SETTINGS (settings));
 
+	g_object_unref (settings);
+
 	short_name = strrchr (folder_name, '/');
 	if (short_name)
 		short_name++;
diff --git a/src/camel/camel-mapi-store.c b/src/camel/camel-mapi-store.c
index 14e7a45..7dbd56f 100644
--- a/src/camel/camel-mapi-store.c
+++ b/src/camel/camel-mapi-store.c
@@ -715,7 +715,8 @@ mapi_get_folder_info_offline (CamelStore *store,
 			      GError **error)
 {
 	CamelMapiStore *mapi_store = CAMEL_MAPI_STORE (store);
-	CamelMapiSettings *settings;
+	CamelSettings *settings;
+	CamelMapiSettings *mapi_settings;
 	CamelFolderInfo *fi;
 	ESourceRegistry *registry = NULL;
 	GList *my_sources = NULL;
@@ -724,11 +725,18 @@ mapi_get_folder_info_offline (CamelStore *store,
 	gint i, count;
 	gboolean subscribed, subscription_list = FALSE;
 	gboolean has_public_folders = FALSE, has_foreign_folders = FALSE;
+	gchar *profile;
 
 	subscription_list = (flags & CAMEL_STORE_FOLDER_INFO_SUBSCRIPTION_LIST);
 	subscribed = (flags & CAMEL_STORE_FOLDER_INFO_SUBSCRIBED);
 
-	settings = CAMEL_MAPI_SETTINGS (camel_service_get_settings (CAMEL_SERVICE (store)));
+	settings = camel_service_ref_settings (CAMEL_SERVICE (store));
+
+	mapi_settings = CAMEL_MAPI_SETTINGS (settings);
+	profile = camel_mapi_settings_dup_profile (mapi_settings);
+
+	g_object_unref (settings);
+
 	folders = g_ptr_array_new ();
 
 	if (subscription_list) {
@@ -738,8 +746,7 @@ mapi_get_folder_info_offline (CamelStore *store,
 		if (registry) {
 			GList *all_sources = e_source_registry_list_sources (registry, NULL);
 
-			my_sources = e_mapi_utils_filter_sources_for_profile (all_sources,
-				camel_mapi_settings_get_profile (settings));
+			my_sources = e_mapi_utils_filter_sources_for_profile (all_sources, profile);
 
 			g_list_free_full (all_sources, g_object_unref);
 		}
@@ -812,9 +819,7 @@ mapi_get_folder_info_offline (CamelStore *store,
 
 				folder_type = mapi_folders_hash_table_type_lookup (mapi_store, camel_store_info_path (mapi_store->summary, si));
 				if (folder_type != E_MAPI_FOLDER_TYPE_UNKNOWN && folder_type != E_MAPI_FOLDER_TYPE_MAIL) {
-					if (e_mapi_folder_is_subscribed_as_esource (my_sources,
-						camel_mapi_settings_get_profile (settings),
-						msi->folder_id))
+					if (e_mapi_folder_is_subscribed_as_esource (my_sources, profile, msi->folder_id))
 						fi->flags |= CAMEL_FOLDER_SUBSCRIBED;
 				}
 			}
@@ -856,6 +861,8 @@ mapi_get_folder_info_offline (CamelStore *store,
 	if (registry)
 		g_object_unref (registry);
 
+	g_free (profile);
+
 	return fi;
 }
 
@@ -1045,6 +1052,7 @@ mapi_store_can_refresh_folder (CamelStore *store,
 {
 	CamelService *service;
 	CamelSettings *settings;
+	CamelMapiSettings *mapi_settings;
 	gboolean check_all;
 
 	/* skip unselectable folders from automatic refresh */
@@ -1052,11 +1060,18 @@ mapi_store_can_refresh_folder (CamelStore *store,
 		return FALSE;
 
 	service = CAMEL_SERVICE (store);
-	settings = camel_service_get_settings (service);
 
-	check_all = camel_mapi_settings_get_check_all (CAMEL_MAPI_SETTINGS (settings));
+	settings = camel_service_ref_settings (service);
+
+	mapi_settings = CAMEL_MAPI_SETTINGS (settings);
+	check_all = camel_mapi_settings_get_check_all (mapi_settings);
+
+	g_object_unref (settings);
+
+	if (check_all)
+		return TRUE;
 
-	return CAMEL_STORE_CLASS(camel_mapi_store_parent_class)->can_refresh_folder (store, info, error) || check_all;
+	return CAMEL_STORE_CLASS(camel_mapi_store_parent_class)->can_refresh_folder (store, info, error);
 }
 
 static gchar *
@@ -1819,16 +1834,19 @@ mapi_store_subscribe_folder_sync (CamelSubscribable *subscribable,
 		CamelSettings *settings;
 		CamelMapiSettings *mapi_settings;
 		guint folder_type = mapi_folders_hash_table_type_lookup (mapi_store, folder_name);
+		gchar *profile;
 
 		/* remember the folder, thus it can be removed and checked in Subscriptions dialog */
 		msi->camel_folder_flags = msi->camel_folder_flags | CAMEL_FOLDER_SUBSCRIBED | CAMEL_STORE_INFO_FOLDER_SUBSCRIBED | CAMEL_FOLDER_NOCHILDREN;
 		camel_store_summary_touch (mapi_store->summary);
 
-		settings = camel_service_get_settings (CAMEL_SERVICE (mapi_store));
+		settings = camel_service_ref_settings (CAMEL_SERVICE (mapi_store));
 		mapi_settings = CAMEL_MAPI_SETTINGS (settings);
+		profile = camel_mapi_settings_dup_profile (mapi_settings);
 
-		if (!e_mapi_folder_add_as_esource (NULL, folder_type,
-			camel_mapi_settings_get_profile (mapi_settings),
+		g_object_unref (settings);
+
+		if (!e_mapi_folder_add_as_esource (NULL, folder_type, profile,
 			TRUE /* camel_offline_settings_get_stay_synchronized (CAMEL_OFFLINE_SETTINGS (mapi_settings)) */,
 			E_MAPI_FOLDER_CATEGORY_PUBLIC,
 			NULL,
@@ -1838,10 +1856,13 @@ mapi_store_subscribe_folder_sync (CamelSubscribable *subscribable,
 			cancellable,
 			error)) {
 			camel_store_summary_info_free (mapi_store->summary, si);
+			g_free (profile);
 			g_free (path);
 
 			return FALSE;
 		}
+
+		g_free (profile);
 	}
 	camel_store_summary_info_free (mapi_store->summary, si);
 	camel_store_summary_save (mapi_store->summary);
@@ -1899,15 +1920,19 @@ mapi_store_unsubscribe_folder_sync (CamelSubscribable *subscribable,
 			g_debug ("%s: Failed to find subscribed by folder ID", G_STRFUNC);
 		}
 	} else {
-		CamelMapiSettings *settings;
+		CamelSettings *settings;
+		const gchar *profile;
 
-		settings = CAMEL_MAPI_SETTINGS (camel_service_get_settings (CAMEL_SERVICE (mapi_store)));
+		settings = camel_service_ref_settings (CAMEL_SERVICE (mapi_store));
+		profile = camel_mapi_settings_get_profile (CAMEL_MAPI_SETTINGS (settings));
 
 		res = e_mapi_folder_remove_as_esource (NULL,
-			camel_mapi_settings_get_profile (settings),
+			profile,
 			msi->folder_id,
 			cancellable,
 			error);
+
+		g_object_unref (profile);
 	}
 
 	if ((msi->mapi_folder_flags & CAMEL_MAPI_STORE_FOLDER_FLAG_PUBLIC) != 0 &&
@@ -2061,24 +2086,32 @@ mapi_get_name(CamelService *service, gboolean brief)
 {
 	CamelNetworkSettings *network_settings;
 	CamelSettings *settings;
-	const gchar *host;
-	const gchar *user;
+	gchar *host;
+	gchar *name;
+	gchar *user;
 
-	settings = camel_service_get_settings (service);
+	settings = camel_service_ref_settings (service);
 
 	network_settings = CAMEL_NETWORK_SETTINGS (settings);
-	host = camel_network_settings_get_host (network_settings);
-	user = camel_network_settings_get_user (network_settings);
+	host = camel_network_settings_dup_host (network_settings);
+	user = camel_network_settings_dup_user (network_settings);
+
+	g_object_unref (settings);
 
 	if (brief) {
 		/* Translators: The %s is replaced with a server's host name */
-		return g_strdup_printf(_("Exchange MAPI server %s"), host);
+		name = g_strdup_printf(_("Exchange MAPI server %s"), host);
 	} else {
 		/*To translators : Example string : Exchange MAPI service for
 		  _username_ on _server host name__*/
-		return g_strdup_printf(_("Exchange MAPI service for %s on %s"),
+		name = g_strdup_printf(_("Exchange MAPI service for %s on %s"),
 				       user, host);
 	}
+
+	g_free (host);
+	g_free (user);
+
+	return name;
 }
 
 static gboolean
@@ -2089,6 +2122,7 @@ mapi_connect_sync (CamelService *service,
 	CamelMapiStore *store = CAMEL_MAPI_STORE (service);
 	CamelServiceConnectionStatus status;
 	CamelSession *session;
+	CamelSettings *settings;
 	EMapiProfileData empd = { 0 };
 	uint64_t current_size = -1, receive_quota = -1, send_quota = -1;
 	gchar *name;
@@ -2113,7 +2147,9 @@ mapi_connect_sync (CamelService *service,
 	name = camel_service_get_name (service, TRUE);
 	camel_operation_push_message (cancellable, _("Connecting to '%s'"), name);
 
-	e_mapi_util_profiledata_from_settings (&empd, CAMEL_MAPI_SETTINGS (camel_service_get_settings (service)));
+	settings = camel_service_ref_settings (service);
+	e_mapi_util_profiledata_from_settings (&empd, CAMEL_MAPI_SETTINGS (settings));
+	g_object_unref (settings);
 
 	if (!camel_session_authenticate_sync (session, service, empd.krb_sso ? "MAPIKRB" : NULL, cancellable, error)) {
 		camel_operation_pop_message (cancellable);
@@ -2535,7 +2571,7 @@ mapi_authenticate_sync (CamelService *service,
 	GError *mapi_error = NULL;
 	GString *password_str;
 
-	settings = camel_service_get_settings (service);
+	settings = camel_service_ref_settings (service);
 	mapi_settings = CAMEL_MAPI_SETTINGS (settings);
 	network_settings = CAMEL_NETWORK_SETTINGS (settings);
 
@@ -2546,8 +2582,10 @@ mapi_authenticate_sync (CamelService *service,
 	profile = camel_mapi_settings_get_profile (mapi_settings);
 
 	if (empd.krb_sso) {
-		if (!e_mapi_util_trigger_krb_auth (&empd, error))
+		if (!e_mapi_util_trigger_krb_auth (&empd, error)) {
+			g_object_unref (settings);
 			return CAMEL_AUTHENTICATION_ERROR;
+		}
 
 		password = NULL;
 	} else {
@@ -2558,6 +2596,7 @@ mapi_authenticate_sync (CamelService *service,
 				error, CAMEL_SERVICE_ERROR,
 				CAMEL_SERVICE_ERROR_CANT_AUTHENTICATE,
 				_("Authentication password not available"));
+			g_object_unref (settings);
 			return CAMEL_AUTHENTICATION_ERROR;
 		}
 	}
@@ -2599,6 +2638,8 @@ mapi_authenticate_sync (CamelService *service,
 		result = CAMEL_AUTHENTICATION_ERROR;
 	}
 
+	g_object_unref (settings);
+
 	return result;
 }
 
diff --git a/src/camel/camel-mapi-transport.c b/src/camel/camel-mapi-transport.c
index d22aaac..f9ed7c7 100644
--- a/src/camel/camel-mapi-transport.c
+++ b/src/camel/camel-mapi-transport.c
@@ -86,7 +86,7 @@ mapi_send_to_sync (CamelTransport *transport,
 	mapi_object_t obj_folder;
 	CamelService *service;
 	CamelSettings *settings;
-	const gchar *profile;
+	gchar *profile;
 	GError *mapi_error = NULL;
 
 	if (!camel_internet_address_get (CAMEL_INTERNET_ADDRESS (from), 0, &namep, &addressp)) {
@@ -96,8 +96,11 @@ mapi_send_to_sync (CamelTransport *transport,
 	g_return_val_if_fail (CAMEL_IS_SERVICE (transport), FALSE);
 
 	service = CAMEL_SERVICE (transport);
-	settings = camel_service_get_settings (service);
-	profile = camel_mapi_settings_get_profile (CAMEL_MAPI_SETTINGS (settings));
+
+	settings = camel_service_ref_settings (service);
+	profile = camel_mapi_settings_dup_profile (CAMEL_MAPI_SETTINGS (settings));
+	g_object_unref (settings);
+
 	if (!profile) {
 		/* try to find corresponding CamelStore with profile name filled */
 		const gchar *my_uid = camel_service_get_uid (service);
@@ -119,8 +122,9 @@ mapi_send_to_sync (CamelTransport *transport,
 			if (g_strcmp0 (my_uid, store_uid) == 0 ||
 			    g_str_has_prefix (my_uid, store_uid) ||
 			    g_str_has_prefix (store_uid, my_uid)) {
-				settings = camel_service_get_settings (store);
-				profile = camel_mapi_settings_get_profile (CAMEL_MAPI_SETTINGS (settings));
+				settings = camel_service_dup_settings (store);
+				profile = camel_mapi_settings_dup_profile (CAMEL_MAPI_SETTINGS (settings));
+				g_object_unref (settings);
 			}
 		}
 
@@ -128,6 +132,9 @@ mapi_send_to_sync (CamelTransport *transport,
 	}
 
 	conn = e_mapi_connection_find (profile);
+
+	g_free (profile);
+
 	if (!conn) {
 		g_set_error (
 			error, CAMEL_SERVICE_ERROR,
@@ -167,23 +174,31 @@ mapi_transport_get_name(CamelService *service, gboolean brief)
 {
 	CamelNetworkSettings *network_settings;
 	CamelSettings *settings;
-	const gchar *host;
-	const gchar *user;
+	gchar *host;
+	gchar *name;
+	gchar *user;
 
-	settings = camel_service_get_settings (service);
+	settings = camel_service_ref_settings (service);
 
 	network_settings = CAMEL_NETWORK_SETTINGS (settings);
-	host = camel_network_settings_get_host (network_settings);
-	user = camel_network_settings_get_user (network_settings);
+	host = camel_network_settings_dup_host (network_settings);
+	user = camel_network_settings_dup_user (network_settings);
+
+	g_object_unref (settings);
 
 	if (brief) {
 		/* Translators: The %s is replaced with a server's host name */
-		return g_strdup_printf (_("Exchange MAPI server %s"), host);
+		name = g_strdup_printf (_("Exchange MAPI server %s"), host);
 	} else {
 		/* Translators: The first %s is replaced with a user name, the second with a server's host name */
-		return g_strdup_printf (_("Exchange MAPI service for %s on %s"),
+		name = g_strdup_printf (_("Exchange MAPI service for %s on %s"),
 					user, host);
 	}
+
+	g_free (host);
+	g_free (user);
+
+	return name;
 }
 
 static void
diff --git a/src/configuration/e-mapi-config-utils.c b/src/configuration/e-mapi-config-utils.c
index 2c50ab7..6ba619a 100644
--- a/src/configuration/e-mapi-config-utils.c
+++ b/src/configuration/e-mapi-config-utils.c
@@ -620,8 +620,10 @@ get_profile_name_from_folder_tree (EShellView *shell_view,
 				CamelSettings *settings;
 
 				service = CAMEL_SERVICE (selected_store);
-				settings = camel_service_get_settings (service);
+
+				settings = camel_service_ref_settings (service);
 				g_object_get (settings, "profile", &profile, NULL);
+				g_object_unref (settings);
 
 				if (pstore && profile)
 					*pstore = g_object_ref (selected_store);
@@ -652,20 +654,23 @@ action_folder_size_cb (GtkAction *action,
 	gchar *profile;
 	CamelSession *session;
 	CamelStore *store = NULL;
-	CamelMapiSettings *mapi_settings;
 
 	profile = get_profile_name_from_folder_tree (shell_view, NULL, &store);
 	if (profile && store) {
+		CamelSettings *settings;
 		ESourceRegistry *registry;
 		ESource *source;
 
-		mapi_settings = CAMEL_MAPI_SETTINGS (camel_service_get_settings (CAMEL_SERVICE (store)));
 		session = camel_service_get_session (CAMEL_SERVICE (store));
 		registry = e_mail_session_get_registry (E_MAIL_SESSION (session));
 		source = e_source_registry_ref_source (registry, camel_service_get_uid (CAMEL_SERVICE (store)));
 
+		settings = camel_service_ref_settings (CAMEL_SERVICE (store));
+
 		e_mapi_config_utils_run_folder_size_dialog (
-			registry, source, mapi_settings);
+			registry, source, CAMEL_MAPI_SETTINGS (settings));
+
+		g_object_unref (settings);
 
 		g_object_unref (source); 
 	}
@@ -709,7 +714,6 @@ action_folder_permissions_mail_cb (GtkAction *action,
 	GtkWindow *parent;
 	CamelStore *store = NULL;
 	CamelMapiStore *mapi_store;
-	CamelNetworkSettings *network_settings;
 	CamelStoreInfo *si;
 
 	profile = get_profile_name_from_folder_tree (shell_view, &folder_path, &store);
@@ -720,9 +724,6 @@ action_folder_permissions_mail_cb (GtkAction *action,
 	g_return_if_fail (mapi_store != NULL);
 	g_return_if_fail (folder_path != NULL);
 
-	network_settings = CAMEL_NETWORK_SETTINGS (camel_service_get_settings (CAMEL_SERVICE (store)));
-	g_return_if_fail (network_settings != NULL);
-
 	shell_window = e_shell_view_get_shell_window (shell_view);
 	parent = GTK_WINDOW (shell_window);
 
@@ -733,14 +734,17 @@ action_folder_permissions_mail_cb (GtkAction *action,
 		CamelMapiStoreInfo *msi = (CamelMapiStoreInfo *) si;
 		ESourceRegistry *registry = e_shell_get_registry (e_shell_window_get_shell (shell_window));
 		ESource *source;
+		CamelSettings *settings;
 
 		source = e_source_registry_ref_source (registry, camel_service_get_uid (CAMEL_SERVICE (store)));
 		g_return_if_fail (source != NULL);
 
+		settings = camel_service_ref_settings (CAMEL_SERVICE (store));
+
 		e_mapi_edit_folder_permissions (parent,
 			registry,
 			source,
-			CAMEL_MAPI_SETTINGS (network_settings),
+			CAMEL_MAPI_SETTINGS (settings),
 			camel_service_get_display_name (CAMEL_SERVICE (store)),
 			folder_path,
 			msi->folder_id,
@@ -750,6 +754,8 @@ action_folder_permissions_mail_cb (GtkAction *action,
 			msi->foreign_username,
 			FALSE);
 
+		g_object_unref (settings);
+
 		g_object_unref (source);
 	}
 
@@ -1057,7 +1063,8 @@ action_folder_permissions_source_cb (GtkAction *action,
 
 	extension_name = e_source_camel_get_extension_name ("mapi");
 	extension = e_source_get_extension (parent_source, extension_name);
-	settings = e_source_camel_get_settings (extension);
+
+	settings = e_source_camel_ref_settings (extension);
 
 	e_mapi_edit_folder_permissions (NULL,
 		registry,
@@ -1072,6 +1079,8 @@ action_folder_permissions_source_cb (GtkAction *action,
 		foreign_username,
 		strstr (gtk_action_get_name (action), "calendar") != NULL);
 
+	g_object_unref (settings);
+
 	g_object_unref (source);
 	g_object_unref (parent_source);
 	g_object_unref (registry);
@@ -1508,7 +1517,6 @@ e_mapi_download_folder_structure_thread (GObject *source_obj,
 	ESourceCamel *extension;
 	EMapiConnection *conn;
 	CamelSettings *settings;
-	CamelMapiSettings *mapi_settings;
 
 	g_return_if_fail (fsd != NULL);
 	g_return_if_fail (fsd->tree_view != NULL);
@@ -1521,16 +1529,18 @@ e_mapi_download_folder_structure_thread (GObject *source_obj,
 	g_return_if_fail (e_source_has_extension (source, extension_name));
 
 	extension = e_source_get_extension (source, extension_name);
-	settings = e_source_camel_get_settings (extension);
-	mapi_settings = CAMEL_MAPI_SETTINGS (settings);
+
+	settings = e_source_camel_ref_settings (extension);
 
 	conn = e_mapi_config_utils_open_connection_for (NULL,
 		fsd->registry,
 		source,
-		mapi_settings,
+		CAMEL_MAPI_SETTINGS (settings),
 		cancellable,
 		perror);
 
+	g_object_unref (settings);
+
 	if (!conn)
 		return;
 
diff --git a/src/configuration/e-mapi-subscribe-foreign-folder.c b/src/configuration/e-mapi-subscribe-foreign-folder.c
index bd53893..7fc0002 100644
--- a/src/configuration/e-mapi-subscribe-foreign-folder.c
+++ b/src/configuration/e-mapi-subscribe-foreign-folder.c
@@ -375,6 +375,7 @@ check_foreign_folder_idle (GObject *with_object,
 	ESourceRegistry *registry = NULL;
 	CamelSession *session;
 	EMapiFolderType folder_type;
+	gchar *profile;
 
 	g_return_if_fail (with_object != NULL);
 	g_return_if_fail (CAMEL_IS_MAPI_STORE (with_object));
@@ -396,8 +397,14 @@ check_foreign_folder_idle (GObject *with_object,
 	folder_name = g_strdup_printf (C_("ForeignFolder", "%s - %s"), base_username, base_foldername);
 
 	mapi_store = CAMEL_MAPI_STORE (with_object);
-	settings = camel_service_get_settings (CAMEL_SERVICE (mapi_store));
+
+	settings = camel_service_ref_settings (CAMEL_SERVICE (mapi_store));
+
 	mapi_settings = CAMEL_MAPI_SETTINGS (settings);
+	profile = camel_mapi_settings_dup_profile (mapi_settings);
+
+	g_object_unref (settings);
+
 	session = camel_service_get_session (CAMEL_SERVICE (mapi_store));
 	if (E_IS_MAIL_SESSION (session))
 		registry = e_mail_session_get_registry (E_MAIL_SESSION (session));
@@ -411,9 +418,7 @@ check_foreign_folder_idle (GObject *with_object,
 		base_username,
 		base_foldername,
 		perror)) ||
-	    (folder_type != E_MAPI_FOLDER_TYPE_MAIL && !e_mapi_folder_add_as_esource (registry,
-		folder_type,
-		camel_mapi_settings_get_profile (mapi_settings),
+	    (folder_type != E_MAPI_FOLDER_TYPE_MAIL && !e_mapi_folder_add_as_esource (registry, folder_type, profile,
 		TRUE /* camel_offline_settings_get_stay_synchronized (CAMEL_OFFLINE_SETTINGS (mapi_settings)) */,
 		E_MAPI_FOLDER_CATEGORY_FOREIGN,
 		cffd->username,
@@ -427,6 +432,7 @@ check_foreign_folder_idle (GObject *with_object,
 	}
 
 	g_free (folder_name);
+	g_free (profile);
 }
 
 static void



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