summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartyn Russell <martyn@lanedo.com>2010-02-04 10:55:13 +0000
committerMartyn Russell <martyn@lanedo.com>2010-02-04 10:55:13 +0000
commit85bf3af010552ff49a245319d82c3c0756d1fd26 (patch)
tree3ba15403e23573627279ac9dcfbeec50772e75fb
parent2bd59c21bff0698dada5697d5705a739c8d398c4 (diff)
downloadtracker-85bf3af010552ff49a245319d82c3c0756d1fd26.tar.gz
Applied debian patch 30-gmime-2.4.patch
-rw-r--r--configure.ac4
-rw-r--r--src/tracker-indexer/modules/evolution-common.c38
-rw-r--r--src/tracker-indexer/modules/evolution-common.h1
-rw-r--r--src/tracker-indexer/modules/evolution-imap.c88
-rw-r--r--src/tracker-indexer/modules/evolution-pop.c96
5 files changed, 100 insertions, 127 deletions
diff --git a/configure.ac b/configure.ac
index 8cb13b27e..5a3dbec23 100644
--- a/configure.ac
+++ b/configure.ac
@@ -132,7 +132,7 @@ PANGO_REQUIRED=1.0.0
GTK_REQUIRED=2.16.0
GLADE_REQUIRED=2.5
QDBM_REQUIRED=1.8
-GMIME_REQUIRED=2.1.0
+GMIME_REQUIRED=2.4.0
LIBXML2_REQUIRED=0.6
LIBNOTIFY_REQUIRED=0.4.3
HAL_REQUIRED=0.5
@@ -182,7 +182,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)
diff --git a/src/tracker-indexer/modules/evolution-common.c b/src/tracker-indexer/modules/evolution-common.c
index be383e488..928647441 100644
--- a/src/tracker-indexer/modules/evolution-common.c
+++ b/src/tracker-indexer/modules/evolution-common.c
@@ -89,41 +89,3 @@ evolution_common_get_wrapper_metadata (GMimeDataWrapper *wrapper)
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);
- }
-}
diff --git a/src/tracker-indexer/modules/evolution-common.h b/src/tracker-indexer/modules/evolution-common.h
index 043a7835d..303e6b5e0 100644
--- a/src/tracker-indexer/modules/evolution-common.h
+++ b/src/tracker-indexer/modules/evolution-common.h
@@ -55,7 +55,6 @@ GMimeStream * evolution_common_get_stream (const gchar
gint flags,
off_t start);
TrackerModuleMetadata * evolution_common_get_wrapper_metadata (GMimeDataWrapper *wrapper);
-gchar * evolution_common_get_object_encoding (GMimeObject *object);
G_END_DECLS
diff --git a/src/tracker-indexer/modules/evolution-imap.c b/src/tracker-indexer/modules/evolution-imap.c
index b33240d00..6b3245521 100644
--- a/src/tracker-indexer/modules/evolution-imap.c
+++ b/src/tracker-indexer/modules/evolution-imap.c
@@ -557,7 +557,7 @@ get_message_path (TrackerModuleFile *file,
static gboolean
get_attachment_info (const gchar *mime_file,
gchar **name,
- GMimePartEncodingType *encoding)
+ GMimeContentEncoding *encoding)
{
GMimeContentType *mime;
gchar *tmp, *mime_content;
@@ -568,7 +568,7 @@ get_attachment_info (const gchar *mime_file,
}
if (encoding) {
- *encoding = GMIME_PART_ENCODING_DEFAULT;
+ *encoding = GMIME_CONTENT_ENCODING_DEFAULT;
}
if (!g_file_get_contents (mime_file, &tmp, NULL, NULL)) {
@@ -615,7 +615,7 @@ get_attachment_info (const gchar *mime_file,
*name = g_strdup (g_mime_content_type_get_parameter (mime, "name"));
}
- g_mime_content_type_destroy (mime);
+ g_object_unref (mime);
}
if (name && !*name) {
@@ -637,17 +637,17 @@ get_attachment_info (const gchar *mime_file,
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);
@@ -734,14 +734,17 @@ tracker_evolution_imap_file_get_uri (TrackerModuleFile *file)
}
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)) {
@@ -750,7 +753,7 @@ extract_message_text (GMimeObject *object,
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);
}
@@ -762,12 +765,12 @@ extract_message_text (GMimeObject *object,
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;
}
@@ -782,31 +785,34 @@ extract_message_text (GMimeObject *object,
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");
+
+ 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 (part_body);
- g_free (encoding);
- }
+ g_object_unref (stream);
}
static gchar *
@@ -846,7 +852,7 @@ tracker_evolution_imap_file_get_text (TrackerModuleFile *file)
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);
}
@@ -1030,7 +1036,7 @@ get_attachment_metadata (TrackerModuleFile *file,
TrackerModuleMetadata *metadata;
GMimeStream *stream;
GMimeDataWrapper *wrapper;
- GMimePartEncodingType encoding;
+ GMimeContentEncoding encoding;
gchar *path, *name;
if (!get_attachment_info (mime_file, &name, &encoding)) {
diff --git a/src/tracker-indexer/modules/evolution-pop.c b/src/tracker-indexer/modules/evolution-pop.c
index 0802893d0..4bded7220 100644
--- a/src/tracker-indexer/modules/evolution-pop.c
+++ b/src/tracker-indexer/modules/evolution-pop.c
@@ -175,7 +175,7 @@ get_message_id (GMimeMessage *message)
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 @@ static gchar *
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 @@ tracker_evolution_pop_file_get_text (TrackerModuleFile *file)
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 @@ get_message_flags (GMimeMessage *message)
{
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 @@ get_message_flags (GMimeMessage *message)
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;
-
- 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;
- }
- if (str) {
- list = g_list_prepend (list, str);
- }
+ address = internet_address_list_get_address (addresses, i);
+
+ list = g_list_prepend (list, internet_address_to_string (address, TRUE));
- addresses = addresses->next;
+ i++;
}
return g_list_reverse (list);
@@ -427,7 +432,8 @@ tracker_evolution_pop_file_get_flags (TrackerModuleFile *file)
}
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 @@ extract_mime_parts (GMimeObject *object,
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 @@ extract_mime_parts (GMimeObject *object,
}
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 @@ tracker_evolution_pop_file_iter_contents (TrackerModuleIteratable *iteratable)
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;