X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=notmuch-reply.c;h=720749d58c4f72f020294f228e9ffd70935bbed5;hp=6f368c93206d152fdb93a29320a74217a51946ae;hb=5c35791d7cf7279024befc98e9d973af461336a3;hpb=429ebf5d20a943fb520d7321c5dde721265b0155 diff --git a/notmuch-reply.c b/notmuch-reply.c index 6f368c93..720749d5 100644 --- a/notmuch-reply.c +++ b/notmuch-reply.c @@ -22,6 +22,7 @@ #include "notmuch-client.h" #include "gmime-filter-headers.h" +#include "sprinter.h" static void show_reply_headers (GMimeMessage *message) @@ -547,7 +548,8 @@ notmuch_reply_format_default(void *ctx, notmuch_config_t *config, notmuch_query_t *query, notmuch_show_params_t *params, - notmuch_bool_t reply_all) + notmuch_bool_t reply_all, + unused (sprinter_t *sp)) { GMimeMessage *reply; notmuch_messages_t *messages; @@ -586,11 +588,12 @@ notmuch_reply_format_default(void *ctx, } static int -notmuch_reply_format_json(void *ctx, - notmuch_config_t *config, - notmuch_query_t *query, - notmuch_show_params_t *params, - notmuch_bool_t reply_all) +notmuch_reply_format_sprinter(void *ctx, + notmuch_config_t *config, + notmuch_query_t *query, + notmuch_show_params_t *params, + notmuch_bool_t reply_all, + sprinter_t *sp) { GMimeMessage *reply; notmuch_messages_t *messages; @@ -611,19 +614,20 @@ notmuch_reply_format_json(void *ctx, if (!reply) return 1; + sp->begin_map (sp); + /* The headers of the reply message we've created */ - printf ("{\"reply-headers\": "); - format_headers_json (ctx, reply, TRUE); + sp->map_key (sp, "reply-headers"); + format_headers_sprinter (sp, reply, TRUE); g_object_unref (G_OBJECT (reply)); reply = NULL; /* Start the original */ - printf (", \"original\": "); - - format_part_json (ctx, node, TRUE); + sp->map_key (sp, "original"); + format_part_sprinter (ctx, sp, node, TRUE, TRUE); /* End */ - printf ("}\n"); + sp->end (sp); notmuch_message_destroy (message); return 0; @@ -635,7 +639,8 @@ notmuch_reply_format_headers_only(void *ctx, notmuch_config_t *config, notmuch_query_t *query, unused (notmuch_show_params_t *params), - notmuch_bool_t reply_all) + notmuch_bool_t reply_all, + unused (sprinter_t *sp)) { GMimeMessage *reply; notmuch_messages_t *messages; @@ -692,6 +697,7 @@ notmuch_reply_format_headers_only(void *ctx, enum { FORMAT_DEFAULT, FORMAT_JSON, + FORMAT_SEXP, FORMAT_HEADERS_ONLY, }; @@ -703,20 +709,28 @@ notmuch_reply_command (void *ctx, int argc, char *argv[]) notmuch_query_t *query; char *query_string; int opt_index, ret = 0; - int (*reply_format_func)(void *ctx, notmuch_config_t *config, notmuch_query_t *query, notmuch_show_params_t *params, notmuch_bool_t reply_all); + int (*reply_format_func) (void *ctx, + notmuch_config_t *config, + notmuch_query_t *query, + notmuch_show_params_t *params, + notmuch_bool_t reply_all, + struct sprinter *sp); notmuch_show_params_t params = { .part = -1, .crypto = { + .verify = FALSE, .decrypt = FALSE } }; int format = FORMAT_DEFAULT; int reply_all = TRUE; + struct sprinter *sp = NULL; notmuch_opt_desc_t options[] = { { NOTMUCH_OPT_KEYWORD, &format, "format", 'f', (notmuch_keyword_t []){ { "default", FORMAT_DEFAULT }, { "json", FORMAT_JSON }, + { "sexp", FORMAT_SEXP }, { "headers-only", FORMAT_HEADERS_ONLY }, { 0, 0 } } }, { NOTMUCH_OPT_KEYWORD, &reply_all, "reply-to", 'r', @@ -733,30 +747,16 @@ notmuch_reply_command (void *ctx, int argc, char *argv[]) return 1; } - if (format == FORMAT_HEADERS_ONLY) + if (format == FORMAT_HEADERS_ONLY) { reply_format_func = notmuch_reply_format_headers_only; - else if (format == FORMAT_JSON) - reply_format_func = notmuch_reply_format_json; - else + } else if (format == FORMAT_JSON) { + reply_format_func = notmuch_reply_format_sprinter; + sp = sprinter_json_create (ctx, stdout); + } else if (format == FORMAT_SEXP) { + reply_format_func = notmuch_reply_format_sprinter; + sp = sprinter_sexp_create (ctx, stdout); + } else { reply_format_func = notmuch_reply_format_default; - - if (params.crypto.decrypt) { -#ifdef GMIME_ATLEAST_26 - /* TODO: GMimePasswordRequestFunc */ - params.crypto.gpgctx = g_mime_gpg_context_new (NULL, "gpg"); -#else - GMimeSession* session = g_object_new (g_mime_session_get_type(), NULL); - params.crypto.gpgctx = g_mime_gpg_context_new (session, "gpg"); -#endif - if (params.crypto.gpgctx) { - g_mime_gpg_context_set_always_trust ((GMimeGpgContext*) params.crypto.gpgctx, FALSE); - } else { - params.crypto.decrypt = FALSE; - fprintf (stderr, "Failed to construct gpg context.\n"); - } -#ifndef GMIME_ATLEAST_26 - g_object_unref (session); -#endif } config = notmuch_config_open (ctx, NULL, NULL); @@ -784,7 +784,7 @@ notmuch_reply_command (void *ctx, int argc, char *argv[]) return 1; } - if (reply_format_func (ctx, config, query, ¶ms, reply_all) != 0) + if (reply_format_func (ctx, config, query, ¶ms, reply_all, sp) != 0) return 1; notmuch_crypto_cleanup (¶ms.crypto);