aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Carl Worth <cworth@cworth.org>2011-05-16 22:28:36 -0700
committerGravatar Carl Worth <cworth@cworth.org>2011-05-17 14:51:06 -0700
commitc51d5b3cdb5ca0816816e88ca6f7136a24e74eee (patch)
treebe75427f07bc5c6b16a8467bf3ed6c47ccfc15c3
parentd67f75549785117a8e0c3bc4f0bd71352a29974c (diff)
notmuch show: Include output for the enclosing multipart part of a MIME mail
Previously, the outer multipart part of any multipart/mixed, multipart/signed, etc. MIME message was silently omitted from the "notmuch show" output. This prevented any client from correctly determining to which parts a signature applies, for example. Now, we actually emit these parts as their own parts. The output is still flattened---the contained parts are not yet included "within" the multipart part---so it's still not possible to determine to which parts a signature applies, but this is one step along the path. The test suite is updated to reflect this change, (though we'll eventually want to fix the emacs interface to not display buttons for the multipart enclosure parts as there's nothing useful for the user to actually do with them).
-rw-r--r--notmuch-show.c5
-rw-r--r--show-message.c3
-rw-r--r--test/emacs.expected-output/notmuch-show-thread-maildir-storage12
-rwxr-xr-xtest/multipart14
4 files changed, 29 insertions, 5 deletions
diff --git a/notmuch-show.c b/notmuch-show.c
index ef421ec7..c8771520 100644
--- a/notmuch-show.c
+++ b/notmuch-show.c
@@ -410,6 +410,11 @@ format_part_text (GMimeObject *part, int *part_count)
show_part_content (part, stream_stdout);
g_object_unref(stream_stdout);
}
+ else if (g_mime_content_type_is_type (content_type, "multipart", "*"))
+ {
+ /* Do nothing for multipart since its content will be printed
+ * when recursing. */
+ }
else
{
printf ("Non-text part: %s\n",
diff --git a/show-message.c b/show-message.c
index b1b61be4..ff9146e2 100644
--- a/show-message.c
+++ b/show-message.c
@@ -30,6 +30,9 @@ show_message_part (GMimeObject *part, int *part_count,
GMimeMultipart *multipart = GMIME_MULTIPART (part);
int i;
+ *part_count = *part_count + 1;
+ (*show_part) (part, part_count);
+
for (i = 0; i < g_mime_multipart_get_count (multipart); i++) {
show_message_part (g_mime_multipart_get_part (multipart, i),
part_count, show_part);
diff --git a/test/emacs.expected-output/notmuch-show-thread-maildir-storage b/test/emacs.expected-output/notmuch-show-thread-maildir-storage
index 086f8740..6eed85b8 100644
--- a/test/emacs.expected-output/notmuch-show-thread-maildir-storage
+++ b/test/emacs.expected-output/notmuch-show-thread-maildir-storage
@@ -3,6 +3,9 @@ Subject: [notmuch] Working with Maildir storage?
To: notmuch@notmuchmail.org
Date: Tue, 17 Nov 2009 14:00:54 -0500
+[ multipart/mixed ]
+[ multipart/signed ]
+[ text/plain ]
I saw the LWN article and decided to take a look at notmuch. I'm
currently using mutt and mairix to index and read a collection of
Maildir mail folders (around 40,000 messages total).
@@ -41,6 +44,9 @@ http://notmuchmail.org/mailman/listinfo/notmuch
To: notmuch@notmuchmail.org
Date: Wed, 18 Nov 2009 01:02:38 +0600
+ [ multipart/mixed ]
+ [ multipart/signed ]
+ [ text/plain ]
Twas brillig at 14:00:54 17.11.2009 UTC-05 when lars@seas.harvard.edu did gyre and gimble:
@@ -68,6 +74,9 @@ http://notmuchmail.org/mailman/listinfo/notmuch
Cc: notmuch@notmuchmail.org
Date: Tue, 17 Nov 2009 15:33:01 -0500
+ [ multipart/mixed ]
+ [ multipart/signed ]
+ [ text/plain ]
> See the patch just posted here.
Is the list archived anywhere? The obvious archives
@@ -148,6 +157,9 @@ http://notmuchmail.org/mailman/listinfo/notmuch
Cc: notmuch@notmuchmail.org
Date: Tue, 17 Nov 2009 19:50:40 -0500
+ [ multipart/mixed ]
+ [ multipart/signed ]
+ [ text/plain ]
> I've also pushed a slightly more complicated (and complete) fix to my
> private notmuch repository
diff --git a/test/multipart b/test/multipart
index dde25abc..ef9a8a2e 100755
--- a/test/multipart
+++ b/test/multipart
@@ -58,19 +58,23 @@ To: cworth@cworth.org
Date: Tue, 05 Jan 2001 15:43:57 -0000
header}
body{
- part{ ID: 1, Content-type: text/plain
+ part{ ID: 1, Content-type: multipart/signed
+ part}
+ part{ ID: 2, Content-type: multipart/mixed
+ part}
+ part{ ID: 3, Content-type: text/plain
This is an inline text part.
part}
- attachment{ ID: 2, Content-type: text/plain
+ attachment{ ID: 4, Content-type: text/plain
Attachment: attachment (text/plain)
This is a text attachment.
attachment}
- part{ ID: 3, Content-type: text/plain
+ part{ ID: 5, Content-type: text/plain
And this message is signed.
-Carl
part}
- part{ ID: 4, Content-type: application/pgp-signature
+ part{ ID: 6, Content-type: application/pgp-signature
Non-text part: application/pgp-signature
part}
body}
@@ -78,7 +82,7 @@ Non-text part: application/pgp-signature
test_begin_subtest "Show multipart MIME message (--format=json)"
output=$(notmuch show --format=json 'id:87liy5ap00.fsf@yoom.home.cworth.org')
-test_expect_equal "$output" '[[[{"id": "87liy5ap00.fsf@yoom.home.cworth.org", "match": true, "filename": "/home/cworth/src/notmuch/test/tmp.multipart/mail/multipart", "timestamp": 978709437, "date_relative": "2001-01-05", "tags": ["attachment","inbox","unread"], "headers": {"Subject": "Multipart message", "From": "Carl Worth <cworth@cworth.org>", "To": "cworth@cworth.org", "Cc": "", "Bcc": "", "Date": "Tue, 05 Jan 2001 15:43:57 -0000"}, "body": [{"id": 1, "content-type": "text/plain", "content": "This is an inline text part.\n"}, {"id": 2, "content-type": "text/plain", "filename": "attachment", "content": "This is a text attachment.\n"}, {"id": 3, "content-type": "text/plain", "content": "And this message is signed.\n\n-Carl\n"}, {"id": 4, "content-type": "application/pgp-signature"}]}, []]]]'
+test_expect_equal "$output" '[[[{"id": "87liy5ap00.fsf@yoom.home.cworth.org", "match": true, "filename": "/home/cworth/src/notmuch/test/tmp.multipart/mail/multipart", "timestamp": 978709437, "date_relative": "2001-01-05", "tags": ["attachment","inbox","unread"], "headers": {"Subject": "Multipart message", "From": "Carl Worth <cworth@cworth.org>", "To": "cworth@cworth.org", "Cc": "", "Bcc": "", "Date": "Tue, 05 Jan 2001 15:43:57 -0000"}, "body": [{"id": 1, "content-type": "multipart/signed"}, {"id": 2, "content-type": "multipart/mixed"}, {"id": 3, "content-type": "text/plain", "content": "This is an inline text part.\n"}, {"id": 4, "content-type": "text/plain", "filename": "attachment", "content": "This is a text attachment.\n"}, {"id": 5, "content-type": "text/plain", "content": "And this message is signed.\n\n-Carl\n"}, {"id": 6, "content-type": "application/pgp-signature"}]}, []]]]'
test_done