add part_sep formatter to replace "first" argument to part format functions

A new field "part_sep" is added to the notmuch_show_format structure,
to be used for part separation.  This is cleaner than the "first"
argument that was being passed around to the part arguments, and
allows the function that handles overall part output formatting
(show_message_part) to directly handle when outputting the separator.
This commit is contained in:
Jameson Graef Rollins 2011-05-22 19:56:53 -07:00 committed by Carl Worth
parent d2177d0b22
commit 6c2417cabc
4 changed files with 17 additions and 21 deletions

View file

@ -66,9 +66,9 @@ typedef struct notmuch_show_format {
const char *header_end; const char *header_end;
const char *body_start; const char *body_start;
void (*part) (GMimeObject *part, void (*part) (GMimeObject *part,
int *part_count, int *part_count);
int first);
void (*part_end) (GMimeObject *part); void (*part_end) (GMimeObject *part);
const char *part_sep;
const char *body_end; const char *body_end;
const char *message_end; const char *message_end;
const char *message_set_sep; const char *message_set_sep;

View file

@ -26,14 +26,13 @@
static void static void
reply_part (GMimeObject *part, reply_part (GMimeObject *part,
unused (int *part_count), unused (int *part_count));
unused (int first));
static const notmuch_show_format_t format_reply = { static const notmuch_show_format_t format_reply = {
NULL, NULL,
NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL,
NULL, reply_part, NULL, NULL, NULL, reply_part, NULL, NULL, NULL,
NULL, NULL, NULL, NULL,
NULL NULL
}; };
@ -87,8 +86,7 @@ show_reply_headers (GMimeMessage *message)
static void static void
reply_part (GMimeObject *part, reply_part (GMimeObject *part,
unused (int *part_count), unused (int *part_count))
unused (int first))
{ {
GMimeContentDisposition *disposition; GMimeContentDisposition *disposition;
GMimeContentType *content_type; GMimeContentType *content_type;

View file

@ -30,8 +30,7 @@ format_headers_text (const void *ctx,
static void static void
format_part_text (GMimeObject *part, format_part_text (GMimeObject *part,
int *part_count, int *part_count);
int first);
static void static void
format_part_end_text (GMimeObject *part); format_part_end_text (GMimeObject *part);
@ -40,7 +39,7 @@ static const notmuch_show_format_t format_text = {
"", "",
"\fmessage{ ", format_message_text, "\fmessage{ ", format_message_text,
"\fheader{\n", format_headers_text, "\fheader}\n", "\fheader{\n", format_headers_text, "\fheader}\n",
"\fbody{\n", format_part_text, format_part_end_text, "\fbody}\n", "\fbody{\n", format_part_text, format_part_end_text, "", "\fbody}\n",
"\fmessage}\n", "", "\fmessage}\n", "",
"" ""
}; };
@ -55,8 +54,7 @@ format_headers_json (const void *ctx,
static void static void
format_part_json (GMimeObject *part, format_part_json (GMimeObject *part,
int *part_count, int *part_count);
int first);
static void static void
format_part_end_json (GMimeObject *part); format_part_end_json (GMimeObject *part);
@ -65,7 +63,7 @@ static const notmuch_show_format_t format_json = {
"[", "[",
"{", format_message_json, "{", format_message_json,
", \"headers\": {", format_headers_json, "}", ", \"headers\": {", format_headers_json, "}",
", \"body\": [", format_part_json, format_part_end_json, "]", ", \"body\": [", format_part_json, format_part_end_json, ", ", "]",
"}", ", ", "}", ", ",
"]" "]"
}; };
@ -79,7 +77,7 @@ static const notmuch_show_format_t format_mbox = {
"", "",
"", format_message_mbox, "", format_message_mbox,
"", NULL, "", "", NULL, "",
"", NULL, NULL, "", "", NULL, NULL, "", "",
"", "", "", "",
"" ""
}; };
@ -357,7 +355,7 @@ show_part_content (GMimeObject *part, GMimeStream *stream_out)
} }
static void static void
format_part_text (GMimeObject *part, int *part_count, unused (int first)) format_part_text (GMimeObject *part, int *part_count)
{ {
GMimeContentDisposition *disposition; GMimeContentDisposition *disposition;
GMimeContentType *content_type; GMimeContentType *content_type;
@ -431,7 +429,7 @@ format_part_end_text (GMimeObject *part)
} }
static void static void
format_part_json (GMimeObject *part, int *part_count, int first) format_part_json (GMimeObject *part, int *part_count)
{ {
GMimeContentType *content_type; GMimeContentType *content_type;
GMimeContentDisposition *disposition; GMimeContentDisposition *disposition;
@ -442,9 +440,6 @@ format_part_json (GMimeObject *part, int *part_count, int first)
content_type = g_mime_object_get_content_type (GMIME_OBJECT (part)); content_type = g_mime_object_get_content_type (GMIME_OBJECT (part));
if (! first)
fputs (", ", stdout);
printf ("{\"id\": %d, \"content-type\": %s", printf ("{\"id\": %d, \"content-type\": %s",
*part_count, *part_count,
json_quote_str (ctx, g_mime_content_type_to_string (content_type))); json_quote_str (ctx, g_mime_content_type_to_string (content_type)));

View file

@ -28,12 +28,15 @@ show_message_part (GMimeObject *part,
const notmuch_show_format_t *format, const notmuch_show_format_t *format,
int first) int first)
{ {
if (!first)
fputs (format->part_sep, stdout);
if (GMIME_IS_MULTIPART (part)) { if (GMIME_IS_MULTIPART (part)) {
GMimeMultipart *multipart = GMIME_MULTIPART (part); GMimeMultipart *multipart = GMIME_MULTIPART (part);
int i; int i;
*part_count = *part_count + 1; *part_count = *part_count + 1;
format->part (part, part_count, first); format->part (part, part_count);
for (i = 0; i < g_mime_multipart_get_count (multipart); i++) { for (i = 0; i < g_mime_multipart_get_count (multipart); i++) {
show_message_part (g_mime_multipart_get_part (multipart, i), show_message_part (g_mime_multipart_get_part (multipart, i),
@ -65,7 +68,7 @@ show_message_part (GMimeObject *part,
*part_count = *part_count + 1; *part_count = *part_count + 1;
format->part (part, part_count, first); format->part (part, part_count);
if (format->part_end) if (format->part_end)
format->part_end (part); format->part_end (part);
} }