On Wed, 25 Jul 2012, Austin Clements <amdra...@mit.edu> wrote: > --- > notmuch-show.c | 57 > +++++++++++++++++++++++++++++++++----------------------- > 1 file changed, 34 insertions(+), 23 deletions(-) > > diff --git a/notmuch-show.c b/notmuch-show.c > index afbd9d0..fa1e6e9 100644 > --- a/notmuch-show.c > +++ b/notmuch-show.c > @@ -110,34 +110,44 @@ _get_one_line_summary (const void *ctx, > notmuch_message_t *message) > } > > static void > -format_message_json (const void *ctx, notmuch_message_t *message) > +format_message_json (sprinter_t *sp, notmuch_message_t *message) > {
It might be nice to have a comment for this function (and other similar ones) saying what it prints: is it a sequence of key: value pairs, or a map or an array etc. On the other hand it might be that it is best as it is where you just read the code to see. > + void *local = talloc_new (NULL); > notmuch_tags_t *tags; > - int first = 1; > - void *ctx_quote = talloc_new (ctx); > time_t date; > const char *relative_date; > > date = notmuch_message_get_date (message); > - relative_date = notmuch_time_relative_date (ctx, date); > + relative_date = notmuch_time_relative_date (local, date); This makes the diff very easy to read but it might be nicer to have these two assignments further down where they are used. Best wishes Mark > + > + sp->map_key (sp, "id"); > + sp->string (sp, notmuch_message_get_message_id (message)); > + > + sp->map_key (sp, "match"); > + sp->boolean (sp, notmuch_message_get_flag (message, > NOTMUCH_MESSAGE_FLAG_MATCH)); > + > + sp->map_key (sp, "excluded"); > + sp->boolean (sp, notmuch_message_get_flag (message, > NOTMUCH_MESSAGE_FLAG_EXCLUDED)); > + > + sp->map_key (sp, "filename"); > + sp->string (sp, notmuch_message_get_filename (message)); > + > + sp->map_key (sp, "timestamp"); > + date = notmuch_message_get_date (message); > + sp->integer (sp, date); > > - printf ("\"id\": %s, \"match\": %s, \"excluded\": %s, \"filename\": %s, > \"timestamp\": %ld, \"date_relative\": \"%s\", \"tags\": [", > - json_quote_str (ctx_quote, notmuch_message_get_message_id > (message)), > - notmuch_message_get_flag (message, NOTMUCH_MESSAGE_FLAG_MATCH) ? > "true" : "false", > - notmuch_message_get_flag (message, NOTMUCH_MESSAGE_FLAG_EXCLUDED) ? > "true" : "false", > - json_quote_str (ctx_quote, notmuch_message_get_filename (message)), > - date, relative_date); > + sp->map_key (sp, "date_relative"); > + sp->string (sp, relative_date); > > + sp->map_key (sp, "tags"); > + sp->begin_list (sp); > for (tags = notmuch_message_get_tags (message); > notmuch_tags_valid (tags); > notmuch_tags_move_to_next (tags)) > - { > - printf("%s%s", first ? "" : ",", > - json_quote_str (ctx_quote, notmuch_tags_get (tags))); > - first = 0; > - } > - printf("], "); > - talloc_free (ctx_quote); > + sp->string (sp, notmuch_tags_get (tags)); > + sp->end (sp); > + > + talloc_free (local); > } > > /* Extract just the email address from the contents of a From: > @@ -573,18 +583,19 @@ format_part_json (const void *ctx, sprinter_t *sp, > mime_node_t *node, > * devel/schemata. */ > > if (node->envelope_file) { > - printf ("{"); > - format_message_json (ctx, node->envelope_file); > + sp->begin_map (sp); > + format_message_json (sp, node->envelope_file); > > - printf ("\"headers\": "); > + sp->map_key (sp, "headers"); > format_headers_json (sp, GMIME_MESSAGE (node->part), FALSE); > > if (output_body) { > - printf (", \"body\": ["); > + sp->map_key (sp, "body"); > + sp->begin_list (sp); > format_part_json (ctx, sp, mime_node_child (node, 0), first, TRUE); > - printf ("]"); > + sp->end (sp); > } > - printf ("}"); > + sp->end (sp); > return; > } > > -- > 1.7.10 > > _______________________________________________ > notmuch mailing list > notmuch@notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch _______________________________________________ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch