[evolution] Add itip_get_fallback_identity().



commit 521caf8b6cbe648e8f5c5d6104cc58bb8446e0e3
Author: Matthew Barnes <mbarnes redhat com>
Date:   Wed Apr 27 08:14:15 2011 -0400

    Add itip_get_fallback_identity().
    
    Convenience function returns a name + address string from the default
    mail identity, to be used as a fallback for organizers.

 calendar/gui/dialogs/event-page.c |   20 +++++++-------------
 calendar/gui/dialogs/memo-page.c  |   20 +++++++-------------
 calendar/gui/dialogs/task-page.c  |   18 ++++++------------
 calendar/gui/itip-utils.c         |   27 +++++++++++++++++++++++++++
 calendar/gui/itip-utils.h         |    1 +
 5 files changed, 48 insertions(+), 38 deletions(-)
---
diff --git a/calendar/gui/dialogs/event-page.c b/calendar/gui/dialogs/event-page.c
index a4856b1..d2fc4ae 100644
--- a/calendar/gui/dialogs/event-page.c
+++ b/calendar/gui/dialogs/event-page.c
@@ -110,6 +110,7 @@ struct _EventPagePrivate {
 	GtkWidget *location_label;
 
 	gchar **address_strings;
+	gchar *fallback_address;
 	EMeetingAttendee *ia;
 	gchar *user_add;
 	ECalComponent *comp;
@@ -897,6 +898,7 @@ event_page_finalize (GObject *object)
 	priv = EVENT_PAGE_GET_PRIVATE (object);
 
 	g_strfreev (priv->address_strings);
+	g_free (priv->fallback_address);
 
 	g_ptr_array_foreach (
 		priv->deleted_attendees, (GFunc) g_object_unref, NULL);
@@ -3186,18 +3188,12 @@ event_page_select_organizer (EventPage *epage, const gchar *backend_address)
 	EventPagePrivate *priv = epage->priv;
 	CompEditor *editor;
 	ECal *client;
-	EAccount *def_account;
-	gchar *def_address = NULL;
 	const gchar *default_address;
 	gboolean subscribed_cal = FALSE;
 	ESource *source = NULL;
 	const gchar *user_addr = NULL;
 	gint ii;
 
-	def_account = e_get_default_account ();
-	if (def_account && def_account->enabled)
-		def_address = g_strdup_printf("%s <%s>", def_account->id->name, def_account->id->address);
-
 	editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (epage));
 	client = comp_editor_get_client (editor);
 
@@ -3211,7 +3207,8 @@ event_page_select_organizer (EventPage *epage, const gchar *backend_address)
 	else
 		user_addr = (backend_address && *backend_address) ? backend_address : NULL;
 
-	default_address = NULL;
+	default_address = priv->fallback_address;
+
 	if (user_addr) {
 		for (ii = 0; priv->address_strings[ii] != NULL; ii++) {
 			if (g_strrstr (priv->address_strings[ii], user_addr) != NULL) {
@@ -3221,10 +3218,7 @@ event_page_select_organizer (EventPage *epage, const gchar *backend_address)
 		}
 	}
 
-	if (!default_address && def_address)
-		default_address = def_address;
-
-	if (default_address) {
+	if (default_address != NULL) {
 		if (!priv->comp || !e_cal_component_has_organizer (priv->comp)) {
 			GtkEntry *entry = GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->organizer)));
 
@@ -3235,8 +3229,6 @@ event_page_select_organizer (EventPage *epage, const gchar *backend_address)
 		}
 	} else
 		g_warning ("No potential organizers!");
