[evolution] imap-headers: Adapt to CamelSettings.



commit 31d1aa0441cbb187dd3cbe73ffc1e3b781c3b642
Author: Matthew Barnes <mbarnes redhat com>
Date:   Mon Aug 15 10:44:14 2011 -0400

    imap-headers: Adapt to CamelSettings.
    
    Write values to CamelSettings instead of URL parameters.

 plugins/imap-features/imap-headers.c |  153 ++++++++++++++++-----------------
 1 files changed, 74 insertions(+), 79 deletions(-)
---
diff --git a/plugins/imap-features/imap-headers.c b/plugins/imap-features/imap-headers.c
index 9444658..5e07908 100644
--- a/plugins/imap-features/imap-headers.c
+++ b/plugins/imap-features/imap-headers.c
@@ -76,64 +76,55 @@ void
 imap_headers_commit (EPlugin *efp, EConfigHookItemFactoryData *data)
 {
 	EMConfigTargetAccount *target_account;
-	EAccount *original_account;
+	CamelFetchHeadersType fetch_headers;
+	CamelSettings *settings;
 	EAccount *modified_account;
 	gboolean use_imap = g_getenv ("USE_IMAP") != NULL;
 
 	target_account = (EMConfigTargetAccount *) data->config->target;
-	original_account = target_account->original_account;
 	modified_account = target_account->modified_account;
+	settings = target_account->settings;
 
 	if (g_str_has_prefix (modified_account->source->url, "imap://") ||
 			(use_imap && g_str_has_prefix (modified_account->source->url, "groupwise://"))) {
-		EAccountList *accounts = e_get_account_list ();
-		CamelURL *url = NULL;
 		GtkTreeModel *model;
 		GtkTreeIter iter;
-		GString *str;
-		gchar *header = NULL;
+		gint n_children;
+		gchar **strv = NULL;
+		gboolean valid;
+		gint ii = 0;
 
-		str = g_string_new("");
+		model = gtk_tree_view_get_model (ui->custom_headers_tree);
+		n_children = gtk_tree_model_iter_n_children (model, NULL);
 
-		url = camel_url_new (
-			e_account_get_string (
-			modified_account, E_ACCOUNT_SOURCE_URL), NULL);
+		if (n_children > 0)
+			strv = g_new0 (gchar *, n_children + 1);
 
-		model = gtk_tree_view_get_model (ui->custom_headers_tree);
-		if (gtk_tree_model_get_iter_first (model, &iter)) {
-			do
-			{
-				header = NULL;
-				gtk_tree_model_get (model, &iter, 0, &header, -1);
-				str = g_string_append (str, g_strstrip (header));
-				str = g_string_append (str, " ");
-				g_free (header);
-			} while (gtk_tree_model_iter_next (model, &iter));
-		}
+		valid = gtk_tree_model_get_iter_first (model, &iter);
 
-		header = g_strstrip (g_strdup (str->str));
-		camel_url_set_param (url, "imap_custom_headers", header);
-		g_free (header);
+		while (valid) {
+			gchar *header;
 
-		if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (ui->all_headers))) {
-			camel_url_set_param (url, "all_headers", "1");
-			camel_url_set_param (url, "basic_headers", NULL);
-		} else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (ui->basic_headers))) {
-			camel_url_set_param (url, "basic_headers", "1");
-			camel_url_set_param (url, "all_headers", NULL);
-		} else {
-			camel_url_set_param (url, "all_headers", NULL);
-			camel_url_set_param (url, "basic_headers", NULL);
+			g_warn_if_fail (ii < n_children);
+			gtk_tree_model_get (model, &iter, 0, &header, -1);
+			strv[ii++] = g_strstrip (header);
+
+			valid = gtk_tree_model_iter_next (model, &iter);
 		}
 
-		/* FIXME Leaking URL string? */
-		e_account_set_string (
-			original_account, E_ACCOUNT_SOURCE_URL,
-			camel_url_to_string (url, 0));
-		camel_url_free (url);
-		g_string_free (str, TRUE);
-		e_account_list_change (accounts, original_account);
-		e_account_list_save (accounts);
+		if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (ui->all_headers)))
+			fetch_headers = CAMEL_FETCH_HEADERS_ALL;
+		else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (ui->basic_headers)))
+			fetch_headers = CAMEL_FETCH_HEADERS_BASIC;
+		else
+			fetch_headers = CAMEL_FETCH_HEADERS_BASIC_AND_MAILING_LIST;
+
+		g_object_set (
+			settings,
+			"fetch-headers", fetch_headers,
+			"fetch-headers-extra", strv, NULL);
+
+		g_strfreev (strv);
 	}
 }
 
@@ -242,15 +233,6 @@ epif_remove_header_clicked (GtkButton *button, EPImapFeaturesData *ui)
 }
 
 static void
