aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Worth <cworth@cworth.org>2009-10-14 15:33:16 -0700
committerCarl Worth <cworth@cworth.org>2009-10-14 15:36:13 -0700
commit7878175ed943351c39ce5cebc6f10939b2b88422 (patch)
tree4deb693fe3f6b85fc8a9ba2914e1e6d11e796c64
parent6363ab32eab64c1618f8d257953f31877d09b2a9 (diff)
notmuch-index-message: Add explicit support for multipart mime.
Instead of using the recursive "foreach" method, we implement our own recursive function. This allows us to ignore the signature component of a multipart/signed message, (which we certainly don't need to index).
-rw-r--r--notmuch-index-message.cc28
1 files changed, 22 insertions, 6 deletions
diff --git a/notmuch-index-message.cc b/notmuch-index-message.cc
index bb393641..852f4e16 100644
--- a/notmuch-index-message.cc
+++ b/notmuch-index-message.cc
@@ -395,16 +395,32 @@ gen_terms_body_str (Xapian::TermGenerator term_gen,
/* Callback to generate terms for each mime part of a message. */
static void
-gen_terms_part (GMimeObject *parent,
- GMimeObject *part,
- gpointer user_data)
+gen_terms_part (Xapian::TermGenerator term_gen,
+ GMimeObject *part)
{
- Xapian::TermGenerator *term_gen = (Xapian::TermGenerator *) user_data;
GMimeStream *stream;
GMimeDataWrapper *wrapper;
GByteArray *byte_array;
char *body;
+ if (GMIME_IS_MULTIPART (part)) {
+ GMimeMultipart *multipart = GMIME_MULTIPART (part);
+ int i;
+
+ for (i = 0; i < g_mime_multipart_get_count (multipart); i++) {
+ if (GMIME_IS_MULTIPART_SIGNED (multipart)) {
+ /* Don't index the signature. */
+ if (i == 1)
+ continue;
+ if (i > 1)
+ fprintf (stderr, "Warning: Unexpected extra parts of mutlipart/signed. Indexing anyway.\n");
+ }
+ gen_terms_part (term_gen,
+ g_mime_multipart_get_part (multipart, i));
+ }
+ return;
+ }
+
if (! GMIME_IS_PART (part)) {
fprintf (stderr, "Warning: Not indexing unknown mime part: %s.\n",
g_type_name (G_OBJECT_TYPE (part)));
@@ -422,7 +438,7 @@ gen_terms_part (GMimeObject *parent,
body = (char *) g_byte_array_free (byte_array, FALSE);
- gen_terms_body_str (*term_gen, body);
+ gen_terms_body_str (term_gen, body);
free (body);
}
@@ -483,7 +499,7 @@ index_file (Xapian::WritableDatabase db,
gen_terms (term_gen, "subject", subject);
gen_terms (term_gen, "body", subject);
- g_mime_message_foreach (message, gen_terms_part, &term_gen);
+ gen_terms_part (term_gen, g_mime_message_get_mime_part (message));
parents = g_ptr_array_new ();