aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/mail-to-task
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/mail-to-task')
-rw-r--r--plugins/mail-to-task/ChangeLog4
-rw-r--r--plugins/mail-to-task/mail-to-task.c60
2 files changed, 63 insertions, 1 deletions
diff --git a/plugins/mail-to-task/ChangeLog b/plugins/mail-to-task/ChangeLog
index f0d90529f1..e7ee058e13 100644
--- a/plugins/mail-to-task/ChangeLog
+++ b/plugins/mail-to-task/ChangeLog
@@ -1,5 +1,9 @@
2004-10-21 Rodrigo Moya <rodrigo@novell.com>
+ * mail-to-task.c (set_attendees, set_organizer): new functions.
+ (do_mail_to_task): set attendees and organizer on the task from the
+ recipients in the mail message.
+
* org-gnome-mail-to-task.eplug.in: use correct icon.
2004-10-21 Rodrigo Moya <rodrigo@novell.com>
diff --git a/plugins/mail-to-task/mail-to-task.c b/plugins/mail-to-task/mail-to-task.c
index c4b51fd9de..595d64d974 100644
--- a/plugins/mail-to-task/mail-to-task.c
+++ b/plugins/mail-to-task/mail-to-task.c
@@ -23,6 +23,59 @@
#include "mail/em-popup.h"
static void
+add_attendee_cb (gpointer key, gpointer value, gpointer user_data)
+{
+ ECalComponentAttendee *ca;
+ const char *str, *name;
+ GList **attendees = user_data;
+
+ if (!camel_internet_address_get (value, 0, &name, &str))
+ return;
+
+ ca = g_new0 (ECalComponentAttendee, 1);
+ ca->value = str;
+ ca->cn = name;
+ /* FIXME: missing many fields */
+
+ *attendees = g_slist_append (*attendees, ca);
+}
+
+static void
+set_attendees (ECalComponent *comp, CamelMimeMessage *message)
+{
+ GSList *attendees = NULL, *l;
+
+ g_hash_table_foreach (message->recipients, (GHFunc) add_attendee_cb, &attendees);
+ e_cal_component_set_attendee_list (comp, attendees);
+
+ for (l = attendees; l != NULL; l = l->next)
+ g_free (l->data);
+ g_slist_free (attendees);
+}
+
+static void
+set_organizer (ECalComponent *comp, CamelMimeMessage *message)
+{
+ const CamelInternetAddress *address;
+ const char *str, *name;
+ ECalComponentOrganizer organizer = {NULL, NULL, NULL, NULL};
+
+ if (message->reply_to)
+ address = message->reply_to;
+ else if (message->from)
+ address = message->from;
+ else
+ return;
+
+ if (!camel_internet_address_get (address, 0, &name, &str))
+ return;
+
+ organizer.value = str;
+ organizer.cn = name;
+ e_cal_component_set_organizer (comp, &organizer);
+}
+
+static void
do_mail_to_task (EMPopupTargetSelect *t, ESource *tasks_source)
{
ECal *client;
@@ -36,8 +89,8 @@ do_mail_to_task (EMPopupTargetSelect *t, ESource *tasks_source)
CamelMimeMessage *message;
ECalComponent *comp;
ECalComponentText text;
- char *str;
GSList sl;
+ char *str;
/* retrieve the message from the CamelFolder */
message = camel_folder_get_message (t->folder, g_ptr_array_index (t->uids, i), NULL);
@@ -48,6 +101,7 @@ do_mail_to_task (EMPopupTargetSelect *t, ESource *tasks_source)
e_cal_component_set_new_vtype (comp, E_CAL_COMPONENT_TODO);
e_cal_component_set_uid (comp, camel_mime_message_get_message_id (message));
+ /* set the task's summary */
text.value = camel_mime_message_get_subject (message);
text.altrep = NULL;
e_cal_component_set_summary (comp, &text);
@@ -61,6 +115,10 @@ do_mail_to_task (EMPopupTargetSelect *t, ESource *tasks_source)
g_free (str);
+ /* set the organizer, and the attendees */
+ set_organizer (comp, message);
+ set_attendees (comp, message);
+
/* save the task to the selected source */
e_cal_create_object (client, e_cal_component_get_icalcomponent (comp), NULL, NULL);