[PATCH 10/13] show: Convert envelope format_part_json to use sprinter

2012-07-27 Thread Austin Clements
Quoth Mark Walters on Jul 25 at  8:03 pm:
> On Wed, 25 Jul 2012, Austin Clements  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.

Ah, good point.  I don't think this is so necessary for the other
functions, but this one is weird because it requires the caller to
begin the map (every other function simply emits a value, so it
doesn't depend on the caller's context).

> > +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.

Done, and it is nicer.  (Apparently I had the 'date' assignment both
here and below!)

> 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;
> >  }
> >  


Re: [PATCH 10/13] show: Convert envelope format_part_json to use sprinter

2012-07-27 Thread Austin Clements
Quoth Mark Walters on Jul 25 at  8:03 pm:
> On Wed, 25 Jul 2012, Austin Clements  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.

Ah, good point.  I don't think this is so necessary for the other
functions, but this one is weird because it requires the caller to
begin the map (every other function simply emits a value, so it
doesn't depend on the caller's context).

> > +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.

Done, and it is nicer.  (Apparently I had the 'date' assignment both
here and below!)

> 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;
> >  }
> >  
___
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch


[PATCH 10/13] show: Convert envelope format_part_json to use sprinter

2012-07-25 Thread Mark Walters
On Wed, 25 Jul 2012, Austin Clements  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 at notmuchmail.org
> http://notmuchmail.org/mailman/listinfo/notmuch


Re: [PATCH 10/13] show: Convert envelope format_part_json to use sprinter

2012-07-25 Thread Mark Walters
On Wed, 25 Jul 2012, Austin Clements  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


[PATCH 10/13] show: Convert envelope format_part_json to use sprinter

2012-07-24 Thread Austin Clements
---
 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)
 {
+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);
+
+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



[PATCH 10/13] show: Convert envelope format_part_json to use sprinter

2012-07-24 Thread Austin Clements
---
 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)
 {
+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);
+
+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