-
-	g_free (def_address);
 }
 
 /**
@@ -3276,6 +3268,8 @@ event_page_construct (EventPage *epage,
 	model = gtk_combo_box_get_model (GTK_COMBO_BOX (priv->organizer));
 
 	priv->address_strings = itip_get_user_identities ();
+	priv->fallback_address = itip_get_fallback_identity ();
+
 	for (ii = 0; priv->address_strings[ii] != NULL; ii++)
 		e_dialog_append_list_store_text (
 			model, 0, priv->address_strings[ii]);
diff --git a/calendar/gui/dialogs/memo-page.c b/calendar/gui/dialogs/memo-page.c
index 5469289..e708cef 100644
--- a/calendar/gui/dialogs/memo-page.c
+++ b/calendar/gui/dialogs/memo-page.c
@@ -93,6 +93,7 @@ struct _MemoPagePrivate {
 	GtkWidget *source_selector;
 
 	gchar **address_strings;
+	gchar *fallback_address;
 
 	ENameSelector *name_selector;
 };
@@ -188,6 +189,7 @@ memo_page_dispose (GObject *object)
 	priv = MEMO_PAGE (object)->priv;
 
 	g_strfreev (priv->address_strings);
+	g_free (priv->fallback_address);
 
 	/* Chain up to parent's dispose() method. */
 	G_OBJECT_CLASS (memo_page_parent_class)->dispose (object);
@@ -1096,18 +1098,12 @@ memo_page_select_organizer (MemoPage *mpage, const gchar *backend_address)
 	CompEditor *editor;
 	CompEditorFlags flags;
 	ECal *client;
-	EAccount *def_account;
-	gchar *def_address = NULL;
 	const gchar *default_address;
 	gboolean subscribed_cal = FALSE;
 	ESource *source = NULL;
 	const gchar *user_addr = NULL;
 	gint ii;
 
-	def_account = e_get_default_account ();
-	if (def_account && def_account->enabled)
-		def_address = g_strdup_printf("%s <%s>", def_account->id->name, def_account->id->address);
-
 	priv = mpage->priv;
 	editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (mpage));
 	client = comp_editor_get_client (editor);
@@ -1123,7 +1119,8 @@ memo_page_select_organizer (MemoPage *mpage, const gchar *backend_address)
 	else
 		user_addr = (backend_address && *backend_address) ? backend_address : NULL;
 
-	default_address = NULL;
+	default_address = priv->fallback_address;
+
 	if (user_addr) {
 		for (ii = 0; priv->address_strings[ii] != NULL; ii++) {
 			if (g_strrstr (priv->address_strings[ii], user_addr) != NULL) {
@@ -1133,18 +1130,13 @@ memo_page_select_organizer (MemoPage *mpage, const gchar *backend_address)
 		}
 	}
 
-	if (!default_address && def_account)
-		default_address = def_address;
-
-	if (default_address) {
+	if (default_address != NULL) {
 		if (flags & COMP_EDITOR_NEW_ITEM) {
 			gtk_entry_set_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->org_combo))), default_address);
 			gtk_widget_set_sensitive (priv->org_combo, !subscribed_cal);
 		}
 	} else
 		g_warning ("No potential organizers!");
