[evolution-ews] Adapt to CamelService API changes.
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-ews] Adapt to CamelService API changes.
- Date: Sun, 12 Aug 2012 20:07:44 +0000 (UTC)
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]