[evolution-ews] Adapt to Evolution's EMConfig API changes.



commit 21731bd8f14f99324a56a5ac8d85685d630491e2
Author: Matthew Barnes <mbarnes redhat com>
Date:   Sun Nov 6 12:18:00 2011 -0500

    Adapt to Evolution's EMConfig API changes.

 .../exchange-ews-account-setup.c                   |  477 +++++++++-----------
 .../org-gnome-exchange-ews.eplug.xml               |    6 +-
 src/camel/camel-ews-settings.c                     |  143 ++++++
 src/camel/camel-ews-settings.h                     |    9 +
 4 files changed, 377 insertions(+), 258 deletions(-)
---
diff --git a/src/account-setup-eplugin/exchange-ews-account-setup.c b/src/account-setup-eplugin/exchange-ews-account-setup.c
index cb16f52..06db88a 100644
--- a/src/account-setup-eplugin/exchange-ews-account-setup.c
+++ b/src/account-setup-eplugin/exchange-ews-account-setup.c
@@ -38,6 +38,7 @@
 #include <calendar/gui/e-cal-config.h>
 
 #include <camel-ews-folder.h>
+#include <camel-ews-settings.h>
 #include <e-ews-connection.h>
 #include <camel-ews-utils.h>
 #include <shell/e-shell.h>
@@ -81,12 +82,6 @@ e_plugin_lib_enable (EPlugin *ep, gint enable)
 	return 0;
 }
 