-epif_fetch_all_headers_toggled (GtkWidget *all_option, EPImapFeaturesData *ui)
-{
-	if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (all_option)))
-		gtk_widget_set_sensitive (ui->custom_headers_box, FALSE);
-	else
-		gtk_widget_set_sensitive (ui->custom_headers_box, TRUE);
-}
-
-static void
 epif_entry_changed (GtkWidget *entry, EPImapFeaturesData *ui)
 {
 	epif_add_sensitivity (ui);
@@ -260,24 +242,34 @@ GtkWidget *
 org_gnome_imap_headers (EPlugin *epl, EConfigHookItemFactoryData *data)
 {
 	EMConfigTargetAccount *target_account;
+	CamelSettings *settings;
 	EAccount *account;
 	GtkWidget *vbox;
-	CamelURL *url = NULL;
 	GtkBuilder *builder;
+	GtkWidget *button;
 	GtkCellRenderer *renderer;
 	GtkTreeViewColumn *column;
 	GtkTreeIter iter;
 	GtkTreeSelection *selection;
+	CamelFetchHeadersType fetch_headers = 0;
+	gchar **extra_headers = NULL;
 	gboolean use_imap = g_getenv ("USE_IMAP") != NULL;
+	guint ii, length = 0;
 
 	ui = g_new0 (EPImapFeaturesData, 1);
 
 	target_account = (EMConfigTargetAccount *) data->config->target;
 	account = target_account->modified_account;
+	settings = target_account->settings;
 
 	if (!g_str_has_prefix (account->source->url, "imap://") && !(use_imap && g_str_has_prefix (account->source->url, "groupwise://")))
 		return NULL;
 
+	g_object_get (
+		settings,
+		"fetch-headers", &fetch_headers,
+		"fetch-headers-extra", &extra_headers, NULL);
+
 	builder = gtk_builder_new ();
 	e_load_ui_builder_definition (builder, "imap-headers.ui");
 
@@ -291,44 +283,48 @@ org_gnome_imap_headers (EPlugin *epl, EConfigHookItemFactoryData *data)
 	ui->remove_header = GTK_BUTTON(e_builder_get_widget (builder, "removeHeader"));
 	ui->entry_header = GTK_ENTRY (e_builder_get_widget (builder, "customHeaderEntry"));
 
-	url = camel_url_new (e_account_get_string (account, E_ACCOUNT_SOURCE_URL), NULL);
+	g_object_bind_property (
+		ui->all_headers, "active",
+		ui->custom_headers_box, "sensitive",
+		G_BINDING_SYNC_CREATE |
+		G_BINDING_INVERT_BOOLEAN);
 
 	ui->store = gtk_tree_store_new (1, G_TYPE_STRING);
 	gtk_tree_view_set_model (ui->custom_headers_tree, GTK_TREE_MODEL (ui->store));
 
 	selection = gtk_tree_view_get_selection (ui->custom_headers_tree);
 
-	if (url) {
-		gchar *custom_headers;
+	if (extra_headers != NULL)
+		length = g_strv_length (extra_headers);
 
-		custom_headers = g_strdup(camel_url_get_param (url, "imap_custom_headers"));
-		if (custom_headers) {
-			gint i=0;
+	for (ii = 0; ii < length; ii++) {
 
-			ui->custom_headers_array = g_strsplit (custom_headers, " ", -1);
-			while (ui->custom_headers_array[i] ) {
-				if (strlen (g_strstrip (ui->custom_headers_array[i]))) {
-					gtk_tree_store_append (ui->store, &iter, NULL);
-					gtk_tree_store_set (ui->store, &iter, 0, ui->custom_headers_array[i], -1);
+		/* Skip empty strings. */
+		g_strstrip (extra_headers[ii]);
+		if (*extra_headers[ii] == '\0')
+			continue;
 
-					if (i == 0)
-						gtk_tree_selection_select_iter (selection, &iter);
-				}
-				i++;
-			}
-			g_strfreev (ui->custom_headers_array);
+		gtk_tree_store_append (ui->store, &iter, NULL);
+		gtk_tree_store_set (ui->store, &iter, 0, extra_headers[ii], -1);
+	}
 
-		}
-		g_free (custom_headers);
-
-		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ui->mailing_list_headers), TRUE);
-		if (camel_url_get_param (url, "all_headers")) {
-				gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ui->all_headers), TRUE);
-				gtk_widget_set_sensitive (ui->custom_headers_box, FALSE);
-		} else if (camel_url_get_param (url, "basic_headers"))
-				gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ui->basic_headers), TRUE);
-		camel_url_free (url);
+	switch (fetch_headers) {
+		case CAMEL_FETCH_HEADERS_ALL:
+			button = ui->all_headers;
+			break;
+		case CAMEL_FETCH_HEADERS_BASIC:
+			button = ui->basic_headers;
+			break;
+		default:
+			button = ui->mailing_list_headers;
+			break;
 	}
+
+	gtk_toggle_button_set_active (
+		GTK_TOGGLE_BUTTON (button), TRUE);
+
+	g_strfreev (extra_headers);
+
 	renderer = gtk_cell_renderer_text_new ();
 	column = gtk_tree_view_column_new_with_attributes (_("Custom Headers"), renderer, "text", 0, NULL);
 	gtk_tree_view_append_column (ui->custom_headers_tree , column);
@@ -336,7 +332,6 @@ org_gnome_imap_headers (EPlugin *epl, EConfigHookItemFactoryData *data)
 	gtk_widget_set_sensitive (GTK_WIDGET (ui->add_header), FALSE);
 	epif_tv_selection_changed (selection, GTK_WIDGET (ui->remove_header));
 
-	g_signal_connect (ui->all_headers, "toggled", G_CALLBACK (epif_fetch_all_headers_toggled), ui);
 	g_signal_connect (ui->add_header, "clicked", G_CALLBACK (epif_add_header), ui);
 	g_signal_connect (ui->remove_header, "clicked", G_CALLBACK (epif_remove_header_clicked), ui);
 	g_signal_connect (ui->entry_header, "changed", G_CALLBACK (epif_entry_changed), ui);



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