diff --git a/.cvsignore b/.cvsignore index c2dc495..36d639d 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -tracker-0.6.6.tar.bz2 +tracker-0.6.90.tar.bz2 diff --git a/sources b/sources index 4f53404..2261442 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -0845998f8f0d715b3f1b306d59fdae4d tracker-0.6.6.tar.bz2 +5b4a85a67e3305e00a1e71f8d340e179 tracker-0.6.90.tar.bz2 diff --git a/tracker-gmime-2.4.patch b/tracker-gmime-2.4.patch index 8981223..bdbf814 100644 --- a/tracker-gmime-2.4.patch +++ b/tracker-gmime-2.4.patch @@ -1,392 +1,618 @@ -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) +--- configure.ac 2009-02-09 12:15:00.000000000 -0500 ++++ configure.ac.new 2009-02-09 21:35:08.000000000 -0500 +@@ -108,7 +108,7 @@ + GLIB_REQUIRED=2.16.0 + PANGO_REQUIRED=1.0.0 + QDBM_REQUIRED=1.8 +-GMIME_REQUIRED=2.1.0 ++GMIME_REQUIRED=2.4.0 + LIBXML2_REQUIRED=0.6 + HAL_REQUIRED=0.5 + GDKPIXBUF_REQUIRED=2.12.0 +@@ -153,7 +153,7 @@ 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 ]) +-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) +Index: src/tracker-indexer/modules/evolution-common.h +=================================================================== +--- src/tracker-indexer/modules/evolution-common.h (revision 2802) ++++ src/tracker-indexer/modules/evolution-common.h (working copy) +@@ -55,7 +55,6 @@ + gint flags, + off_t start); + TrackerModuleMetadata * evolution_common_get_wrapper_metadata (GMimeDataWrapper *wrapper); +-gchar * evolution_common_get_object_encoding (GMimeObject *object); + + G_END_DECLS + +Index: src/tracker-indexer/modules/evolution-pop.c +=================================================================== +--- src/tracker-indexer/modules/evolution-pop.c (revision 2802) ++++ src/tracker-indexer/modules/evolution-pop.c (working copy) +@@ -175,7 +175,7 @@ + gchar *number; + gint id; + +- header = g_mime_message_get_header (message, "X-Evolution"); ++ header = g_mime_object_get_header (GMIME_OBJECT (message), "X-Evolution"); + + if (!header) { + return -1; +@@ -253,8 +253,12 @@ + tracker_evolution_pop_file_get_text (TrackerModuleFile *file) + { + TrackerEvolutionPopFile *self; +- gchar *text, *encoding, *utf8_text; +- gboolean is_html; ++ const gchar *encoding; ++ gchar buffer[1024]; ++ guint len; ++ GString *body; ++ GMimeStream *stream; ++ GMimeDataWrapper *data; + + self = TRACKER_EVOLUTION_POP_FILE (file); + +@@ -263,27 +267,38 @@ + return NULL; + } + +- text = g_mime_message_get_body (self->message, TRUE, &is_html); ++ data = g_mime_part_get_content_object (GMIME_PART (self->message)); + +- if (!text) { +- return NULL; +- } ++ if (!data) ++ return NULL; + +- encoding = evolution_common_get_object_encoding (GMIME_OBJECT (self->message)); ++ stream = g_mime_data_wrapper_get_stream (data); + +- if (!encoding) { +- /* FIXME: could still puke on non-utf8 +- * messages without proper content type +- */ +- return text; +- } ++ if (!stream) { ++ g_object_unref (data); ++ return NULL; ++ } + +- utf8_text = g_convert (text, -1, "utf8", encoding, NULL, NULL, NULL); ++ body = g_string_new (""); + +- g_free (encoding); +- g_free (text); ++ encoding = g_mime_object_get_content_disposition_parameter (GMIME_OBJECT (self->message), "charset"); + +- return utf8_text; ++ while (!g_mime_stream_eos (stream)) { ++ len = g_mime_stream_read (stream, buffer, 1024); ++ if (len > 0 && g_utf8_validate (buffer, len, NULL)) { ++ if (!encoding) ++ g_string_append_len (body, buffer, (gssize) len); ++ else { ++ gchar *part_body = g_convert (buffer, (gssize) len, "utf8", encoding, NULL, NULL, NULL); ++ g_string_append (body, part_body); ++ g_free (part_body); ++ } ++ } ++ } ++ ++ g_object_unref (stream); ++ ++ return g_string_free (body, FALSE); + } + + static guint +@@ -291,7 +306,7 @@ + { + const gchar *header, *pos; + +- header = g_mime_message_get_header (message, "X-Evolution"); ++ header = g_mime_object_get_header (GMIME_OBJECT (message), "X-Evolution"); + + if (!header) { + return 0; +@@ -304,34 +319,24 @@ + + static GList * + get_message_recipients (GMimeMessage *message, +- const gchar *type) ++ GMimeRecipientType type) + { + GList *list = NULL; +- const InternetAddressList *addresses; ++ InternetAddressList *addresses; ++ guint len, i; + + addresses = g_mime_message_get_recipients (message, type); + +- while (addresses) { ++ len = internet_address_list_length (addresses); ++ ++ while (i < len) { + InternetAddress *address; +- gchar *str; + +- address = addresses->address; ++ address = internet_address_list_get_address (addresses, i); + +- if (address->name && address->value.addr) { +- str = g_strdup_printf ("%s %s", address->name, address->value.addr); +- } else if (address->value.addr) { +- str = g_strdup (address->value.addr); +- } else if (address->name) { +- str = g_strdup (address->name); +- } else { +- str = NULL; +- } ++ list = g_list_prepend (list, internet_address_to_string (address, TRUE)); + +- if (str) { +- list = g_list_prepend (list, str); +- } +- +- addresses = addresses->next; ++ i++; + } + + return g_list_reverse (list); +@@ -427,7 +432,8 @@ + } + + static void +-extract_mime_parts (GMimeObject *object, ++extract_mime_parts (GMimeObject *parent, ++ GMimeObject *object, + gpointer user_data) + { + GList **list = (GList **) user_data; +@@ -440,7 +446,7 @@ + message = g_mime_message_part_get_message (GMIME_MESSAGE_PART (object)); + + if (message) { +- g_mime_message_foreach_part (message, extract_mime_parts, user_data); ++ g_mime_message_foreach (message, extract_mime_parts, user_data); + g_object_unref (message); + } + +@@ -451,7 +457,7 @@ + } + + part = GMIME_PART (object); +- disposition = g_mime_part_get_content_disposition (part); ++ disposition = g_mime_object_get_disposition (GMIME_OBJECT (part)); + + if (!disposition || + (strcmp (disposition, GMIME_DISPOSITION_ATTACHMENT) != 0 && +@@ -484,9 +490,9 @@ + if (self->message) { + /* Iterate through mime parts, if any */ + if (!self->mime_parts) { +- g_mime_message_foreach_part (self->message, +- extract_mime_parts, +- &self->mime_parts); ++ g_mime_message_foreach (self->message, ++ extract_mime_parts, ++ &self->mime_parts); + self->current_mime_part = self->mime_parts; + } else { + self->current_mime_part = self->current_mime_part->next; +Index: src/tracker-indexer/modules/evolution-imap.c +=================================================================== +--- src/tracker-indexer/modules/evolution-imap.c (revision 2802) ++++ src/tracker-indexer/modules/evolution-imap.c (working copy) +@@ -551,7 +551,7 @@ + static gboolean + get_attachment_info (const gchar *mime_file, + gchar **name, +- GMimePartEncodingType *encoding) ++ GMimeContentEncoding *encoding) + { + GMimeContentType *mime; + gchar *tmp, *mime_content; +@@ -562,7 +562,7 @@ + } + + if (encoding) { +- *encoding = GMIME_PART_ENCODING_DEFAULT; ++ *encoding = GMIME_CONTENT_ENCODING_DEFAULT; + } + + if (!g_file_get_contents (mime_file, &tmp, NULL, NULL)) { +@@ -609,7 +609,7 @@ + *name = g_strdup (g_mime_content_type_get_parameter (mime, "name")); + } + +- g_mime_content_type_destroy (mime); ++ g_object_unref (mime); + } + + if (name && !*name) { +@@ -631,17 +631,17 @@ + gchar *encoding_str = g_strndup (pos_encoding, pos_end_encoding - pos_encoding); + + if (strcmp (encoding_str, "7bit") == 0) { +- *encoding = GMIME_PART_ENCODING_7BIT; ++ *encoding = GMIME_CONTENT_ENCODING_7BIT; + } else if (strcmp (encoding_str, "8bit") == 0) { +- *encoding = GMIME_PART_ENCODING_7BIT; ++ *encoding = GMIME_CONTENT_ENCODING_8BIT; + } else if (strcmp (encoding_str, "binary") == 0) { +- *encoding = GMIME_PART_ENCODING_BINARY; ++ *encoding = GMIME_CONTENT_ENCODING_BINARY; + } else if (strcmp (encoding_str, "base64") == 0) { +- *encoding = GMIME_PART_ENCODING_BASE64; ++ *encoding = GMIME_CONTENT_ENCODING_BASE64; + } else if (strcmp (encoding_str, "quoted-printable") == 0) { +- *encoding = GMIME_PART_ENCODING_QUOTEDPRINTABLE; ++ *encoding = GMIME_CONTENT_ENCODING_QUOTEDPRINTABLE; + } else if (strcmp (encoding_str, "x-uuencode") == 0) { +- *encoding = GMIME_PART_ENCODING_UUENCODE; ++ *encoding = GMIME_CONTENT_ENCODING_UUENCODE; + } + + g_free (encoding_str); +@@ -728,14 +728,17 @@ + } + + static void +-extract_message_text (GMimeObject *object, ++extract_message_text (GMimeObject *parent, ++ GMimeObject *object, + gpointer user_data) + { + GString *body = (GString *) user_data; +- GMimePartEncodingType part_encoding; ++ GMimeContentEncoding part_encoding; + GMimePart *part; +- const gchar *content, *disposition, *filename; +- gchar *encoding, *part_body; ++ GMimeStream *stream; ++ GMimeDataWrapper *data; ++ const gchar *disposition, *filename, *encoding; ++ gchar *part_body, buffer[1024]; + gsize len; + + if (GMIME_IS_MESSAGE_PART (object)) { +@@ -744,7 +747,7 @@ + message = g_mime_message_part_get_message (GMIME_MESSAGE_PART (object)); + + if (message) { +- g_mime_message_foreach_part (message, extract_message_text, user_data); ++ g_mime_message_foreach (message, extract_message_text, user_data); + g_object_unref (message); + } + +@@ -756,12 +759,12 @@ + + part = GMIME_PART (object); + filename = g_mime_part_get_filename (part); +- disposition = g_mime_part_get_content_disposition (part); +- part_encoding = g_mime_part_get_encoding (part); ++ disposition = g_mime_object_get_disposition (GMIME_OBJECT (part)); ++ part_encoding = g_mime_part_get_content_encoding (part); + +- if (part_encoding == GMIME_PART_ENCODING_BINARY || +- part_encoding == GMIME_PART_ENCODING_BASE64 || +- part_encoding == GMIME_PART_ENCODING_UUENCODE) { ++ if (part_encoding == GMIME_CONTENT_ENCODING_BINARY || ++ part_encoding == GMIME_CONTENT_ENCODING_BASE64 || ++ part_encoding == GMIME_CONTENT_ENCODING_UUENCODE) { + return; + } + +@@ -776,31 +779,34 @@ + return; + } + +- content = g_mime_part_get_content (GMIME_PART (object), &len); ++ data = g_mime_part_get_content_object (GMIME_PART (object)); + +- if (!content) { +- return; +- } ++ if (!data) ++ return; + +- if (g_utf8_validate (content, len, NULL)) { +- g_string_append_len (body, content, (gssize) len); +- return; +- } ++ stream = g_mime_data_wrapper_get_stream (data); + +- encoding = evolution_common_get_object_encoding (object); ++ if (!stream) { ++ g_object_unref (data); ++ return; ++ } + +- if (!encoding) { +- /* FIXME: This will break for non-utf8 text without +- * the proper content type set +- */ +- g_string_append_len (body, content, (gssize) len); +- } else { +- part_body = g_convert (content, (gssize) len, "utf8", encoding, NULL, NULL, NULL); +- g_string_append (body, part_body); ++ encoding = g_mime_object_get_content_disposition_parameter (GMIME_OBJECT (part), "charset"); + +- g_free (part_body); +- g_free (encoding); +- } ++ while (!g_mime_stream_eos (stream)) { ++ len = g_mime_stream_read (stream, buffer, 1024); ++ if (len > 0 && g_utf8_validate (buffer, len, NULL)) { ++ if (!encoding) ++ g_string_append_len (body, buffer, (gssize) len); ++ else { ++ part_body = g_convert (buffer, (gssize) len, "utf8", encoding, NULL, NULL, NULL); ++ g_string_append (body, part_body); ++ g_free (part_body); ++ } ++ } ++ } ++ ++ g_object_unref (stream); + } + + static gchar * +@@ -840,7 +846,7 @@ + + if (message) { + body = g_string_new (NULL); +- g_mime_message_foreach_part (message, extract_message_text, body); ++ g_mime_message_foreach (message, extract_message_text, body); + g_object_unref (message); + } + +@@ -1024,7 +1030,7 @@ + TrackerModuleMetadata *metadata; + GMimeStream *stream; + GMimeDataWrapper *wrapper; +- GMimePartEncodingType encoding; ++ GMimeContentEncoding encoding; + gchar *path, *name; + + if (!get_attachment_info (mime_file, &name, &encoding)) { +Index: src/tracker-indexer/modules/evolution-common.c +=================================================================== +--- src/tracker-indexer/modules/evolution-common.c (revision 2802) ++++ src/tracker-indexer/modules/evolution-common.c (working copy) +@@ -89,41 +89,3 @@ + return metadata; + } + +-gchar * +-evolution_common_get_object_encoding (GMimeObject *object) +-{ +- const gchar *start_encoding, *end_encoding; +- const gchar *content_type = NULL; +- +- if (GMIME_IS_MESSAGE (object)) { +- content_type = g_mime_message_get_header (GMIME_MESSAGE (object), "Content-Type"); +- } else if (GMIME_IS_PART (object)) { +- content_type = g_mime_part_get_content_header (GMIME_PART (object), "Content-Type"); +- } +- +- if (!content_type) { +- return NULL; +- } +- +- start_encoding = strstr (content_type, "charset="); +- +- if (!start_encoding) { +- return NULL; +- } +- +- start_encoding += strlen ("charset="); +- +- if (start_encoding[0] == '"') { +- /* encoding is quoted */ +- start_encoding++; +- end_encoding = strstr (start_encoding, "\""); +- } else { +- end_encoding = strstr (start_encoding, ";"); +- } +- +- if (end_encoding) { +- return g_strndup (start_encoding, end_encoding - start_encoding); +- } else { +- return g_strdup (start_encoding); +- } +-} +Index: src/tracker-indexer/modules/evolution-imap-db.c +=================================================================== +--- src/tracker-indexer/modules/evolution-imap-db.c (revision 2802) ++++ src/tracker-indexer/modules/evolution-imap-db.c (working copy) +@@ -360,7 +360,7 @@ + if (result == SQLITE_ROW) { + const gchar *folder; + +- folder = sqlite3_column_text (stmt, 0); ++ folder = (gchar *) sqlite3_column_text (stmt, 0); + + if (folder[0] != '.') { + self->folders = g_list_prepend (self->folders, g_strdup (folder)); +@@ -420,7 +420,7 @@ + static gboolean + get_attachment_info (const gchar *mime_file, + gchar **name, +- GMimePartEncodingType *encoding) ++ GMimeContentEncoding *encoding) + { + GMimeContentType *mime; + gchar *tmp, *mime_content; +@@ -431,7 +431,7 @@ + } + + if (encoding) { +- *encoding = GMIME_PART_ENCODING_DEFAULT; ++ *encoding = GMIME_CONTENT_ENCODING_DEFAULT; + } + + if (!g_file_get_contents (mime_file, &tmp, NULL, NULL)) { +@@ -478,7 +478,7 @@ + *name = g_strdup (g_mime_content_type_get_parameter (mime, "name")); + } + +- g_mime_content_type_destroy (mime); ++ g_object_unref (mime); + } + + if (name && !*name) { +@@ -500,17 +500,17 @@ + gchar *encoding_str = g_strndup (pos_encoding, pos_end_encoding - pos_encoding); + + if (strcmp (encoding_str, "7bit") == 0) { +- *encoding = GMIME_PART_ENCODING_7BIT; ++ *encoding = GMIME_CONTENT_ENCODING_7BIT; + } else if (strcmp (encoding_str, "8bit") == 0) { +- *encoding = GMIME_PART_ENCODING_7BIT; ++ *encoding = GMIME_CONTENT_ENCODING_7BIT; + } else if (strcmp (encoding_str, "binary") == 0) { +- *encoding = GMIME_PART_ENCODING_BINARY; ++ *encoding = GMIME_CONTENT_ENCODING_BINARY; + } else if (strcmp (encoding_str, "base64") == 0) { +- *encoding = GMIME_PART_ENCODING_BASE64; ++ *encoding = GMIME_CONTENT_ENCODING_BASE64; + } else if (strcmp (encoding_str, "quoted-printable") == 0) { +- *encoding = GMIME_PART_ENCODING_QUOTEDPRINTABLE; ++ *encoding = GMIME_CONTENT_ENCODING_QUOTEDPRINTABLE; + } else if (strcmp (encoding_str, "x-uuencode") == 0) { +- *encoding = GMIME_PART_ENCODING_UUENCODE; ++ *encoding = GMIME_CONTENT_ENCODING_UUENCODE; + } + + g_free (encoding_str); +@@ -586,14 +586,17 @@ + } + + static void +-extract_message_text (GMimeObject *object, ++extract_message_text (GMimeObject *parent, ++ GMimeObject *object, + gpointer user_data) + { + GString *body = (GString *) user_data; +- GMimePartEncodingType part_encoding; ++ GMimeContentEncoding part_encoding; + GMimePart *part; +- const gchar *content, *disposition, *filename; +- gchar *encoding, *part_body; ++ GMimeStream *stream; ++ GMimeDataWrapper *data; ++ const gchar *disposition, *filename, *encoding; ++ gchar *part_body, buffer[1024]; + gsize len; + + if (GMIME_IS_MESSAGE_PART (object)) { +@@ -602,7 +605,7 @@ + message = g_mime_message_part_get_message (GMIME_MESSAGE_PART (object)); + + if (message) { +- g_mime_message_foreach_part (message, extract_message_text, user_data); ++ g_mime_message_foreach (message, extract_message_text, user_data); + g_object_unref (message); + } + +@@ -614,12 +617,12 @@ + + part = GMIME_PART (object); + filename = g_mime_part_get_filename (part); +- disposition = g_mime_part_get_content_disposition (part); +- part_encoding = g_mime_part_get_encoding (part); ++ disposition = g_mime_object_get_disposition (GMIME_OBJECT (part)); ++ part_encoding = g_mime_part_get_content_encoding (part); + +- if (part_encoding == GMIME_PART_ENCODING_BINARY || +- part_encoding == GMIME_PART_ENCODING_BASE64 || +- part_encoding == GMIME_PART_ENCODING_UUENCODE) { ++ if (part_encoding == GMIME_CONTENT_ENCODING_BINARY || ++ part_encoding == GMIME_CONTENT_ENCODING_BASE64 || ++ part_encoding == GMIME_CONTENT_ENCODING_UUENCODE) { + return; + } + +@@ -634,34 +637,34 @@ + return; + } + +- content = g_mime_part_get_content (GMIME_PART (object), &len); ++ data = g_mime_part_get_content_object (GMIME_PART (object)); + +- if (!content) { +- return; +- } ++ if (!data) ++ return; + +- if (g_utf8_validate (content, len, NULL)) { +- g_string_append_len (body, content, (gssize) len); +- return; +- } ++ stream = g_mime_data_wrapper_get_stream (data); + +- encoding = evolution_common_get_object_encoding (object); ++ if (!stream) { ++ g_object_unref (data); ++ return; ++ } + +- if (!encoding) { +- /* FIXME: This will break for non-utf8 text without +- * the proper content type set +- */ +- g_string_append_len (body, content, (gssize) len); +- } else { +- part_body = g_convert (content, (gssize) len, "utf8", encoding, NULL, NULL, NULL); ++ encoding = g_mime_object_get_content_disposition_parameter (GMIME_OBJECT (part), "charset"); + +- if (part_body) { +- g_string_append (body, part_body); +- g_free (part_body); ++ while (!g_mime_stream_eos (stream)) { ++ len = g_mime_stream_read (stream, buffer, 1024); ++ if (len > 0 && g_utf8_validate (buffer, len, NULL)) { ++ if (!encoding) ++ g_string_append_len (body, buffer, (gssize) len); ++ else { ++ part_body = g_convert (buffer, (gssize) len, "utf8", encoding, NULL, NULL, NULL); ++ g_string_append (body, part_body); ++ g_free (part_body); ++ } + } ++ } + +- g_free (encoding); +- } ++ g_object_unref (stream); + } + + static gchar * +@@ -706,7 +709,7 @@ + + if (message) { + body = g_string_new (NULL); +- g_mime_message_foreach_part (message, extract_message_text, body); ++ g_mime_message_foreach (message, extract_message_text, body); + g_object_unref (message); + } + +@@ -799,7 +802,7 @@ + TrackerModuleMetadata *metadata; + GMimeStream *stream; + GMimeDataWrapper *wrapper; +- GMimePartEncodingType encoding; ++ GMimeContentEncoding encoding; + gchar *path, *name; + + if (!get_attachment_info (mime_file, &name, &encoding)) { diff --git a/tracker.spec b/tracker.spec index b1fc0ab..869a17e 100644 --- a/tracker.spec +++ b/tracker.spec @@ -1,21 +1,22 @@ Summary: An object database, tag/metadata database, search tool and indexer Name: tracker -Version: 0.6.6 -Release: 10%{?dist} +Version: 0.6.90 +Release: 1%{?dist} License: GPLv2+ Group: Applications/System -URL: http://www.gnome.org/~jamiemcc/tracker/ -Source0: http://www.gnome.org/~jamiemcc/tracker/%{name}-%{version}.tar.bz2 +URL: http://projects.gnome.org/tracker/ +Source0: http://ftp.gnome.org/pub/GNOME/sources/tracker/0.6/%{name}-%{version}.tar.bz2 # http://bugzilla.gnome.org/show_bug.cgi?id=564640 Patch0: tracker-gmime-2.4.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) -BuildRequires: gmime-devel, poppler-glib-devel, gettext +BuildRequires: gmime-devel, poppler-glib-devel, evolution-devel BuildRequires: gnome-desktop-devel, gamin-devel, libnotify-devel -BuildRequires: libexif-devel, libgsf-devel, gstreamer-devel, exempi-devel -BuildRequires: desktop-file-utils, intltool, deskbar-applet -BuildRequires: sqlite-devel, qdbm-devel, pygtk2-devel +BuildRequires: totem-pl-parser-devel, libgsf-devel, gstreamer-devel +BuildRequires: gstreamer-plugins-base-devel +BuildRequires: libjpeg-devel, libexif-devel, exempi-devel, raptor-devel +BuildRequires: desktop-file-utils, intltool, gettext, deskbar-applet +BuildRequires: sqlite-devel, qdbm-devel, pygtk2-devel, libtiff-devel BuildRequires: autoconf, automake, libtool -Requires: o3read %description Tracker is a powerful desktop-neutral first class object database, @@ -54,7 +55,7 @@ GNOME libraries %prep %setup -q -%patch0 -p1 +%patch0 -p0 autoreconf -f -i %define deskbar_applet_ver %(pkg-config --modversion deskbar-applet) @@ -114,14 +115,15 @@ fi %exclude %{_bindir}/tracker-applet %exclude %{_bindir}/tracker-preferences %exclude %{_bindir}/tracker-search-tool -%exclude %{_bindir}/tracker-thumbnailer -%exclude %{_bindir}/o3totxt +%{_libexecdir}/tracker* %{_datadir}/tracker/ -%{_datadir}/dbus-1/services/tracker.service +%{_datadir}/dbus-1/services/org.freedesktop.Tracker.* %{_libdir}/*.so.* %{_libdir}/tracker/ %{_mandir}/*/tracker*.gz %{_sysconfdir}/xdg/autostart/trackerd.desktop +%doc %{_datadir}/gtk-doc/html/libtracker-common/ +%doc %{_datadir}/gtk-doc/html/libtracker-module/ %files devel %defattr(-, root, root, -) @@ -135,13 +137,15 @@ fi %{_bindir}/tracker-applet %{_bindir}/tracker-preferences %{_bindir}/tracker-search-tool -%{_bindir}/tracker-thumbnailer %{deskbar_applet_dir}/tracker*.py* %{_datadir}/icons/*/*/apps/tracker.* %{_datadir}/applications/*.desktop %{_sysconfdir}/xdg/autostart/tracker-applet.desktop %changelog +* Mon Feb 09 2009 Deji Akingunola - 0.6.90-1 +- New release, with tons of changes + * Tue Dec 23 2008 - Caolán McNamara - 0.6.6-10 - make build