aboutsummaryrefslogtreecommitdiffhomepage
path: root/notmuch-show.c
diff options
context:
space:
mode:
authorGravatar John Lenz <lenz@math.uic.edu>2013-07-01 19:19:42 -0500
committerGravatar David Bremner <bremner@debian.org>2013-08-27 07:57:36 -0300
commitf735a85c28a3c6b6e38ecaba04029a917c6d6830 (patch)
tree6dc52a163720aa2ac3532b1b0d857f9536e78800 /notmuch-show.c
parent3e60e0b3e9a0cc762abe077fb0077f23ac29f56c (diff)
cli: add --include-html option to notmuch show
For my client, the largest bottleneck for displaying large threads is exporting each html part individually since by default notmuch will not show the json parts. For large threads there can be quite a few parts and each must be exported and decoded one by one. Also, I then have to deal with all the crazy charsets which I can do through a library but is a pain. Therefore, this patch adds an --include-html option that causes the text/html parts to be included as part of the output of show. diff man/man1/notmuch-show.1
Diffstat (limited to 'notmuch-show.c')
-rw-r--r--notmuch-show.c29
1 files changed, 19 insertions, 10 deletions
diff --git a/notmuch-show.c b/notmuch-show.c
index 62178f72..c07f8871 100644
--- a/notmuch-show.c
+++ b/notmuch-show.c
@@ -630,7 +630,8 @@ format_omitted_part_meta_sprinter (sprinter_t *sp, GMimeObject *meta, GMimePart
void
format_part_sprinter (const void *ctx, sprinter_t *sp, mime_node_t *node,
- notmuch_bool_t first, notmuch_bool_t output_body)
+ notmuch_bool_t first, notmuch_bool_t output_body,
+ notmuch_bool_t include_html)
{
/* Any changes to the JSON or S-Expression format should be
* reflected in the file devel/schemata. */
@@ -645,7 +646,7 @@ format_part_sprinter (const void *ctx, sprinter_t *sp, mime_node_t *node,
if (output_body) {
sp->map_key (sp, "body");
sp->begin_list (sp);
- format_part_sprinter (ctx, sp, mime_node_child (node, 0), first, TRUE);
+ format_part_sprinter (ctx, sp, mime_node_child (node, 0), first, TRUE, include_html);
sp->end (sp);
}
sp->end (sp);
@@ -700,14 +701,15 @@ format_part_sprinter (const void *ctx, sprinter_t *sp, mime_node_t *node,
/* For non-HTML text parts, we include the content in the
* JSON. Since JSON must be Unicode, we handle charset
* decoding here and do not report a charset to the caller.
- * For text/html parts, we do not include the content. If a
- * caller is interested in text/html parts, it should retrieve
- * them separately and they will not be decoded. Since this
- * makes charset decoding the responsibility on the caller, we
+ * For text/html parts, we do not include the content unless
+ * the --include-html option has been passed. If a html part
+ * is not included, it can be requested directly. This makes
+ * charset decoding the responsibility on the caller so we
* report the charset for text/html parts.
*/
if (g_mime_content_type_is_type (content_type, "text", "*") &&
- ! g_mime_content_type_is_type (content_type, "text", "html"))
+ (include_html ||
+ ! g_mime_content_type_is_type (content_type, "text", "html")))
{
GMimeStream *stream_memory = g_mime_stream_mem_new ();
GByteArray *part_content;
@@ -737,7 +739,7 @@ format_part_sprinter (const void *ctx, sprinter_t *sp, mime_node_t *node,
}
for (i = 0; i < node->nchildren; i++)
- format_part_sprinter (ctx, sp, mime_node_child (node, i), i == 0, TRUE);
+ format_part_sprinter (ctx, sp, mime_node_child (node, i), i == 0, TRUE, include_html);
/* Close content structures */
for (i = 0; i < nclose; i++)
@@ -751,7 +753,7 @@ format_part_sprinter_entry (const void *ctx, sprinter_t *sp,
mime_node_t *node, unused (int indent),
const notmuch_show_params_t *params)
{
- format_part_sprinter (ctx, sp, node, TRUE, params->output_body);
+ format_part_sprinter (ctx, sp, node, TRUE, params->output_body, params->include_html);
return NOTMUCH_STATUS_SUCCESS;
}
@@ -1077,7 +1079,8 @@ notmuch_show_command (notmuch_config_t *config, int argc, char *argv[])
.crypto = {
.verify = FALSE,
.decrypt = FALSE
- }
+ },
+ .include_html = FALSE
};
int format_sel = NOTMUCH_FORMAT_NOT_SPECIFIED;
int exclude = EXCLUDE_TRUE;
@@ -1105,6 +1108,7 @@ notmuch_show_command (notmuch_config_t *config, int argc, char *argv[])
{ NOTMUCH_OPT_BOOLEAN, &params.crypto.decrypt, "decrypt", 'd', 0 },
{ NOTMUCH_OPT_BOOLEAN, &params.crypto.verify, "verify", 'v', 0 },
{ NOTMUCH_OPT_BOOLEAN, &params.output_body, "body", 'b', 0 },
+ { NOTMUCH_OPT_BOOLEAN, &params.include_html, "include-html", 0, 0 },
{ 0, 0, 0, 0, 0 }
};
@@ -1176,6 +1180,11 @@ notmuch_show_command (notmuch_config_t *config, int argc, char *argv[])
}
}
+ if (params.include_html &&
+ (format_sel != NOTMUCH_FORMAT_JSON && format_sel != NOTMUCH_FORMAT_SEXP)) {
+ fprintf (stderr, "Warning: --include-html only implemented for format=json and format=sexp\n");
+ }
+
if (entire_thread == ENTIRE_THREAD_TRUE)
params.entire_thread = TRUE;
else