-static EAccount *
-get_modified_account (EMConfigTargetAccount *target)
-{
-	return target->modified_account;
-}
-
 ExchangeEWSAccountListener *
 exchange_ews_accounts_peek_config_listener ()
 {
@@ -124,23 +119,31 @@ static void autodiscover_callback (EwsUrls *urls, gpointer user_data, GError *er
 }
 
 static char *
-get_password (EMConfigTargetAccount *target_account)
+get_password (EMConfigTargetSettings *target_account)
 {
 	gchar *key, *password = NULL;
+	CamelSettings *settings;
 	CamelURL *url;
-	EAccount *account;
 
-	account = get_modified_account (target_account);
-	url = camel_url_new (e_account_get_string (account, E_ACCOUNT_SOURCE_URL), NULL);
+	settings = target_account->storage_settings;
 
+	url = g_malloc0 (sizeof (CamelURL));
+	camel_settings_save_to_url (settings, url);
 	key = camel_url_to_string (url, CAMEL_URL_HIDE_PARAMS);
+	camel_url_free (url);
+
 	password = e_passwords_get_password (EXCHANGE_EWS_PASSWORD_COMPONENT, key);
 	if (!password || !*password) {
-		gboolean remember = e_account_get_bool (account, E_ACCOUNT_SOURCE_SAVE_PASSWD);
+		CamelNetworkSettings *network_settings;
+		const gchar *host;
+		gboolean remember = TRUE;
 		gchar *title;
 
+		network_settings = CAMEL_NETWORK_SETTINGS (settings);
+		host = camel_network_settings_get_host (network_settings);
+
 		g_free (password);
-		title = g_strdup_printf (_("Enter Password for %s"), account->id->address);
+		title = g_strdup_printf (_("Enter Password for %s"), host);
 		password = e_passwords_ask_password (title, EXCHANGE_EWS_PASSWORD_COMPONENT, key, title,
                                                     E_PASSWORDS_REMEMBER_FOREVER|E_PASSWORDS_SECRET,
 						     &remember, NULL);
@@ -153,8 +156,7 @@ get_password (EMConfigTargetAccount *target_account)
 	}
 
 	g_free (key);
-	camel_url_free (url);
-	
+
 	return password;
 }
 
@@ -162,175 +164,160 @@ static void
 validate_credentials (GtkWidget *widget, struct _AutoDiscCallBackData *cbdata)
 {
 	EConfig *config = cbdata->config;
-	EMConfigTargetAccount *target_account = (EMConfigTargetAccount *)(config->target);
+	EMConfigTargetSettings *target_account = (EMConfigTargetSettings *)(config->target);
 	gchar *password = NULL;
 
 	password = get_password (target_account);
 	/*Can there be a account without password ?*/
 	if (password && *password) {
-		e_ews_autodiscover_ws_url (autodiscover_callback, cbdata,
-					   (get_modified_account (target_account))->id->address,
-					   password);
+		e_ews_autodiscover_ws_url (
+			autodiscover_callback, cbdata,
+			target_account->email_address,
+			password);
 	}
 	g_free (password);
 }
 
 static void
-url_changed (GtkWidget *entry, EConfig *config, const gchar *param)
-{
-	EMConfigTargetAccount *target = (EMConfigTargetAccount *)(config->target);
-	CamelURL *url = NULL;
-	const gchar *uri_str = NULL;
-	gchar *url_string = NULL;
-	EAccount *account;
-
-	account = get_modified_account (target);
-	url = camel_url_new (e_account_get_string(account, E_ACCOUNT_SOURCE_URL), NULL);
-	uri_str = gtk_entry_get_text (GTK_ENTRY(entry));
-
-	camel_url_set_param (url, param, uri_str);
-	url_string = camel_url_to_string (url, 0);
-	e_account_set_string (account, E_ACCOUNT_SOURCE_URL, url_string);
-	e_account_set_string (account, E_ACCOUNT_TRANSPORT_URL, url_string);
-	g_free (url_string);
-
-	camel_url_free (url);
-}
-
-static void
-host_url_changed (GtkWidget *entry, EConfig *config)
-{
-	url_changed (entry, config, "hosturl");
-}
-
-static void
 oab_url_changed (GtkWidget *entry, EConfig *config)
 {
-	url_changed (entry, config, "oaburl");
+	EMConfigTargetSettings *target = (EMConfigTargetSettings *)(config->target);
+	CamelEwsSettings *ews_settings;
+	const gchar *oaburl;
+
+	ews_settings = CAMEL_EWS_SETTINGS (target->storage_settings);
+	oaburl = gtk_entry_get_text (GTK_ENTRY (entry));
+	camel_ews_settings_set_oaburl (ews_settings, oaburl);
 }
 
 GtkWidget *
 org_gnome_exchange_ews_account_setup (EPlugin *epl, EConfigHookItemFactoryData *data)
 {
-	EMConfigTargetAccount *target_account;
-	CamelURL *url;
+	EMConfigTargetSettings *target_account;
+	CamelSettings *settings;
+	CamelEwsSettings *ews_settings;
+	CamelNetworkSettings *network_settings;
 	GtkWidget *hbox = NULL;
 	gint row;
+	GtkWidget *label, *oab_label;
+	GtkWidget *host_url, *oab_url;
+	GtkWidget *auto_discover;
+	const gchar *host;
+	const gchar *host_url_val;
+	const gchar *oab_url_val;
+	const gchar *temp, *email_id;
+	struct _AutoDiscCallBackData *cbdata;
+
+	target_account = (EMConfigTargetSettings *)data->config->target;
+	settings = target_account->storage_settings;
+
+	if (!CAMEL_IS_EWS_SETTINGS (settings))
+		return NULL;
 
-	target_account = (EMConfigTargetAccount *)data->config->target;
-	url = camel_url_new(e_account_get_string(get_modified_account (target_account), E_ACCOUNT_SOURCE_URL), NULL);
+	/* Verify the storage and transport settings are shared. */
+	g_warn_if_fail (
+		target_account->storage_settings ==
+		target_account->transport_settings);
 
-	/* is NULL on new account creation */
-	if (url == NULL)
-		return NULL;
+	ews_settings = CAMEL_EWS_SETTINGS (settings);
+	network_settings = CAMEL_NETWORK_SETTINGS (settings);
 
-	if (!g_ascii_strcasecmp (url->protocol, "ews")) {
-		GtkWidget *label, *oab_label;
-		GtkWidget *host_url, *oab_url;
-		GtkWidget *auto_discover;
-		const gchar *host_url_val = camel_url_get_param (url, "hosturl");
-		const gchar *oab_url_val = camel_url_get_param (url, "oaburl");
-		const gchar *temp, *email_id;
-		gchar *temp_host_url_val = NULL;
-		gchar *url_string;
-		struct _AutoDiscCallBackData *cbdata = g_new0 (struct _AutoDiscCallBackData, 1);
-		EAccount *account;
-		/* FIXME free cbdata */
-
-		g_object_get (data->parent, "n-rows", &row, NULL);
-		account = get_modified_account (target_account);
-
-		/* Set email_id */
-		email_id = account->id->address;
-		camel_url_set_param (url, "email", email_id);
-		temp = g_strstr_len (email_id, -1, "@");
-		/* Don't overwrite the URL if it's already been set */
-		if (temp && (!url->host || !url->host[0])) {
-			camel_url_set_host (url, temp + 1);
-		}
+	host = camel_network_settings_get_host (network_settings);
 
-		if (temp && (!host_url_val || !*host_url_val)) {
-			temp_host_url_val = g_strdup_printf ("https://exchange.%s/EWS/Exchange.asmx";, temp + 1);
-			host_url_val = temp_host_url_val;
-			camel_url_set_param (url, "hosturl", host_url_val);
-		}
+	host_url_val = camel_ews_settings_get_hosturl (ews_settings);
+	oab_url_val = camel_ews_settings_get_oaburl (ews_settings);
+	cbdata = g_new0 (struct _AutoDiscCallBackData, 1);
+	/* FIXME free cbdata */
 
-		url_string = camel_url_to_string (url, 0);
-		e_account_set_string (account, E_ACCOUNT_SOURCE_URL, url_string);
-		e_account_set_string (account, E_ACCOUNT_TRANSPORT_URL, url_string);
-		g_free (url_string);
-		
-		/* OAB url entry */
-		oab_label = gtk_label_new_with_mnemonic (_("OAB U_RL:"));
-		gtk_widget_show (oab_label);
-
-		oab_url = gtk_entry_new ();
-		gtk_label_set_mnemonic_widget (GTK_LABEL (oab_label), oab_url);
-		if (oab_url_val && *oab_url_val)
-			gtk_entry_set_text (GTK_ENTRY (oab_url), oab_url_val);
-		g_signal_connect (oab_url, "changed", G_CALLBACK (oab_url_changed), data->config);
-		gtk_widget_show (oab_url);
-
-		/* Host url and Autodiscover button */
-		hbox = gtk_hbox_new (FALSE, 6);
-		label = gtk_label_new_with_mnemonic (_("_Host URL:"));
-		gtk_widget_show (label);
-
-		host_url = gtk_entry_new ();
-		gtk_label_set_mnemonic_widget (GTK_LABEL (label), host_url);
-		if (host_url_val && *host_url_val)
-			gtk_entry_set_text (GTK_ENTRY (host_url), host_url_val);
-		else
-			gtk_entry_set_text (GTK_ENTRY (host_url), "https://exchange.server.com/EWS/Exchange.asmx";);
-		gtk_box_pack_start (GTK_BOX (hbox), host_url, TRUE, TRUE, 0);
-		g_signal_connect (host_url, "changed", G_CALLBACK(host_url_changed), data->config);
-
-		cbdata->config = data->config;
-		cbdata->host_entry = host_url;
-		cbdata->oab_entry = oab_url;
-		auto_discover = gtk_button_new_with_mnemonic (_("Fetch _URL"));
-		gtk_box_pack_start (GTK_BOX (hbox), auto_discover, FALSE, FALSE, 0);
-		g_signal_connect (G_OBJECT(auto_discover), "clicked",  G_CALLBACK(validate_credentials), cbdata);
-
-		/* Add Host entry */
-		gtk_table_attach (GTK_TABLE (data->parent), label, 0, 1, row, row+1, 0, 0, 0, 0);
-		gtk_widget_show_all (GTK_WIDGET (hbox));
-		gtk_table_attach (GTK_TABLE (data->parent), GTK_WIDGET (hbox), 1, 2, row, row+1, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0);
-		row++;
-
-		/* Add OAB entry */
-		gtk_table_attach (GTK_TABLE (data->parent), oab_label, 0, 1, row, row+1, 0, 0, 0, 0);
-		gtk_table_attach (GTK_TABLE (data->parent), oab_url, 1, 2, row, row+1, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0);
-		row++;
-
-		g_free (temp_host_url_val);
+	g_object_get (data->parent, "n-rows", &row, NULL);
+
+	/* Set email_id */
+	email_id = target_account->email_address;
+	camel_ews_settings_set_email (ews_settings, email_id);
+	temp = g_strstr_len (email_id, -1, "@");
+
+	/* Don't overwrite the host if it's already been set */
+	if (temp != NULL && (host == NULL || *host == '\0')) {
+		camel_network_settings_set_host (network_settings, temp + 1);
+		host = camel_network_settings_get_host (network_settings);
 	}
 
-	camel_url_free (url);
+	if (temp != NULL && (host_url_val == NULL || *host_url_val == '\0')) {
+		gchar *temp_host_url;
+
+		temp_host_url = g_strdup_printf (
+			"https://exchange.%s/EWS/Exchange.asmx";, temp + 1);
+		camel_ews_settings_set_hosturl (ews_settings, temp_host_url);
+		host_url_val = camel_ews_settings_get_hosturl (ews_settings);
+		g_free (temp_host_url);
+	}
+
+	/* OAB url entry */
+	oab_label = gtk_label_new_with_mnemonic (_("OAB U_RL:"));
+	gtk_widget_show (oab_label);
+
+	oab_url = gtk_entry_new ();
+	gtk_label_set_mnemonic_widget (GTK_LABEL (oab_label), oab_url);
+	if (oab_url_val && *oab_url_val)
+		gtk_entry_set_text (GTK_ENTRY (oab_url), oab_url_val);
+	g_signal_connect (oab_url, "changed", G_CALLBACK (oab_url_changed), data->config);
+	gtk_widget_show (oab_url);
+
+	/* Host url and Autodiscover button */
+	hbox = gtk_hbox_new (FALSE, 6);
+	label = gtk_label_new_with_mnemonic (_("_Host URL:"));
+	gtk_widget_show (label);
+
+	host_url = gtk_entry_new ();
+	gtk_label_set_mnemonic_widget (GTK_LABEL (label), host_url);
+	if (host_url_val && *host_url_val)
+		gtk_entry_set_text (GTK_ENTRY (host_url), host_url_val);
+	else
+		gtk_entry_set_text (GTK_ENTRY (host_url), "https://exchange.server.com/EWS/Exchange.asmx";);
+	gtk_box_pack_start (GTK_BOX (hbox), host_url, TRUE, TRUE, 0);
+
+	cbdata->config = data->config;
+	cbdata->host_entry = host_url;
+	cbdata->oab_entry = oab_url;
+	auto_discover = gtk_button_new_with_mnemonic (_("Fetch _URL"));
+	gtk_box_pack_start (GTK_BOX (hbox), auto_discover, FALSE, FALSE, 0);
+	g_signal_connect (G_OBJECT(auto_discover), "clicked",  G_CALLBACK(validate_credentials), cbdata);
+
+	/* Add Host entry */
+	gtk_table_attach (GTK_TABLE (data->parent), label, 0, 1, row, row+1, 0, 0, 0, 0);
+	gtk_widget_show_all (GTK_WIDGET (hbox));
+	gtk_table_attach (GTK_TABLE (data->parent), GTK_WIDGET (hbox), 1, 2, row, row+1, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0);
+	row++;
+
+	/* Add OAB entry */
+	gtk_table_attach (GTK_TABLE (data->parent), oab_label, 0, 1, row, row+1, 0, 0, 0, 0);
+	gtk_table_attach (GTK_TABLE (data->parent), oab_url, 1, 2, row, row+1, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0);
+	row++;
+
 	return hbox;
 }
 
 gboolean
 org_gnome_exchange_ews_check_options(EPlugin *epl, EConfigHookPageCheckData *data)
 {
-	EMConfigTargetAccount *target = (EMConfigTargetAccount *)(data->config->target);
+	EMConfigTargetSettings *target = (EMConfigTargetSettings *)(data->config->target);
+	CamelEwsSettings *ews_settings;
 	gboolean status = TRUE;
-	CamelURL *url;
 
-	url = camel_url_new (e_account_get_string(get_modified_account (target), E_ACCOUNT_SOURCE_URL), NULL);
+	if (!CAMEL_IS_EWS_SETTINGS (target->storage_settings))
+		return TRUE;
 
-	if (url && url->protocol && g_ascii_strcasecmp (url->protocol, "ews") != 0)
-		goto exit;
+	ews_settings = CAMEL_EWS_SETTINGS (target->storage_settings);
 
 	/* FIXME pageid is not set while editing an account */
 	if (!data->pageid || !*data->pageid)
-		goto exit;
+		return TRUE;
 
 	if (!g_ascii_strcasecmp (data->pageid, "10.receive")) {
 		const gchar *url_str = NULL;
 		CamelURL *hurl;
 
-		url_str = camel_url_get_param (url, "hosturl");
+		url_str = camel_ews_settings_get_hosturl (ews_settings);
 		hurl = camel_url_new (url_str, NULL);
 
 		/*Host url not set. Do not proceed with account creation.*/
@@ -340,21 +327,18 @@ org_gnome_exchange_ews_check_options(EPlugin *epl, EConfigHookPageCheckData *dat
 			camel_url_free (hurl);
 
 	} else if (!g_ascii_strcasecmp (data->pageid, "20.receive_options")) {
-		const gchar *marked_for_offline, *oal_selected;	
+		const gchar *oal_selected;
+		gboolean marked_for_offline;
 
 		/* If GAL is marked for caching, an OAL (offline address list) should be selected */
-		marked_for_offline = camel_url_get_param (url, "oab_offline");
-		if (marked_for_offline && !strcmp (marked_for_offline, "1")) {
-			oal_selected = camel_url_get_param (url, "oal_selected");
+		marked_for_offline = camel_ews_settings_get_oab_offline (ews_settings);
+		if (marked_for_offline) {
+			oal_selected = camel_ews_settings_get_oal_selected (ews_settings);
 			if (!oal_selected || !*oal_selected)
 				status = FALSE;
 		}
 	}
 
-exit:	
-	if (url)
-		camel_url_free(url);
-
 	return status;
 }
 
@@ -382,17 +366,16 @@ clear_combo (GtkComboBoxText *combo_box)
 static void
 update_camel_url (struct _oab_setting_data *cbdata)
 {
-	EMConfigTargetAccount *target = (EMConfigTargetAccount *) cbdata->config->target;
-	CamelURL *url;
-	gchar *url_string;
-	
-	url = camel_url_new (e_account_get_string(get_modified_account (target), E_ACCOUNT_SOURCE_URL), NULL);
+	EMConfigTargetSettings *target = (EMConfigTargetSettings *) cbdata->config->target;
+	CamelEwsSettings *ews_settings;
+
+	ews_settings = CAMEL_EWS_SETTINGS (target->storage_settings);
 	
 	if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (cbdata->check))) {
 		gint num;
 		
 		gtk_widget_set_sensitive (cbdata->hbox, TRUE);
-		camel_url_set_param (url, "oab_offline", "1");
+		camel_ews_settings_set_oab_offline (ews_settings, TRUE);
 		num = gtk_combo_box_get_active (GTK_COMBO_BOX (cbdata->combo_text));
 		
 		/* Set the active oal */
@@ -401,22 +384,17 @@ update_camel_url (struct _oab_setting_data *cbdata)
 			EwsOAL *oal = g_slist_nth_data (cbdata->oals, num);
 
 			mangled_oal = g_strconcat (oal->id, ":", oal->name, NULL);
-			camel_url_set_param (url, "oal_selected", mangled_oal);
+			camel_ews_settings_set_oal_selected (ews_settings, mangled_oal);
 			g_free (mangled_oal);
 		}
 	} else {
 		gtk_widget_set_sensitive (cbdata->hbox, FALSE);
-		camel_url_set_param (url, "oab_offline", NULL);
-		camel_url_set_param (url, "oal_selected", NULL);
+		camel_ews_settings_set_oab_offline (ews_settings, FALSE);
+		camel_ews_settings_set_oal_selected (ews_settings, NULL);
 
 		if (cbdata->oals == NULL)
 			clear_combo (GTK_COMBO_BOX_TEXT (cbdata->combo_text));
 	}
-
-	url_string = camel_url_to_string (url, 0);
-	e_account_set_string (get_modified_account (target), E_ACCOUNT_SOURCE_URL, url_string);
-	g_free (url_string);
-	camel_url_free (url);
 }
 
 static void
@@ -483,17 +461,20 @@ static void
 fetch_button_clicked_cb (GtkButton *button, gpointer user_data)
 {
 	struct _oab_setting_data *cbdata = (struct _oab_setting_data *) user_data;
-	EMConfigTargetAccount *target = (EMConfigTargetAccount *) cbdata->config->target;
+	EMConfigTargetSettings *target = (EMConfigTargetSettings *) cbdata->config->target;
+	CamelEwsSettings *ews_settings;
+	CamelNetworkSettings *network_settings;
 	GCancellable *cancellable;
 	EEwsConnection *cnc;
-	CamelURL *url;
 	const gchar *oab_url;
+	const gchar *user;
 	gchar *password;
 	
-	url = camel_url_new (e_account_get_string(get_modified_account (target), E_ACCOUNT_SOURCE_URL), NULL);
-
 	cancellable = g_cancellable_new ();
 
+	ews_settings = CAMEL_EWS_SETTINGS (target->storage_settings);
+	network_settings = CAMEL_NETWORK_SETTINGS (target->storage_settings);
+
 	/* De-sensitize fetch_button and get the list from the server */
 	g_signal_handlers_block_by_func (cbdata->combo_text, combo_selection_changed, cbdata);
 	
@@ -506,15 +487,15 @@ fetch_button_clicked_cb (GtkButton *button, gpointer user_data)
 	
 
 	/* Fetch the oab lists from server */
-	oab_url = camel_url_get_param (url, "oaburl");
+	oab_url = camel_ews_settings_get_oaburl (ews_settings);
+	user = camel_network_settings_get_user (network_settings);
 	password = get_password (target);
 
 	/* pass user name while creating connection  to fetch oals */
-	cnc = e_ews_connection_new (oab_url, url->user, password, NULL, NULL, NULL);
+	cnc = e_ews_connection_new (oab_url, user, password, NULL, NULL, NULL);
 	cbdata->cancellable = cancellable;
 	e_ews_connection_get_oal_list_start (cnc, ews_oal_list_ready, cancellable, cbdata);
 
-	camel_url_free (url);
 	g_free (password);
 }
 
@@ -549,23 +530,23 @@ table_deleted_cb (GtkWidget *widget, gpointer user_data)
 static void
 init_widgets (struct _oab_setting_data *cbdata)
 {
-	const gchar *oab_url, *marked_for_offline;
-	EMConfigTargetAccount *target_account;
-	CamelURL *url;
-	
-	target_account = (EMConfigTargetAccount *) cbdata->config->target;
-	url = camel_url_new(e_account_get_string(get_modified_account (target_account), E_ACCOUNT_SOURCE_URL), NULL);
+	EMConfigTargetSettings *target_account;
+	CamelEwsSettings *ews_settings;
+	const gchar *selected_list;
+	const gchar *oab_url;
+
+	target_account = (EMConfigTargetSettings *) cbdata->config->target;
 
-	marked_for_offline = camel_url_get_param (url, "oab_offline");
-	if (marked_for_offline && !strcmp (marked_for_offline, "1")) {
-		const gchar *selected_list;
+	ews_settings = CAMEL_EWS_SETTINGS (target_account->storage_settings);
+	selected_list = camel_ews_settings_get_oal_selected (ews_settings);
+	oab_url = camel_ews_settings_get_oaburl (ews_settings);
 
+	if (camel_ews_settings_get_oab_offline (ews_settings)) {
 		g_signal_handlers_block_by_func (cbdata->check, cache_setting_toggled, cbdata);
 		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cbdata->check), TRUE);
 		g_signal_handlers_unblock_by_func (cbdata->check, cache_setting_toggled, cbdata);
 
 		/* selected list will be of form "id:name" */
-		selected_list = camel_url_get_param (url, "oal_selected");
 		if (selected_list && gtk_combo_box_get_active (GTK_COMBO_BOX (cbdata->combo_text)) == -1) {
 			const gchar *tmp;
 			
@@ -580,14 +561,11 @@ init_widgets (struct _oab_setting_data *cbdata)
 		gtk_widget_set_sensitive (cbdata->hbox, FALSE);
 
 	/* If oab url is not set, dsensitize*/
-	oab_url = camel_url_get_param (url, "oaburl");
 	if (!oab_url) {
 		gtk_widget_set_sensitive (cbdata->check, FALSE);
 		gtk_widget_set_sensitive (cbdata->hbox, FALSE);
 	} else
 		gtk_widget_set_sensitive (cbdata->check, TRUE);
-
-	camel_url_free (url);
 }
 
 static void
@@ -615,84 +593,73 @@ ews_page_switched_cb (GtkNotebook *notebook, GtkWidget *page, guint page_num, gp
 
 GtkWidget *
 org_gnome_ews_oab_settings (EPlugin *epl, EConfigHookItemFactoryData *data)
-{	
-	EMConfigTargetAccount *target_account;
-	CamelURL *url;
-	
-	target_account = (EMConfigTargetAccount *)data->config->target;
-	url = camel_url_new(e_account_get_string(get_modified_account (target_account), E_ACCOUNT_SOURCE_URL), NULL);
+{
+	EMConfigTargetSettings *target_account;
+	GtkWidget *check = NULL;
+	GtkWidget *label;
+	GtkWidget *hbox, *oal_combo, *fetch_button;
+	gint row = 0;
+	EShell *shell;
+	struct _oab_setting_data *cbdata;
+
+	target_account = (EMConfigTargetSettings *)data->config->target;
 
-	/* is NULL on new account creation */
-	if (url == NULL)
+	if (!CAMEL_IS_EWS_SETTINGS (target_account->storage_settings))
 		return NULL;
 
-	if (!g_ascii_strcasecmp (url->protocol, "ews")) {
-		GtkWidget *check = NULL;
-		GtkWidget *label;
-		GtkWidget *hbox, *oal_combo, *fetch_button;
-		gint row = 0;
-		EShell *shell;
-		struct _oab_setting_data *cbdata;
-
-		/* Add cache check box */
-		check = gtk_check_button_new_with_mnemonic (_("Cache o_ffline address book"));
-		gtk_widget_show (check);
-		gtk_table_attach (GTK_TABLE (data->parent), check, 0, 1, row, row+1, 0, 0, 0, 0);
-		row++;
+	/* Add cache check box */
+	check = gtk_check_button_new_with_mnemonic (_("Cache o_ffline address book"));
+	gtk_widget_show (check);
+	gtk_table_attach (GTK_TABLE (data->parent), check, 0, 1, row, row+1, 0, 0, 0, 0);
+	row++;
+
+	/* Add label */	
+	label = gtk_label_new_with_mnemonic (_("Select Ad_dress list: "));
+	gtk_widget_show (label);
+	gtk_table_attach (GTK_TABLE (data->parent), label, 0, 1, row, row+1, 0, 0, 0, 0);
 	
-		/* Add label */	
-		label = gtk_label_new_with_mnemonic (_("Select Ad_dress list: "));
-		gtk_widget_show (label);
-		gtk_table_attach (GTK_TABLE (data->parent), label, 0, 1, row, row+1, 0, 0, 0, 0);
-		
-		/* OAL combo and fetch OAL button */	
-		hbox = gtk_hbox_new (FALSE, 6);
-		oal_combo = gtk_combo_box_text_new ();
-		gtk_label_set_mnemonic_widget (GTK_LABEL(label), oal_combo);
-		gtk_box_pack_start (GTK_BOX (hbox), oal_combo, TRUE, TRUE, 0);
-
-		fetch_button = gtk_button_new_with_mnemonic (_("Fetch _list"));
-		gtk_box_pack_start (GTK_BOX (hbox), fetch_button, FALSE, FALSE, 0);
-
-		/* Add hbox to table */
-		gtk_table_attach (GTK_TABLE (data->parent), hbox, 1, 2, row, row+1, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0);
-		gtk_widget_show_all (hbox);
-		row++;
-
-		/* If evolution is offline, dsensitize and return */
-		shell = e_shell_get_default ();
-		if (!e_shell_get_online (shell)) {
-			gtk_widget_set_sensitive (check, FALSE);
-			gtk_widget_set_sensitive (hbox, FALSE);
-			camel_url_free (url);
-			return check;
-		}
-		
-		cbdata = g_new0 (struct _oab_setting_data, 1);
-		cbdata->check = check;
-		cbdata->combo_text = oal_combo;
-		cbdata->hbox = hbox;
-		cbdata->fetch_button = fetch_button;
-		cbdata->config = data->config; 
-
-		/* Connect the signals */
-		g_signal_connect (check, "toggled", G_CALLBACK (cache_setting_toggled), cbdata);
-		g_signal_connect (G_OBJECT (fetch_button), "clicked",  G_CALLBACK (fetch_button_clicked_cb), cbdata);
-		g_signal_connect (GTK_COMBO_BOX (oal_combo), "changed", G_CALLBACK (combo_selection_changed), cbdata);
-
-		/* Init widgets when the page is changed to receiving options page */
-		if (GTK_IS_ASSISTANT (data->config->widget))
-			g_signal_connect (GTK_ASSISTANT (data->config->widget), "prepare", G_CALLBACK (ews_assistant_page_changed_cb), cbdata);
-		if (GTK_IS_NOTEBOOK (data->config->widget))
-			g_signal_connect (GTK_NOTEBOOK (data->config->widget), "switch-page", G_CALLBACK (ews_page_switched_cb), cbdata);
-
-		/* Free the call back data here */
-		g_signal_connect (GTK_WIDGET (data->config->widget), "destroy", G_CALLBACK (table_deleted_cb), cbdata);
-
-		camel_url_free (url);
+	/* OAL combo and fetch OAL button */	
+	hbox = gtk_hbox_new (FALSE, 6);
+	oal_combo = gtk_combo_box_text_new ();
+	gtk_label_set_mnemonic_widget (GTK_LABEL(label), oal_combo);
+	gtk_box_pack_start (GTK_BOX (hbox), oal_combo, TRUE, TRUE, 0);
+
+	fetch_button = gtk_button_new_with_mnemonic (_("Fetch _list"));
+	gtk_box_pack_start (GTK_BOX (hbox), fetch_button, FALSE, FALSE, 0);
+
+	/* Add hbox to table */
+	gtk_table_attach (GTK_TABLE (data->parent), hbox, 1, 2, row, row+1, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0);
+	gtk_widget_show_all (hbox);
+	row++;
+
+	/* If evolution is offline, dsensitize and return */
+	shell = e_shell_get_default ();
+	if (!e_shell_get_online (shell)) {
+		gtk_widget_set_sensitive (check, FALSE);
+		gtk_widget_set_sensitive (hbox, FALSE);
 		return check;
 	}
+	
+	cbdata = g_new0 (struct _oab_setting_data, 1);
+	cbdata->check = check;
+	cbdata->combo_text = oal_combo;
+	cbdata->hbox = hbox;
+	cbdata->fetch_button = fetch_button;
+	cbdata->config = data->config; 
+
+	/* Connect the signals */
+	g_signal_connect (check, "toggled", G_CALLBACK (cache_setting_toggled), cbdata);
+	g_signal_connect (G_OBJECT (fetch_button), "clicked",  G_CALLBACK (fetch_button_clicked_cb), cbdata);
+	g_signal_connect (GTK_COMBO_BOX (oal_combo), "changed", G_CALLBACK (combo_selection_changed), cbdata);
+
+	/* Init widgets when the page is changed to receiving options page */
+	if (GTK_IS_ASSISTANT (data->config->widget))
+		g_signal_connect (GTK_ASSISTANT (data->config->widget), "prepare", G_CALLBACK (ews_assistant_page_changed_cb), cbdata);
+	if (GTK_IS_NOTEBOOK (data->config->widget))
+		g_signal_connect (GTK_NOTEBOOK (data->config->widget), "switch-page", G_CALLBACK (ews_page_switched_cb), cbdata);
+
+	/* Free the call back data here */
+	g_signal_connect (GTK_WIDGET (data->config->widget), "destroy", G_CALLBACK (table_deleted_cb), cbdata);
 
-	camel_url_free (url);
-	return NULL;
+		return check;
 }
diff --git a/src/account-setup-eplugin/org-gnome-exchange-ews.eplug.xml b/src/account-setup-eplugin/org-gnome-exchange-ews.eplug.xml
index b32cbb5..1043adb 100644
--- a/src/account-setup-eplugin/org-gnome-exchange-ews.eplug.xml
+++ b/src/account-setup-eplugin/org-gnome-exchange-ews.eplug.xml
@@ -13,7 +13,7 @@
     <_description>Exchange Web Services Plugin</_description>
 
 	<hook class="org.gnome.evolution.mail.config:1.0">
-		<group 	target="account"
+		<group 	target="settings"
 			id="org.gnome.evolution.mail.config.accountWizard" 
 			check="org_gnome_exchange_ews_check_options">
 			<item type="item_table" path="10.receive/15.config/30.ews" factory="org_gnome_exchange_ews_account_setup"/>
@@ -23,7 +23,7 @@
 	</hook>
 	
 	<hook class="org.gnome.evolution.mail.config:1.0">
-		<group 	target="account"
+		<group 	target="settings"
 			id="org.gnome.evolution.mail.config.accountAssistant"
 			check="org_gnome_exchange_ews_check_options">
 			<item type="item_table" path="10.receive/15.config/30.ews" factory="org_gnome_exchange_ews_account_setup"/>
@@ -33,7 +33,7 @@
 	</hook>
 
 	<hook class="org.gnome.evolution.mail.config:1.0">
-		<group 	target="account" 
+		<group 	target="settings" 
 			id="org.gnome.evolution.mail.config.accountEditor" 
 			check="org_gnome_exchange_ews_check_options">
 			<item type="item_table" path="10.receive/15.config/30.ews" factory="org_gnome_exchange_ews_account_setup"/>
diff --git a/src/camel/camel-ews-settings.c b/src/camel/camel-ews-settings.c
index 70fb85e..7119cab 100644
--- a/src/camel/camel-ews-settings.c
+++ b/src/camel/camel-ews-settings.c
@@ -26,8 +26,11 @@ struct _CamelEwsSettingsPrivate {
 	gboolean check_all;
 	gboolean filter_junk;
 	gboolean filter_junk_inbox;
+	gboolean oab_offline;
 	gchar *email;
 	gchar *hosturl;
+	gchar *oaburl;
+	gchar *oal_selected;
 };
 
 enum {
@@ -39,6 +42,9 @@ enum {
 	PROP_FILTER_JUNK_INBOX,
 	PROP_HOST,
 	PROP_HOSTURL,
+	PROP_OABURL,
+	PROP_OAB_OFFLINE,
+	PROP_OAL_SELECTED,
 	PROP_PORT,
 	PROP_SECURITY_METHOD,
 	PROP_USER
@@ -100,6 +106,24 @@ ews_settings_set_property (GObject *object,
 				g_value_get_string (value));
 			return;
 
+		case PROP_OABURL:
+			camel_ews_settings_set_oaburl (
+				CAMEL_EWS_SETTINGS (object),
+				g_value_get_string (value));
+			return;
+
+		case PROP_OAB_OFFLINE:
+			camel_ews_settings_set_oab_offline (
+				CAMEL_EWS_SETTINGS (object),
+				g_value_get_boolean (value));
+			return;
+
+		case PROP_OAL_SELECTED:
+			camel_ews_settings_set_oal_selected (
+				CAMEL_EWS_SETTINGS (object),
+				g_value_get_string (value));
+			return;
+
 		case PROP_PORT:
 			camel_network_settings_set_port (
 				CAMEL_NETWORK_SETTINGS (object),
@@ -178,6 +202,27 @@ ews_settings_get_property (GObject *object,
 				CAMEL_EWS_SETTINGS (object)));
 			return;
 
+		case PROP_OABURL:
+			g_value_set_string (
+				value,
+				camel_ews_settings_get_oaburl (
+				CAMEL_EWS_SETTINGS (object)));
+			return;
+
+		case PROP_OAB_OFFLINE:
+			g_value_set_boolean (
+				value,
+				camel_ews_settings_get_oab_offline (
+				CAMEL_EWS_SETTINGS (object)));
+			return;
+
+		case PROP_OAL_SELECTED:
+			g_value_set_string (
+				value,
+				camel_ews_settings_get_oal_selected (
+				CAMEL_EWS_SETTINGS (object)));
+			return;
+
 		case PROP_PORT:
 			g_value_set_uint (
 				value,
@@ -212,6 +257,8 @@ ews_settings_finalize (GObject *object)
 
 	g_free (priv->email);
 	g_free (priv->hosturl);
+	g_free (priv->oaburl);
+	g_free (priv->oal_selected);
 
 	/* Chain up to parent's finalize() method. */
 	G_OBJECT_CLASS (camel_ews_settings_parent_class)->finalize (object);
@@ -307,6 +354,42 @@ camel_ews_settings_class_init (CamelEwsSettingsClass *class)
 		PROP_PORT,
 		"port");
 
+	g_object_class_install_property (
+		object_class,
+		PROP_OABURL,
+		g_param_spec_string (
+			"oaburl",
+			"OABURL",
+			"OABURL",
+			NULL,
+			G_PARAM_READWRITE |
+			G_PARAM_CONSTRUCT |
+			G_PARAM_STATIC_STRINGS));
+
+	g_object_class_install_property (
+		object_class,
+		PROP_OAB_OFFLINE,
+		g_param_spec_boolean (
+			"oab-offline",
+			"OAB Offline",
+			"OAB Offline",
+			FALSE,
+			G_PARAM_READWRITE |
+			G_PARAM_CONSTRUCT |
+			G_PARAM_STATIC_STRINGS));
+
+	g_object_class_install_property (
+		object_class,
+		PROP_OAL_SELECTED,
+		g_param_spec_string (
+			"oal-selected",
+			"OAL Selected",
+			"OAL Selected",
+			NULL,
+			G_PARAM_READWRITE |
+			G_PARAM_CONSTRUCT |
+			G_PARAM_STATIC_STRINGS));
+
 	/* Inherited from CamelNetworkSettings. */
 	g_object_class_override_property (
 		object_class,
@@ -483,3 +566,63 @@ camel_ews_settings_set_hosturl (CamelEwsSettings *settings,
 
 	g_object_notify (G_OBJECT (settings), "hosturl");
 }
+
+const gchar *
+camel_ews_settings_get_oaburl (CamelEwsSettings *settings)
+{
+	g_return_val_if_fail (CAMEL_IS_EWS_SETTINGS (settings), NULL);
+
+	return settings->priv->oaburl;
+}
+
+void
+camel_ews_settings_set_oaburl (CamelEwsSettings *settings,
+                               const gchar *oaburl)
+{
+	g_return_if_fail (CAMEL_IS_EWS_SETTINGS (settings));
+
+	g_free (settings->priv->oaburl);
+	settings->priv->oaburl = g_strdup (oaburl);
+
+	g_object_notify (G_OBJECT (settings), "oaburl");
+}
+
+gboolean
+camel_ews_settings_get_oab_offline (CamelEwsSettings *settings)
+{
+	g_return_val_if_fail (CAMEL_IS_EWS_SETTINGS (settings), FALSE);
+
+	return settings->priv->oab_offline;
+}
+
+void
+camel_ews_settings_set_oab_offline (CamelEwsSettings *settings,
+                                    gboolean oab_offline)
+{
+	g_return_if_fail (CAMEL_IS_EWS_SETTINGS (settings));
+
+	settings->priv->oab_offline = oab_offline;
+
+	g_object_notify (G_OBJECT (settings), "oab-offline");
+}
+
+const gchar *
+camel_ews_settings_get_oal_selected (CamelEwsSettings *settings)
+{
+	g_return_val_if_fail (CAMEL_IS_EWS_SETTINGS (settings), NULL);
+
+	return settings->priv->oal_selected;
+}
+
+void
+camel_ews_settings_set_oal_selected (CamelEwsSettings *settings,
+                                     const gchar *oal_selected)
+{
+	g_return_if_fail (CAMEL_IS_EWS_SETTINGS (settings));
+
+	g_free (settings->priv->oal_selected);
+	settings->priv->oal_selected = g_strdup (oal_selected);
+
+	g_object_notify (G_OBJECT (settings), "oal-selected");
+}
+
diff --git a/src/camel/camel-ews-settings.h b/src/camel/camel-ews-settings.h
index 1ca1a84..7eef0af 100644
--- a/src/camel/camel-ews-settings.h
+++ b/src/camel/camel-ews-settings.h
@@ -71,6 +71,15 @@ void		camel_ews_settings_set_filter_junk_inbox	(CamelEwsSettings *settings,
 const gchar *	camel_ews_settings_get_hosturl			(CamelEwsSettings *settings);
 void		camel_ews_settings_set_hosturl			(CamelEwsSettings *settings,
 								 const gchar *hosturl);
+const gchar *	camel_ews_settings_get_oaburl			(CamelEwsSettings *settings);
+void		camel_ews_settings_set_oaburl			(CamelEwsSettings *settings,
+								 const gchar *oaburl);
+gboolean	camel_ews_settings_get_oab_offline		(CamelEwsSettings *settings);
+void		camel_ews_settings_set_oab_offline		(CamelEwsSettings *settings,
+								 gboolean oab_offline);
+const gchar *	camel_ews_settings_get_oal_selected		(CamelEwsSettings *settings);
+void		camel_ews_settings_set_oal_selected		(CamelEwsSettings *settings,
+								 const gchar *oal_selected);
 
 G_END_DECLS
 



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