show: Simplify new text formatter code

This makes the text formatter take advantage of the new code
structure.  The previously duplicated header logic is now unified,
several things that we used to compute repeatedly across different
callbacks are now computed once, and the code is simpler overall and
32% shorter.

Unifying the header logic causes this to format some dates slightly
differently, so the two affected test cases are updated.
This commit is contained in:
Austin Clements 2012-02-04 16:24:26 -05:00 committed by David Bremner
parent 85fe286b85
commit c0cd090412
3 changed files with 30 additions and 73 deletions

View file

@ -727,67 +727,48 @@ format_part_text (const void *ctx, mime_node_t *node,
GMimeObject *meta = node->envelope_part ? GMimeObject *meta = node->envelope_part ?
GMIME_OBJECT (node->envelope_part) : node->part; GMIME_OBJECT (node->envelope_part) : node->part;
GMimeContentType *content_type = g_mime_object_get_content_type (meta); GMimeContentType *content_type = g_mime_object_get_content_type (meta);
const notmuch_bool_t leaf = GMIME_IS_PART (node->part);
const char *part_type;
int i; int i;
if (node->envelope_file) { if (node->envelope_file) {
notmuch_message_t *message = node->envelope_file; notmuch_message_t *message = node->envelope_file;
const char *headers[] = {
"Subject", "From", "To", "Cc", "Bcc", "Date"
};
const char *name, *value;
unsigned int i;
printf ("\fmessage{ "); part_type = "message";
printf ("id:%s depth:%d match:%d filename:%s\n", printf ("\f%s{ id:%s depth:%d match:%d filename:%s\n",
part_type,
notmuch_message_get_message_id (message), notmuch_message_get_message_id (message),
indent, indent,
notmuch_message_get_flag (message, NOTMUCH_MESSAGE_FLAG_MATCH), notmuch_message_get_flag (message, NOTMUCH_MESSAGE_FLAG_MATCH),
notmuch_message_get_filename (message)); notmuch_message_get_filename (message));
printf ("\fheader{\n");
printf ("%s\n", _get_one_line_summary (ctx, message));
for (i = 0; i < ARRAY_SIZE (headers); i++) {
name = headers[i];
value = notmuch_message_get_header (message, name);
if (value && strlen (value))
printf ("%s: %s\n", name, value);
}
printf ("\fheader}\n");
} else { } else {
GMimeContentDisposition *disposition = g_mime_object_get_content_disposition (meta); GMimeContentDisposition *disposition = g_mime_object_get_content_disposition (meta);
const char *cid = g_mime_object_get_content_id (meta); const char *cid = g_mime_object_get_content_id (meta);
const char *filename = leaf ?
g_mime_part_get_filename (GMIME_PART (node->part)) : NULL;
if (disposition && if (disposition &&
strcmp (disposition->disposition, GMIME_DISPOSITION_ATTACHMENT) == 0) strcmp (disposition->disposition, GMIME_DISPOSITION_ATTACHMENT) == 0)
{ part_type = "attachment";
printf ("\fattachment{ ID: %d", node->part_num); else
part_type = "part";
} else {
printf ("\fpart{ ID: %d", node->part_num);
}
if (GMIME_IS_PART (node->part))
{
const char *filename = g_mime_part_get_filename (GMIME_PART (node->part));
if (filename)
printf (", Filename: %s", filename);
}
printf ("\f%s{ ID: %d", part_type, node->part_num);
if (filename)
printf (", Filename: %s", filename);
if (cid) if (cid)
printf (", Content-id: %s", cid); printf (", Content-id: %s", cid);
printf (", Content-type: %s\n", g_mime_content_type_to_string (content_type)); printf (", Content-type: %s\n", g_mime_content_type_to_string (content_type));
} }
if (node->envelope_part) { if (GMIME_IS_MESSAGE (node->part)) {
GMimeMessage *message = GMIME_MESSAGE (node->part); GMimeMessage *message = GMIME_MESSAGE (node->part);
InternetAddressList *recipients; InternetAddressList *recipients;
const char *recipients_string; const char *recipients_string;
printf ("\fheader{\n"); printf ("\fheader{\n");
if (node->envelope_file)
printf ("%s\n", _get_one_line_summary (ctx, node->envelope_file));
printf ("Subject: %s\n", g_mime_message_get_subject (message)); printf ("Subject: %s\n", g_mime_message_get_subject (message));
printf ("From: %s\n", g_mime_message_get_sender (message)); printf ("From: %s\n", g_mime_message_get_sender (message));
recipients = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_TO); recipients = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_TO);
@ -800,9 +781,11 @@ format_part_text (const void *ctx, mime_node_t *node,
printf ("Cc: %s\n", recipients_string); printf ("Cc: %s\n", recipients_string);
printf ("Date: %s\n", g_mime_message_get_date_as_string (message)); printf ("Date: %s\n", g_mime_message_get_date_as_string (message));
printf ("\fheader}\n"); printf ("\fheader}\n");
printf ("\fbody{\n");
} }
if (!node->envelope_file) { if (leaf) {
if (g_mime_content_type_is_type (content_type, "text", "*") && if (g_mime_content_type_is_type (content_type, "text", "*") &&
!g_mime_content_type_is_type (content_type, "text", "html")) !g_mime_content_type_is_type (content_type, "text", "html"))
{ {
@ -810,45 +793,19 @@ format_part_text (const void *ctx, mime_node_t *node,
g_mime_stream_file_set_owner (GMIME_STREAM_FILE (stream_stdout), FALSE); g_mime_stream_file_set_owner (GMIME_STREAM_FILE (stream_stdout), FALSE);
show_text_part_content (node->part, stream_stdout); show_text_part_content (node->part, stream_stdout);
g_object_unref(stream_stdout); g_object_unref(stream_stdout);
} } else {
else if (g_mime_content_type_is_type (content_type, "multipart", "*") ||
g_mime_content_type_is_type (content_type, "message", "rfc822"))
{
/* Do nothing for multipart since its content will be printed
* when recursing. */
}
else
{
printf ("Non-text part: %s\n", printf ("Non-text part: %s\n",
g_mime_content_type_to_string (content_type)); g_mime_content_type_to_string (content_type));
} }
} }
if (GMIME_IS_MESSAGE (node->part))
printf ("\fbody{\n");
for (i = 0; i < node->nchildren; i++) for (i = 0; i < node->nchildren; i++)
format_part_text (ctx, mime_node_child (node, i), indent, params); format_part_text (ctx, mime_node_child (node, i), indent, params);
if (GMIME_IS_MESSAGE (node->part)) if (GMIME_IS_MESSAGE (node->part))
printf ("\fbody}\n"); printf ("\fbody}\n");
if (node->envelope_file) { printf ("\f%s}\n", part_type);
printf ("\fmessage}\n");
} else {
GMimeContentDisposition *disposition;
disposition = g_mime_object_get_content_disposition (meta);
if (disposition &&
strcmp (disposition->disposition, GMIME_DISPOSITION_ATTACHMENT) == 0)
{
printf ("\fattachment}\n");
}
else
{
printf ("\fpart}\n");
}
}
} }
static void static void