-
-	g_free (def_address);
 }
 
 /**
@@ -1183,6 +1175,8 @@ memo_page_construct (MemoPage *mpage)
 
 		model = gtk_combo_box_get_model (GTK_COMBO_BOX (priv->org_combo));
 		priv->address_strings = itip_get_user_identities ();
+		priv->fallback_address = itip_get_fallback_identity ();
+
 		for (ii = 0; priv->address_strings[ii] != NULL; ii++)
 			e_dialog_append_list_store_text (
 				model, 0, priv->address_strings[ii]);
diff --git a/calendar/gui/dialogs/task-page.c b/calendar/gui/dialogs/task-page.c
index 1120ccf..bb18780 100644
--- a/calendar/gui/dialogs/task-page.c
+++ b/calendar/gui/dialogs/task-page.c
@@ -66,6 +66,7 @@ struct _TaskPagePrivate {
 	GtkWidget *main;
 
 	gchar **address_strings;
+	gchar *fallback_address;
 	EMeetingAttendee *ia;
 	gchar *user_add;
 	ECalComponent *comp;
@@ -426,6 +427,7 @@ task_page_finalize (GObject *object)
 	priv = TASK_PAGE_GET_PRIVATE (object);
 
 	g_strfreev (priv->address_strings);
+	g_free (priv->fallback_address);
 
 	g_ptr_array_foreach (
 		priv->deleted_attendees, (GFunc) g_object_unref, NULL);
@@ -2036,8 +2038,6 @@ task_page_select_organizer (TaskPage *tpage, const gchar *backend_address)
 {
 	TaskPagePrivate *priv = tpage->priv;
 	CompEditor *editor;
-	EAccount *def_account;
-	gchar *def_address = NULL;
 	const gchar *default_address;
 	gboolean subscribed_cal = FALSE;
 	ESource *source = NULL;
@@ -2048,10 +2048,6 @@ task_page_select_organizer (TaskPage *tpage, const gchar *backend_address)
 	editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (tpage));
 	client = comp_editor_get_client (editor);
 
-	def_account = e_get_default_account ();
-	if (def_account && def_account->enabled)
-		def_address = g_strdup_printf("%s <%s>", def_account->id->name, def_account->id->address);
-
 	if (client)
 		source = e_cal_get_source (client);
 	if (source)
@@ -2062,7 +2058,8 @@ task_page_select_organizer (TaskPage *tpage, const gchar *backend_address)
 	else
 		user_addr = (backend_address && *backend_address) ? backend_address : NULL;
 
-	default_address = NULL;
+	default_address = priv->fallback_address;
+
 	if (user_addr) {
 		for (ii = 0; priv->address_strings[ii] != NULL; ii++) {
 			if (g_strrstr (priv->address_strings[ii], user_addr) != NULL) {
@@ -2072,9 +2069,6 @@ task_page_select_organizer (TaskPage *tpage, const gchar *backend_address)
 		}
 	}
 
-	if (!default_address && def_address)
-		default_address = def_address;
-
 	if (default_address) {
 		if (!priv->comp || !e_cal_component_has_organizer (priv->comp)) {
 			GtkEntry *entry = GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->organizer)));
@@ -2086,8 +2080,6 @@ task_page_select_organizer (TaskPage *tpage, const gchar *backend_address)
 		}
 	} else
 		g_warning ("No potential organizers!");
-
-	g_free (def_address);
 }
 
 /**
@@ -2130,6 +2122,8 @@ task_page_construct (TaskPage *tpage,
 	model = gtk_combo_box_get_model (GTK_COMBO_BOX (priv->organizer));
 
 	priv->address_strings = itip_get_user_identities ();
+	priv->fallback_address = itip_get_fallback_identity ();
+
 	for (ii = 0; priv->address_strings[ii] != NULL; ii++)
 		e_dialog_append_list_store_text (
 			model, 0, priv->address_strings[ii]);
diff --git a/calendar/gui/itip-utils.c b/calendar/gui/itip-utils.c
index 4ab53de..8c7c72f 100644
--- a/calendar/gui/itip-utils.c
+++ b/calendar/gui/itip-utils.c
@@ -104,6 +104,33 @@ itip_get_user_identities (void)
 }
 
 /**
+ * itip_get_fallback_identity:
+ *
+ * Returns a name + address string taken from the default mail identity,
+ * but only if the corresponding account is enabled.  If the account is
+ * disabled, the function returns %NULL.  This is meant to be used as a
+ * fallback identity for organizers.  Free the returned string with
+ * g_free().
+ *
+ * Returns: a fallback mail identity, or %NULL
+ **/
+gchar *
+itip_get_fallback_identity (void)
+{
+	EAccount *account;
+	gchar *identity = NULL;
+
+	account = e_get_default_account ();
+	if (account != NULL && account->enabled)
+		identity = g_strdup_printf (
+			"%s <%s>",
+			account->id->name,
+			account->id->address);
+
+	return identity;
+}
+
+/**
  * itip_address_is_user:
  * @address: an email address
  *
diff --git a/calendar/gui/itip-utils.h b/calendar/gui/itip-utils.h
index 720540e..21fe2ac 100644
--- a/calendar/gui/itip-utils.h
+++ b/calendar/gui/itip-utils.h
@@ -51,6 +51,7 @@ struct CalMimeAttach {
 };
 
 gchar **	itip_get_user_identities	(void);
+gchar *		itip_get_fallback_identity	(void);
 gboolean	itip_address_is_user		(const gchar *address);
 gboolean	itip_organizer_is_user		(ECalComponent *comp,
 						 ECal *client);



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