[evolution-ews] Adapt to CamelService API changes.



commit 08dfed5888e2cd34d6fdb70bd20b2f4270a81f89
Author: Matthew Barnes <mbarnes redhat com>
Date:   Sun Aug 12 15:23:19 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-ews-folder.c           |   28 +++++++++++----
 src/camel/camel-ews-store.c            |   61 +++++++++++++++++++++++++-------
 src/camel/camel-ews-transport.c        |   58 ++++++++++++++++++++----------
 src/configuration/e-ews-config-utils.c |   31 +++++++++++-----
 4 files changed, 128 insertions(+), 50 deletions(-)
---
diff --git a/src/camel/camel-ews-folder.c b/src/camel/camel-ews-folder.c
index 438fb4b..c0b6d75 100644
--- a/src/camel/camel-ews-folder.c
+++ b/src/camel/camel-ews-folder.c
@@ -1121,10 +1121,18 @@ camel_ews_folder_new (CamelStore *store,
 	}
 
 	if (!g_ascii_strcasecmp (folder_name, "Inbox")) {
-		CamelStoreSettings *settings = CAMEL_STORE_SETTINGS (camel_service_get_settings (CAMEL_SERVICE (store)));
+		CamelSettings *settings;
+		gboolean filter_inbox;
 
-		if (camel_store_settings_get_filter_inbox (settings))
+		settings = camel_service_ref_settings (CAMEL_SERVICE (store));
+
+		filter_inbox = camel_store_settings_get_filter_inbox (
+			CAMEL_STORE_SETTINGS (settings));
+
+		if (filter_inbox)
 			folder->folder_flags |= CAMEL_FOLDER_FILTER_RECENT;
+
+		g_object_unref (settings);
 	}
 
 	ews_folder->search = camel_folder_search_new ();
@@ -1749,25 +1757,31 @@ ews_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);
 }
 
 static void