View file

@ -159,7 +159,7 @@ Notmuch Test Suite <test_suite@notmuchmail.org> (2000-01-01) (encrypted inbox)
Subject: test encrypted message 001 Subject: test encrypted message 001
From: Notmuch Test Suite <test_suite@notmuchmail.org> From: Notmuch Test Suite <test_suite@notmuchmail.org>
To: test_suite@notmuchmail.org To: test_suite@notmuchmail.org
Date: 01 Jan 2000 12:00:00 -0000 Date: Sat, 01 Jan 2000 12:00:00 +0000
header} header}
body{ body{
part{ ID: 1, Content-type: multipart/encrypted part{ ID: 1, Content-type: multipart/encrypted

View file

@ -71,7 +71,7 @@ Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-05) (unread)
Subject: thread-naming: Initial thread subject Subject: thread-naming: Initial thread subject
From: Notmuch Test Suite <test_suite@notmuchmail.org> From: Notmuch Test Suite <test_suite@notmuchmail.org>
To: Notmuch Test Suite <test_suite@notmuchmail.org> To: Notmuch Test Suite <test_suite@notmuchmail.org>
Date: Fri, 05 Jan 2001 15:43:56 -0000 Date: Fri, 05 Jan 2001 15:43:56 +0000
header} header}
body{ body{
part{ ID: 1, Content-type: text/plain part{ ID: 1, Content-type: text/plain
@ -85,7 +85,7 @@ Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-06) (inbox unread)
Subject: thread-naming: Older changed subject Subject: thread-naming: Older changed subject
From: Notmuch Test Suite <test_suite@notmuchmail.org> From: Notmuch Test Suite <test_suite@notmuchmail.org>
To: Notmuch Test Suite <test_suite@notmuchmail.org> To: Notmuch Test Suite <test_suite@notmuchmail.org>
Date: Sat, 06 Jan 2001 15:43:56 -0000 Date: Sat, 06 Jan 2001 15:43:56 +0000
header} header}
body{ body{
part{ ID: 1, Content-type: text/plain part{ ID: 1, Content-type: text/plain
@ -99,7 +99,7 @@ Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-07) (inbox unread)
Subject: thread-naming: Newer changed subject Subject: thread-naming: Newer changed subject
From: Notmuch Test Suite <test_suite@notmuchmail.org> From: Notmuch Test Suite <test_suite@notmuchmail.org>
To: Notmuch Test Suite <test_suite@notmuchmail.org> To: Notmuch Test Suite <test_suite@notmuchmail.org>
Date: Sun, 07 Jan 2001 15:43:56 -0000 Date: Sun, 07 Jan 2001 15:43:56 +0000
header} header}
body{ body{
part{ ID: 1, Content-type: text/plain part{ ID: 1, Content-type: text/plain
@ -113,7 +113,7 @@ Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-08) (unread)
Subject: thread-naming: Final thread subject Subject: thread-naming: Final thread subject
From: Notmuch Test Suite <test_suite@notmuchmail.org> From: Notmuch Test Suite <test_suite@notmuchmail.org>
To: Notmuch Test Suite <test_suite@notmuchmail.org> To: Notmuch Test Suite <test_suite@notmuchmail.org>
Date: Mon, 08 Jan 2001 15:43:56 -0000 Date: Mon, 08 Jan 2001 15:43:56 +0000
header} header}
body{ body{
part{ ID: 1, Content-type: text/plain part{ ID: 1, Content-type: text/plain
@ -127,7 +127,7 @@ Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-09) (inbox unread)
Subject: Re: thread-naming: Initial thread subject Subject: Re: thread-naming: Initial thread subject
From: Notmuch Test Suite <test_suite@notmuchmail.org> From: Notmuch Test Suite <test_suite@notmuchmail.org>
To: Notmuch Test Suite <test_suite@notmuchmail.org> To: Notmuch Test Suite <test_suite@notmuchmail.org>
Date: Tue, 09 Jan 2001 15:43:45 -0000 Date: Tue, 09 Jan 2001 15:43:45 +0000
header} header}
body{ body{
part{ ID: 1, Content-type: text/plain part{ ID: 1, Content-type: text/plain
@ -141,7 +141,7 @@ Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-10) (inbox unread)
Subject: Aw: thread-naming: Initial thread subject Subject: Aw: thread-naming: Initial thread subject
From: Notmuch Test Suite <test_suite@notmuchmail.org> From: Notmuch Test Suite <test_suite@notmuchmail.org>
To: Notmuch Test Suite <test_suite@notmuchmail.org> To: Notmuch Test Suite <test_suite@notmuchmail.org>
Date: Wed, 10 Jan 2001 15:43:45 -0000 Date: Wed, 10 Jan 2001 15:43:45 +0000
header} header}
body{ body{
part{ ID: 1, Content-type: text/plain part{ ID: 1, Content-type: text/plain
@ -155,7 +155,7 @@ Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-11) (inbox unread)
Subject: Vs: thread-naming: Initial thread subject Subject: Vs: thread-naming: Initial thread subject
From: Notmuch Test Suite <test_suite@notmuchmail.org> From: Notmuch Test Suite <test_suite@notmuchmail.org>
To: Notmuch Test Suite <test_suite@notmuchmail.org> To: Notmuch Test Suite <test_suite@notmuchmail.org>
Date: Thu, 11 Jan 2001 15:43:45 -0000 Date: Thu, 11 Jan 2001 15:43:45 +0000
header} header}
body{ body{
part{ ID: 1, Content-type: text/plain part{ ID: 1, Content-type: text/plain
@ -169,7 +169,7 @@ Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-12) (inbox unread)
Subject: Sv: thread-naming: Initial thread subject Subject: Sv: thread-naming: Initial thread subject
From: Notmuch Test Suite <test_suite@notmuchmail.org> From: Notmuch Test Suite <test_suite@notmuchmail.org>
To: Notmuch Test Suite <test_suite@notmuchmail.org> To: Notmuch Test Suite <test_suite@notmuchmail.org>
Date: Fri, 12 Jan 2001 15:43:45 -0000 Date: Fri, 12 Jan 2001 15:43:45 +0000
header} header}
body{ body{
part{ ID: 1, Content-type: text/plain part{ ID: 1, Content-type: text/plain