aboutsummaryrefslogtreecommitdiffhomepage
path: root/notmuch-show.c
diff options
context:
space:
mode:
authorGravatar Jameson Graef Rollins <jrollins@finestructure.net>2011-05-25 18:01:13 -0700
committerGravatar Carl Worth <cworth@cworth.org>2011-05-27 16:18:57 -0700
commitd92146d3a6809f8ad940302af49cd99a0820665e (patch)
tree32e9d39126d39bc864e2932c47d81238fdf08af5 /notmuch-show.c
parent757e06f74bb7b5f69c0a20c7a5432150e074055d (diff)
Break up format->part function into part_start and part_content functions.
Future improvements (eg. crypto support) will require adding new part header. By breaking up the output of part headers from the output of part content, we can easily out new part headers with new formatting functions.
Diffstat (limited to 'notmuch-show.c')
-rw-r--r--notmuch-show.c122
1 files changed, 71 insertions, 51 deletions
diff --git a/notmuch-show.c b/notmuch-show.c
index 65c780e7..363cdbfe 100644
--- a/notmuch-show.c
+++ b/notmuch-show.c
@@ -29,8 +29,11 @@ format_headers_text (const void *ctx,
notmuch_message_t *message);
static void
-format_part_text (GMimeObject *part,
- int *part_count);
+format_part_start_text (GMimeObject *part,
+ int *part_count);
+
+static void
+format_part_content_text (GMimeObject *part);
static void
format_part_end_text (GMimeObject *part);
@@ -39,7 +42,12 @@ static const notmuch_show_format_t format_text = {
"",
"\fmessage{ ", format_message_text,
"\fheader{\n", format_headers_text, "\fheader}\n",
- "\fbody{\n", format_part_text, format_part_end_text, "", "\fbody}\n",
+ "\fbody{\n",
+ format_part_start_text,
+ format_part_content_text,
+ format_part_end_text,
+ "",
+ "\fbody}\n",
"\fmessage}\n", "",
""
};
@@ -53,8 +61,11 @@ format_headers_json (const void *ctx,
notmuch_message_t *message);
static void
-format_part_json (GMimeObject *part,
- int *part_count);
+format_part_start_json (unused (GMimeObject *part),
+ int *part_count);
+
+static void
+format_part_content_json (GMimeObject *part);
static void
format_part_end_json (GMimeObject *part);
@@ -63,7 +74,12 @@ static const notmuch_show_format_t format_json = {
"[",
"{", format_message_json,
", \"headers\": {", format_headers_json, "}",
- ", \"body\": [", format_part_json, format_part_end_json, ", ", "]",
+ ", \"body\": [",
+ format_part_start_json,
+ format_part_content_json,
+ format_part_end_json,
+ ", ",
+ "]",
"}", ", ",
"]"
};
@@ -77,20 +93,29 @@ static const notmuch_show_format_t format_mbox = {
"",
"", format_message_mbox,
"", NULL, "",
- "", NULL, NULL, "", "",
+ "",
+ NULL,
+ NULL,
+ NULL,
+ "",
+ "",
"", "",
""
};
static void
-format_part_raw (GMimeObject *part,
- unused (int *part_count));
+format_part_content_raw (GMimeObject *part);
static const notmuch_show_format_t format_raw = {
"",
"", NULL,
"", NULL, "",
- "", format_part_raw, NULL, "", "",
+ "",
+ NULL,
+ format_part_content_raw,
+ NULL,
+ "",
+ "",
"", "",
""
};
@@ -372,46 +397,41 @@ show_part_content (GMimeObject *part, GMimeStream *stream_out)
}
static void
-format_part_text (GMimeObject *part, int *part_count)
+format_part_start_text (GMimeObject *part, int *part_count)
{
- GMimeContentDisposition *disposition;
- GMimeContentType *content_type;
+ GMimeContentDisposition *disposition = g_mime_object_get_content_disposition (part);
- disposition = g_mime_object_get_content_disposition (part);
if (disposition &&
strcmp (disposition->disposition, GMIME_DISPOSITION_ATTACHMENT) == 0)
{
- const char *filename = g_mime_part_get_filename (GMIME_PART (part));
- content_type = g_mime_object_get_content_type (GMIME_OBJECT (part));
-
- printf ("\fattachment{ ID: %d, Content-type: %s\n",
- *part_count,
- g_mime_content_type_to_string (content_type));
- printf ("Attachment: %s (%s)\n", filename,
- g_mime_content_type_to_string (content_type));
+ printf ("\fattachment{ ID: %d", *part_count);
- if (g_mime_content_type_is_type (content_type, "text", "*") &&
- !g_mime_content_type_is_type (content_type, "text", "html"))
- {
- GMimeStream *stream_stdout = g_mime_stream_file_new (stdout);
- g_mime_stream_file_set_owner (GMIME_STREAM_FILE (stream_stdout), FALSE);
- show_part_content (part, stream_stdout);
- g_object_unref(stream_stdout);
- }
+ } else {
- return;
+ printf ("\fpart{ ID: %d", *part_count);
}
+}
- content_type = g_mime_object_get_content_type (GMIME_OBJECT (part));
+static void
+format_part_content_text (GMimeObject *part)
+{
+ GMimeContentDisposition *disposition = g_mime_object_get_content_disposition (part);
+ GMimeContentType *content_type = g_mime_object_get_content_type (GMIME_OBJECT (part));
+ GMimeStream *stream_stdout = g_mime_stream_file_new (stdout);
+
+ printf (", Content-type: %s\n", g_mime_content_type_to_string (content_type));
- printf ("\fpart{ ID: %d, Content-type: %s\n",
- *part_count,
- g_mime_content_type_to_string (content_type));
+ if (disposition &&
+ strcmp (disposition->disposition, GMIME_DISPOSITION_ATTACHMENT) == 0)
+ {
+ const char *filename = g_mime_part_get_filename (GMIME_PART (part));
+ printf ("Attachment: %s (%s)\n", filename,
+ g_mime_content_type_to_string (content_type));
+ }
if (g_mime_content_type_is_type (content_type, "text", "*") &&
!g_mime_content_type_is_type (content_type, "text", "html"))
{
- GMimeStream *stream_stdout = g_mime_stream_file_new (stdout);
g_mime_stream_file_set_owner (GMIME_STREAM_FILE (stream_stdout), FALSE);
show_part_content (part, stream_stdout);
g_object_unref(stream_stdout);
@@ -447,27 +467,27 @@ format_part_end_text (GMimeObject *part)
}
static void
-format_part_json (GMimeObject *part, int *part_count)
+format_part_start_json (unused (GMimeObject *part), int *part_count)
{
- GMimeContentType *content_type;
- GMimeContentDisposition *disposition;
- void *ctx = talloc_new (NULL);
+ printf ("{\"id\": %d", *part_count);
+}
+
+static void
+format_part_content_json (GMimeObject *part)
+{
+ GMimeContentType *content_type = g_mime_object_get_content_type (GMIME_OBJECT (part));
GMimeStream *stream_memory = g_mime_stream_mem_new ();
+ const char *cid = g_mime_object_get_content_id (part);
+ void *ctx = talloc_new (NULL);
+ GMimeContentDisposition *disposition = g_mime_object_get_content_disposition (part);
GByteArray *part_content;
- const char *cid;
- content_type = g_mime_object_get_content_type (GMIME_OBJECT (part));
-
- printf ("{\"id\": %d, \"content-type\": %s",
- *part_count,
+ printf (", \"content-type\": %s",
json_quote_str (ctx, g_mime_content_type_to_string (content_type)));
- cid = g_mime_object_get_content_id (part);
if (cid != NULL)
- printf(", \"content-id\": %s",
- json_quote_str (ctx, cid));
+ printf(", \"content-id\": %s", json_quote_str (ctx, cid));
- disposition = g_mime_object_get_content_disposition (part);
if (disposition &&
strcmp (disposition->disposition, GMIME_DISPOSITION_ATTACHMENT) == 0)
{
@@ -510,7 +530,7 @@ format_part_end_json (GMimeObject *part)
}
static void
-format_part_raw (GMimeObject *part, unused (int *part_count))
+format_part_content_raw (GMimeObject *part)
{
GMimeStream *stream_stdout = g_mime_stream_file_new (stdout);
g_mime_stream_file_set_owner (GMIME_STREAM_FILE (stream_stdout), FALSE);
@@ -538,7 +558,7 @@ show_message (void *ctx,
fputs (format->body_start, stdout);
}
- if (format->part)
+ if (format->part_content)
show_message_body (notmuch_message_get_filename (message),
format, params);