Blob Blame History Raw
diff -upr tracker-0.6.6.old/src/trackerd/tracker-email-evolution.c tracker-0.6.6/src/trackerd/tracker-email-evolution.c
--- tracker-0.6.6.old/src/trackerd/tracker-email-evolution.c	2008-02-28 23:49:53.000000000 +0000
+++ tracker-0.6.6/src/trackerd/tracker-email-evolution.c	2008-12-15 21:31:43.000000000 +0000
@@ -1450,7 +1450,7 @@ load_uri_and_status_of_mbox_mail_message
 	g_return_if_fail (g_m_message);
 	g_return_if_fail (msg);
 
-	field = g_mime_message_get_header (g_m_message, "X-Evolution");
+	field = g_mime_object_get_header (GMIME_OBJECT (g_m_message), "X-Evolution");
 
 	g_return_if_fail (field);
 
@@ -2478,27 +2478,28 @@ break_multipart_loop:
 static GSList *
 add_persons_from_internet_address_list_string_parsing (GSList *list, const gchar *s)
 {
-	InternetAddressList *addrs_list, *tmp;
+	InternetAddressList *addrs_list;
+	int i, count;
 
 	g_return_val_if_fail (s, NULL);
 
-	addrs_list = internet_address_parse_string (s);
+	addrs_list = internet_address_list_parse_string (s);
+	count = internet_address_list_length (addrs_list);
 
-	for (tmp = addrs_list; tmp; tmp = tmp->next) {
+	for (i = 0; i < count; i++) {
 		MailPerson *mp;
+		InternetAddress *addr;
 
 		mp = email_allocate_mail_person ();
+		addr = internet_address_list_get_address (addrs_list, i);
 
-		mp->addr = g_strdup (tmp->address->value.addr);
-		if(tmp->address->name)
-                	mp->name = g_strdup (tmp->address->name);
-		else
-			mp->name = g_strdup (tmp->address->value.addr);
+		mp->name = g_strdup (internet_address_get_name (addr));
+		mp->addr = internet_address_to_string (addr, FALSE);
 
 		list = g_slist_prepend (list, mp);
 	}
 
-	internet_address_list_destroy (addrs_list);
+	g_object_unref (addrs_list);
 
 	return list;
 }
diff -upr tracker-0.6.6.old/src/trackerd/tracker-email-kmail.c tracker-0.6.6/src/trackerd/tracker-email-kmail.c
--- tracker-0.6.6.old/src/trackerd/tracker-email-kmail.c	2008-01-15 04:05:03.000000000 +0000
+++ tracker-0.6.6/src/trackerd/tracker-email-kmail.c	2008-12-15 21:11:22.000000000 +0000
@@ -787,7 +787,7 @@ load_uri_of_mbox_mail_message (GMimeMess
            This line is at the beginning of each header but GMIME does not give access to it so we reproduce it.
         */
 
-        field = g_mime_message_get_header (g_m_message, "From");
+        field = g_mime_object_get_header (g_m_message, "From");
 
         tmp_from = g_strdup (field);
 
@@ -862,10 +862,10 @@ fill_uri_with_uid_for_imap (GMimeMessage
 
         mail_msg->uri = NULL;
 
-        /* Currently, "g_mime_message_get_header(g_m_message, "X-UID")" does not work because GMIME
+        /* Currently, "g_mime_object_get_header(g_m_message, "X-UID")" does not work because GMIME
            only handles RFC822 headers... So we have to search X-UID header ourself. */
 
-        headers = g_mime_message_get_headers (g_m_message);
+        headers = g_mime_object_get_headers (g_m_message);
         g_return_if_fail (headers);
 
         pos_uid = strstr (headers, "X-UID");
diff -upr tracker-0.6.6.old/src/trackerd/tracker-email-thunderbird.c tracker-0.6.6/src/trackerd/tracker-email-thunderbird.c
--- tracker-0.6.6.old/src/trackerd/tracker-email-thunderbird.c	2008-01-15 04:05:03.000000000 +0000
+++ tracker-0.6.6/src/trackerd/tracker-email-thunderbird.c	2008-12-15 21:34:18.000000000 +0000
@@ -418,26 +418,27 @@ free_parser_data (gpointer user_data)
 static GSList *
 add_persons_from_internet_address_list_string_parsing (GSList *list, const gchar *s)
 {
-	InternetAddressList *addrs_list, *tmp;
+	InternetAddressList *addrs_list;
+	int i, count;
 
 	g_return_val_if_fail (s, NULL);
 
-	addrs_list = internet_address_parse_string (s);
+	addrs_list = internet_address_list_parse_string (s);
+	count = internet_address_list_length (addrs_list);
 
-	for (tmp = addrs_list; tmp; tmp = tmp->next) {
+
+	for (i = 0; i < count; i++) {
 		MailPerson *mp = email_allocate_mail_person ();
+		InternetAddress *addr;
 
-		mp->addr = g_strdup (tmp->address->value.addr);
-                if(tmp->address->name) {
-                        mp->name = g_strdup (tmp->address->name);
-                } else {
-                        mp->name = g_strdup (tmp->address->value.addr);
-                }
+		addr = internet_address_list_get_address (addrs_list, i);
+		mp->name = g_strdup (internet_address_get_name (addr));
+		mp->addr = internet_address_to_string (addr, FALSE);
 
 		list = g_slist_prepend (list, mp);
 	}
 
-	internet_address_list_destroy (addrs_list);
+	g_object_unref (addrs_list);
 
 	return list;
 }
diff -upr tracker-0.6.6.old/src/trackerd/tracker-email-utils.c tracker-0.6.6/src/trackerd/tracker-email-utils.c
--- tracker-0.6.6.old/src/trackerd/tracker-email-utils.c	2008-02-29 00:32:16.000000000 +0000
+++ tracker-0.6.6/src/trackerd/tracker-email-utils.c	2008-12-15 21:28:50.000000000 +0000
@@ -46,8 +46,8 @@ extern Tracker *tracker;
 static GMimeStream *new_gmime_stream_from_file	(const gchar *path, gint flags, off_t start, off_t end);
 
 static GSList *	add_gmime_references		(GSList *list, GMimeMessage *message, const gchar *header);
-static GSList *	add_recipients			(GSList *list, GMimeMessage *message, const gchar *type);
-static void	find_attachment			(GMimeObject *obj, gpointer data);
+static GSList *	add_recipients			(GSList *list, GMimeMessage *message, GMimeRecipientType type);
+static void	find_attachment			(GMimeObject *parent, GMimeObject *obj, gpointer data);
 
 
 
@@ -491,6 +491,124 @@ email_free_mail_message (MailMessage *ma
 	g_slice_free (MailMessage, mail_msg);
 }
 
+static GMimeObject *
+handle_multipart_alternative (GMimeMultipart *multipart, gboolean want_plain, gboolean *is_html)
+{
+	GMimeObject *mime_part, *text_part = NULL;
+	GMimeContentType *type;
+	int count, i;
+
+	count = g_mime_multipart_get_count (multipart);
+	for (i = 0; i < count ; i++) {
+		mime_part = g_mime_multipart_get_part (multipart, i);
+
+		type = g_mime_object_get_content_type (GMIME_OBJECT (mime_part));
+		if (g_mime_content_type_is_type (type, "text", "*")) {
+			if (!text_part || !g_ascii_strcasecmp (type->subtype, want_plain ? "plain" : "html")) {
+				*is_html = !g_ascii_strcasecmp (type->subtype, "html");
+				text_part = mime_part;
+			}
+		}
+	}
+
+	return text_part;
+}
+
+static GMimeObject *
+handle_multipart_mixed (GMimeMultipart *multipart, gboolean want_plain, gboolean *is_html)
+{
+	GMimeObject *mime_part, *text_part = NULL;
+	GMimeContentType *type, *first_type = NULL;
+	GList *subpart;
+	int count, i;
+
+	count = g_mime_multipart_get_count (multipart);
+	for (i = 0; i < count ; i++) {
+		mime_part = g_mime_multipart_get_part (multipart, i);
+
+		type = g_mime_object_get_content_type (mime_part);
+		if (GMIME_IS_MULTIPART (mime_part)) {
+			multipart = GMIME_MULTIPART (mime_part);
+			if (g_mime_content_type_is_type (type, "multipart", "alternative")) {
+				mime_part = handle_multipart_alternative (multipart, want_plain, is_html);
+				if (mime_part)
+					return mime_part;
+			} else {
+				mime_part = handle_multipart_mixed (multipart, want_plain, is_html);
+				if (mime_part && !text_part)
+					text_part = mime_part;
+			}
+		} else if (g_mime_content_type_is_type (type, "text", "*")) {
+			if (!g_ascii_strcasecmp (type->subtype, want_plain ? "plain" : "html")) {
+				/* we got what we came for */
+				*is_html = !g_ascii_strcasecmp (type->subtype, "html");
+				return mime_part;
+			}
+
+			/* if we haven't yet found a text part or if it is a type we can
+			   1514 	* understand and it is the first of that type, save it */
+			if (!text_part || (!g_ascii_strcasecmp (type->subtype, "plain") && (first_type &&
+											    g_ascii_strcasecmp (type->subtype, first_type->subtype) != 0))) {
+				*is_html = !g_ascii_strcasecmp (type->subtype, "html");
+				text_part = mime_part;
+				first_type = type;
+			}
+		}
+
+		subpart = subpart->next;
+	}
+
+	return text_part;
+}
+
+static char *
+tracker_mime_message_get_body (const GMimeMessage *message, gboolean want_plain, gboolean *is_html)
+{
+	GMimeObject *mime_part = NULL;
+	GMimeContentType *type;
+	GMimeMultipart *multipart;
+	char *body = NULL;
+
+	g_return_val_if_fail (GMIME_IS_MESSAGE (message), NULL);
+	g_return_val_if_fail (is_html != NULL, NULL);
+
+	type = g_mime_object_get_content_type (message->mime_part);
+	if (GMIME_IS_MULTIPART (message->mime_part)) {
+		/* let's see if we can find a body in the multipart */
+		multipart = GMIME_MULTIPART (message->mime_part);
+		if (g_mime_content_type_is_type (type, "multipart", "alternative"))
+			mime_part = handle_multipart_alternative (multipart, want_plain, is_html);
+		else
+			mime_part = handle_multipart_mixed (multipart, want_plain, is_html);
+	} else if (g_mime_content_type_is_type (type, "text", "*")) {
+		/* this *has* to be the message body */
+		if (g_mime_content_type_is_type (type, "text", "html"))
+			*is_html = TRUE;
+		else
+			*is_html = FALSE;
+
+		mime_part = message->mime_part;
+	}
+
+	if (mime_part != NULL) {
+		GMimeDataWrapper *data_wrapper;
+		GMimeStream *mime_stream;
+		gint64 len;
+
+		data_wrapper = g_mime_part_get_content_object (GMIME_PART (mime_part));
+		
+		mime_stream = g_mime_data_wrapper_get_stream (data_wrapper);
+		len = g_mime_stream_length (mime_stream);
+		body = g_malloc0 (len + 1);
+		g_mime_stream_read (mime_stream, body, len);
+		g_object_unref (mime_stream);
+		g_object_unref (data_wrapper);
+	}
+
+	return body;
+}
+
+
 
 MailMessage *
 email_mail_file_parse_next (MailFile *mf, ReadMailHelperFct read_mail_helper, gpointer read_mail_user_data)
@@ -539,7 +657,7 @@ email_mail_file_parse_next (MailFile *mf
 
 	mail_msg->subject = g_strdup (g_mime_message_get_subject (g_m_message));
 
-	mail_msg->body = g_mime_message_get_body (g_m_message, TRUE, &is_html);
+	mail_msg->body = tracker_mime_message_get_body (g_m_message, TRUE, &is_html);
 	mail_msg->content_type = g_strdup (is_html ? "text/html" : "text/plain");
 
 	if (read_mail_helper) {
@@ -549,7 +667,7 @@ email_mail_file_parse_next (MailFile *mf
 	mail_msg->attachments = NULL;
 
 	/* find then save attachments in sys tmp directory of Tracker and save entries in MailMessage struct */
-	g_mime_message_foreach_part (g_m_message, find_attachment, mail_msg);
+	g_mime_message_foreach (g_m_message, find_attachment, mail_msg);
 
 	g_object_unref (g_m_message);
 
@@ -786,23 +904,23 @@ email_decode_mail_attachment_to_file (co
 		return FALSE;
 	}
 
-	filtered_stream = g_mime_stream_filter_new_with_stream (stream_src);
+	filtered_stream = g_mime_stream_filter_new (stream_src);
 
 	switch (encoding) {
 		case MIME_ENCODING_BASE64:
-			filter = g_mime_filter_basic_new_type (GMIME_FILTER_BASIC_BASE64_DEC);
+			filter = g_mime_filter_basic_new (GMIME_CONTENT_ENCODING_BASE64, FALSE);
 			g_mime_stream_filter_add (GMIME_STREAM_FILTER (filtered_stream), filter);
 			g_object_unref (filter);
 			break;
 
 		case MIME_ENCODING_QUOTEDPRINTABLE:
-			filter = g_mime_filter_basic_new_type (GMIME_FILTER_BASIC_QP_DEC);
+			filter = g_mime_filter_basic_new (GMIME_CONTENT_ENCODING_QUOTEDPRINTABLE, FALSE);
 			g_mime_stream_filter_add (GMIME_STREAM_FILTER (filtered_stream), filter);
 			g_object_unref (filter);
 			break;
 
 		case MIME_ENCODING_UUENCODE:
-			filter = g_mime_filter_basic_new_type (GMIME_FILTER_BASIC_UU_ENC);
+			filter = g_mime_filter_basic_new (GMIME_CONTENT_ENCODING_UUENCODE, TRUE);
 			g_mime_stream_filter_add (GMIME_STREAM_FILTER (filtered_stream), filter);
 			g_object_unref (filter);
 			break;
@@ -913,7 +1031,7 @@ new_gmime_stream_from_file (const gchar 
 static GSList *
 add_gmime_references (GSList *list, GMimeMessage *message, const gchar *header)
 {
-	const gchar *tmp = g_mime_message_get_header (message, header);
+	const gchar *tmp = g_mime_object_get_header (GMIME_OBJECT (message), header);
 
 	if (tmp) {
 		GMimeReferences       *refs;
@@ -937,15 +1055,21 @@ add_gmime_references (GSList *list, GMim
 
 
 static GSList *
-add_recipients (GSList *list, GMimeMessage *message, const gchar *type)
+add_recipients (GSList *list, GMimeMessage *message, GMimeRecipientType type)
 {
-	const InternetAddressList *addrs_list;
+	InternetAddressList *addrs_list;
+	int i, count;
 
-	for (addrs_list = g_mime_message_get_recipients (message, type); addrs_list; addrs_list = addrs_list->next) {
+	addrs_list = g_mime_message_get_recipients (message, type);
+	count = internet_address_list_length (addrs_list);
+	for (i = 0; i < count; i++) {
+		InternetAddress *addr;
 		MailPerson *mp = email_allocate_mail_person ();
 
-		mp->name = g_strdup (addrs_list->address->name);
-		mp->addr = g_strdup (addrs_list->address->value.addr);
+		addr = internet_address_list_get_address (addrs_list, i);
+
+		mp->name = g_strdup (internet_address_get_name (addr));
+		mp->addr = g_strdup (internet_address_to_string (addr, FALSE));
 
 		list = g_slist_prepend (list, mp);
 	}
@@ -955,7 +1079,7 @@ add_recipients (GSList *list, GMimeMessa
 
 
 static void
-find_attachment (GMimeObject *obj, gpointer data)
+find_attachment (GMimeObject *parent, GMimeObject *obj, gpointer data)
 {
 	GMimePart   *part;
 	MailMessage *mail_msg;
@@ -969,8 +1093,8 @@ find_attachment (GMimeObject *obj, gpoin
 		GMimeMessage *g_msg = g_mime_message_part_get_message (GMIME_MESSAGE_PART (obj));
 
 		if (g_msg) {
-			g_mime_message_foreach_part (g_msg, find_attachment, data);
-			g_object_unref (g_msg);
+			g_mime_message_foreach (g_msg, find_attachment, data);
+			g_object_unref (obj);
 		}
 		return;
 
@@ -987,20 +1111,20 @@ find_attachment (GMimeObject *obj, gpoin
 
 	mail_msg = data;
 
-	content_disposition = g_mime_part_get_content_disposition (part);
+	content_disposition = g_mime_object_get_disposition (obj);
 
 	/* test whether it is a mail attachment */
 	if (content_disposition &&
 	    (strcmp (content_disposition, GMIME_DISPOSITION_ATTACHMENT) == 0 ||
 	     strcmp (content_disposition, GMIME_DISPOSITION_INLINE) == 0)) {
 
-		const GMimeContentType *content_type;
+		GMimeContentType       *content_type;
 		MailAttachment         *ma;
 		const gchar            *filename;
 		gchar                  *attachment_uri;
 		gint                   fd;
 
-		if (! (content_type = g_mime_part_get_content_type (part)))
+		if (! (content_type = g_mime_object_get_content_type (obj)))
 			return;
 
 		filename = g_mime_part_get_filename (part);
--- tracker-0.6.6.old/configure.ac	2008-03-03 04:13:34.000000000 +0000
+++ tracker-0.6.6/configure.ac	2008-12-15 21:10:17.000000000 +0000
@@ -65,7 +65,7 @@ AC_SUBST(PANGO_CFLAGS)
 AC_SUBST(PANGO_LIBS)
 
 # Check for GMime
-PKG_CHECK_MODULES(GMIME, [ gmime-2.0 >= $GMIME_REQUIRED ])
+PKG_CHECK_MODULES(GMIME, [ gmime-2.4 >= $GMIME_REQUIRED ])
 AC_SUBST(GMIME_CFLAGS)
 AC_SUBST(GMIME_LIBS)