diff --git a/src/camel/camel-ews-store.c b/src/camel/camel-ews-store.c
index b73bfd2..9ee158b 100644
--- a/src/camel/camel-ews-store.c
+++ b/src/camel/camel-ews-store.c
@@ -262,8 +262,18 @@ ews_disconnect_sync (CamelService *service,
 
 	/* TODO cancel all operations in the connection */
 	if (ews_store->priv->connection != NULL) {
-		g_signal_handlers_disconnect_by_data (
-			camel_service_get_settings (service), service);
+		CamelSettings *settings;
+
+		/* FIXME This is somewhat broken, since the CamelSettings
+		 *       instance returned here may not be the same instance
+		 *       that we connected a signal handler to.  Need to keep
+		 *       our own reference to that CamelSettings instance, or
+		 *       better yet avoid connecting signal handlers to it in
+		 *       the first place. */
+		settings = camel_service_ref_settings (service);
+		g_signal_handlers_disconnect_by_data (settings, service);
+		g_object_unref (settings);
+
 		e_ews_connection_set_password (
 			ews_store->priv->connection, NULL);
 		g_object_unref (ews_store->priv->connection);
@@ -355,7 +365,7 @@ ews_authenticate_sync (CamelService *service,
 		return CAMEL_AUTHENTICATION_ERROR;
 	}
 
-	settings = camel_service_get_settings (service);
+	settings = camel_service_ref_settings (service);
 
 	ews_settings = CAMEL_EWS_SETTINGS (settings);
 	hosturl = camel_ews_settings_dup_hosturl (ews_settings);
@@ -365,6 +375,8 @@ ews_authenticate_sync (CamelService *service,
 
 	g_free (hosturl);
 
+	g_object_unref (settings);
+
 	/* XXX We need to run some operation that requires authentication
 	 *     but does not change any server-side state, so we can check
 	 *     the error status and determine if our password is valid.
@@ -1032,21 +1044,29 @@ ews_get_name (CamelService *service,
 {
 	CamelNetworkSettings *network_settings;
 	CamelSettings *settings;
-	const gchar *host;
-	const gchar *user;
+	gchar *name;
+	gchar *host;
+	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)
-		return g_strdup_printf (
+		name = g_strdup_printf (
 			_("Exchange server %s"), host);
 	else
-		return g_strdup_printf (
+		name = g_strdup_printf (
 			_("Exchange service for %s on %s"), user, host);
+
+	g_free (host);
+	g_free (user);
+
+	return name;
 }
 
 EEwsConnection *
@@ -1141,12 +1161,27 @@ ews_can_refresh_folder (CamelStore *store,
                         CamelFolderInfo *info,
                         GError **error)
 {
+	CamelSettings *settings;
+	CamelEwsSettings *ews_settings;
+	gboolean check_all;
+
 	/* Skip unselectable folders from automatic refresh */
-	if (info && (info->flags & CAMEL_FOLDER_NOSELECT) != 0) return FALSE;
+	if (info && (info->flags & CAMEL_FOLDER_NOSELECT) != 0)
+		return FALSE;
+
+	settings = camel_service_ref_settings (CAMEL_SERVICE (store));
+
+	ews_settings = CAMEL_EWS_SETTINGS (settings);
+	check_all = camel_ews_settings_get_check_all (ews_settings);
+
+	g_object_unref (settings);
+
+	if (check_all)
+		return TRUE;
 
 	/* Delegate decision to parent class */
-	return CAMEL_STORE_CLASS (camel_ews_store_parent_class)->can_refresh_folder (store, info, error) ||
-		camel_ews_settings_get_check_all (CAMEL_EWS_SETTINGS (camel_service_get_settings (CAMEL_SERVICE (store))));
+	return CAMEL_STORE_CLASS (camel_ews_store_parent_class)->
+		can_refresh_folder (store, info, error);
 }
 
 gboolean
diff --git a/src/camel/camel-ews-transport.c b/src/camel/camel-ews-transport.c
index bfc2553..195bd05 100644
--- a/src/camel/camel-ews-transport.c
+++ b/src/camel/camel-ews-transport.c
@@ -56,19 +56,26 @@ ews_transport_get_name (CamelService *service,
 {
 	CamelNetworkSettings *network_settings;
 	CamelSettings *settings;
-	const gchar *host;
+	gchar *host;
+	gchar *name;
 
-	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);
+	host = camel_network_settings_dup_host (network_settings);
+
+	g_object_unref (settings);
 
 	if (brief)
-		return g_strdup_printf (
+		name = g_strdup_printf (
 			_("Exchange server %s"), host);
 	else
-		return g_strdup_printf (
+		name = g_strdup_printf (
 			_("Exchange mail delivery via %s"), host);
+
+	g_free (host);
+
+	return name;
 }
 
 static gboolean
@@ -85,18 +92,23 @@ ews_send_to_sync (CamelTransport *transport,
 	CamelSettings *settings;
 	CamelService *service;
 	EEwsConnection *cnc;
-	const gchar *host_url;
-	const gchar *user;
-	gboolean res;
+	gchar *ews_email;
+	gchar *host_url;
+	gchar *user;
+	gboolean success = FALSE;
 
 	service = CAMEL_SERVICE (transport);
-	settings = camel_service_get_settings (service);
+
+	settings = camel_service_ref_settings (service);
 
 	ews_settings = CAMEL_EWS_SETTINGS (settings);
-	host_url = camel_ews_settings_get_hosturl (ews_settings);
+	ews_email = camel_ews_settings_dup_email (ews_settings);
+	host_url = camel_ews_settings_dup_hosturl (ews_settings);
 
 	network_settings = CAMEL_NETWORK_SETTINGS (settings);
-	user = camel_network_settings_get_user (network_settings);
+	user = camel_network_settings_dup_user (network_settings);
+
+	g_object_unref (settings);
 
 	used_from = camel_mime_message_get_from (message);
 
@@ -107,21 +119,22 @@ ews_send_to_sync (CamelTransport *transport,
 		g_set_error_literal (
 			error, CAMEL_ERROR, CAMEL_ERROR_GENERIC,
 			_("Cannot send message with no From address"));
-		return FALSE;
+		goto exit;
+
 	} else if (camel_address_length (CAMEL_ADDRESS (used_from)) > 1) {
 		g_set_error_literal (
 			error, CAMEL_ERROR, CAMEL_ERROR_GENERIC,
 			_("Exchange server cannot send message with multiple From addresses"));
-		return FALSE;
+		goto exit;
+
 	} else {
-		const gchar *ews_email = NULL, *used_email = NULL;
+		const gchar *used_email = NULL;
 
-		ews_email = camel_ews_settings_get_email (ews_settings);
 		if (!camel_internet_address_get (used_from, 0, NULL, &used_email)) {
 			g_set_error_literal (
 				error, CAMEL_ERROR, CAMEL_ERROR_GENERIC,
 				_("Failed to read From address"));
-			return FALSE;
+			goto exit;
 		}
 
 		if (!ews_email || !used_email || g_ascii_strcasecmp (ews_email, used_email) != 0) {
@@ -130,7 +143,7 @@ ews_send_to_sync (CamelTransport *transport,
 				_("Exchange server cannot send message as '%s', when the account was configured for address '%s'"),
 				used_email ? used_email : "NULL",
 				ews_email ? ews_email : "NULL");
-			return FALSE;
+			goto exit;
 		}
 	}
 
@@ -140,15 +153,20 @@ ews_send_to_sync (CamelTransport *transport,
 			error, CAMEL_SERVICE_ERROR,
 			CAMEL_SERVICE_ERROR_NOT_CONNECTED,
 			_("Service not connected"));
-		return FALSE;
+		goto exit;
 	}
 
-	res = camel_ews_utils_create_mime_message (
+	success = camel_ews_utils_create_mime_message (
 		cnc, "SendOnly", NULL, message, 0,
 		from, NULL, NULL, cancellable, error);
 	g_object_unref (cnc);
 
-	return res;
+exit:
+	g_free (ews_email);
+	g_free (host_url);
+	g_free (user);
+
+	return success;
 }
 
 static void
diff --git a/src/configuration/e-ews-config-utils.c b/src/configuration/e-ews-config-utils.c
index 2bf5970..4bcd550 100644
--- a/src/configuration/e-ews-config-utils.c
+++ b/src/configuration/e-ews-config-utils.c
@@ -492,7 +492,6 @@ action_folder_permissions_mail_cb (GtkAction *action,
 	GtkWindow *parent;
 	CamelStore *store = NULL;
 	CamelEwsStore *ews_store;
-	CamelNetworkSettings *network_settings;
 	gchar *str_folder_id;
 
 	if (!get_ews_store_from_folder_tree (shell_view, &folder_path, &store))
@@ -502,9 +501,6 @@ action_folder_permissions_mail_cb (GtkAction *action,
 	g_return_if_fail (ews_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);
 
@@ -512,28 +508,43 @@ action_folder_permissions_mail_cb (GtkAction *action,
 	if (!str_folder_id) {
 		e_notice (parent, GTK_MESSAGE_ERROR, _("Cannot edit permissions of folder '%s', choose other folder."), folder_path);
 	} else {
-		ESourceRegistry *registry = e_shell_get_registry (e_shell_window_get_shell (shell_window));
+		EShell *shell;
 		ESource *source;
+		ESourceRegistry *registry;
+		CamelService *service;
+		CamelSettings *settings;
 		EwsFolderId *folder_id;
 		gchar *str_change_key;
+		const gchar *uid;
+
+		shell = e_shell_window_get_shell (shell_window);
+		registry = e_shell_get_registry (shell);
 
-		source = e_source_registry_ref_source (registry, camel_service_get_uid (CAMEL_SERVICE (store)));
+		service = CAMEL_SERVICE (store);
+		uid = camel_service_get_uid (service);
+		source = e_source_registry_ref_source (registry, uid);
 		g_return_if_fail (source != NULL);
 
-		str_change_key = camel_ews_store_summary_get_change_key (ews_store->summary, str_folder_id, NULL);
+		str_change_key = camel_ews_store_summary_get_change_key (
+			ews_store->summary, str_folder_id, NULL);
 
-		folder_id = e_ews_folder_id_new (str_folder_id, str_change_key, FALSE);
+		folder_id = e_ews_folder_id_new (
+			str_folder_id, str_change_key, FALSE);
+
+		settings = camel_service_ref_settings (service);
 
 		e_ews_edit_folder_permissions (
 			parent,
 			registry,
 			source,
-			CAMEL_EWS_SETTINGS (network_settings),
-			camel_service_get_display_name (CAMEL_SERVICE (store)),
+			CAMEL_EWS_SETTINGS (settings),
+			camel_service_get_display_name (service),
 			folder_path,
 			folder_id,
 			E_EWS_FOLDER_TYPE_MAILBOX);
 
+		g_object_unref (settings);
+
 		g_object_unref (source);
 		g_free (str_folder_id);
 		g_free (str_change_key);



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