mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-21 18:38:08 +01:00
cli/reply: reduce the reply format abstractions
Now that we've made the various reply formats quite similar to each other, there's no point in keeping the abstractions. They are now close enough to be put in one function. For now, a mime node will be uselessly created for the headers-only case, but this is insignificant, and may change in the future.
This commit is contained in:
parent
5e438d95c4
commit
301a65b0f2
1 changed files with 36 additions and 109 deletions
141
notmuch-reply.c
141
notmuch-reply.c
|
@ -599,92 +599,6 @@ create_reply_message(void *ctx,
|
||||||
return reply;
|
return reply;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
notmuch_reply_format_default(void *ctx,
|
|
||||||
notmuch_config_t *config,
|
|
||||||
notmuch_message_t *message,
|
|
||||||
notmuch_show_params_t *params,
|
|
||||||
notmuch_bool_t reply_all,
|
|
||||||
unused (sprinter_t *sp))
|
|
||||||
{
|
|
||||||
GMimeMessage *reply;
|
|
||||||
mime_node_t *node;
|
|
||||||
|
|
||||||
if (mime_node_open (ctx, message, ¶ms->crypto, &node))
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
reply = create_reply_message (ctx, config, message, reply_all, FALSE);
|
|
||||||
if (!reply)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
show_reply_headers (reply);
|
|
||||||
format_part_reply (node);
|
|
||||||
|
|
||||||
g_object_unref (G_OBJECT (reply));
|
|
||||||
talloc_free (node);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
notmuch_reply_format_sprinter(void *ctx,
|
|
||||||
notmuch_config_t *config,
|
|
||||||
notmuch_message_t *message,
|
|
||||||
notmuch_show_params_t *params,
|
|
||||||
notmuch_bool_t reply_all,
|
|
||||||
sprinter_t *sp)
|
|
||||||
{
|
|
||||||
GMimeMessage *reply;
|
|
||||||
mime_node_t *node;
|
|
||||||
|
|
||||||
if (mime_node_open (ctx, message, ¶ms->crypto, &node))
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
reply = create_reply_message (ctx, config, message, reply_all, FALSE);
|
|
||||||
if (!reply)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
sp->begin_map (sp);
|
|
||||||
|
|
||||||
/* The headers of the reply message we've created */
|
|
||||||
sp->map_key (sp, "reply-headers");
|
|
||||||
format_headers_sprinter (sp, reply, TRUE);
|
|
||||||
|
|
||||||
/* Start the original */
|
|
||||||
sp->map_key (sp, "original");
|
|
||||||
format_part_sprinter (ctx, sp, node, TRUE, TRUE, FALSE);
|
|
||||||
|
|
||||||
/* End */
|
|
||||||
sp->end (sp);
|
|
||||||
|
|
||||||
g_object_unref (G_OBJECT (reply));
|
|
||||||
talloc_free (node);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* This format is currently tuned for a git send-email --notmuch hook */
|
|
||||||
static int
|
|
||||||
notmuch_reply_format_headers_only(void *ctx,
|
|
||||||
notmuch_config_t *config,
|
|
||||||
notmuch_message_t *message,
|
|
||||||
unused (notmuch_show_params_t *params),
|
|
||||||
notmuch_bool_t reply_all,
|
|
||||||
unused (sprinter_t *sp))
|
|
||||||
{
|
|
||||||
GMimeMessage *reply;
|
|
||||||
|
|
||||||
reply = create_reply_message (ctx, config, message, reply_all, TRUE);
|
|
||||||
if (!reply)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
show_reply_headers (reply);
|
|
||||||
|
|
||||||
g_object_unref (G_OBJECT (reply));
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
FORMAT_DEFAULT,
|
FORMAT_DEFAULT,
|
||||||
FORMAT_JSON,
|
FORMAT_JSON,
|
||||||
|
@ -698,17 +612,12 @@ static int do_reply(notmuch_config_t *config,
|
||||||
int format,
|
int format,
|
||||||
notmuch_bool_t reply_all)
|
notmuch_bool_t reply_all)
|
||||||
{
|
{
|
||||||
|
GMimeMessage *reply;
|
||||||
|
mime_node_t *node;
|
||||||
notmuch_messages_t *messages;
|
notmuch_messages_t *messages;
|
||||||
notmuch_message_t *message;
|
notmuch_message_t *message;
|
||||||
notmuch_status_t status;
|
notmuch_status_t status;
|
||||||
struct sprinter *sp = NULL;
|
struct sprinter *sp = NULL;
|
||||||
int ret = 0;
|
|
||||||
int (*reply_format_func) (void *ctx,
|
|
||||||
notmuch_config_t *config,
|
|
||||||
notmuch_message_t *message,
|
|
||||||
notmuch_show_params_t *params,
|
|
||||||
notmuch_bool_t reply_all,
|
|
||||||
struct sprinter *sp);
|
|
||||||
|
|
||||||
if (format == FORMAT_JSON || format == FORMAT_SEXP) {
|
if (format == FORMAT_JSON || format == FORMAT_SEXP) {
|
||||||
unsigned count;
|
unsigned count;
|
||||||
|
@ -721,18 +630,11 @@ static int do_reply(notmuch_config_t *config,
|
||||||
fprintf (stderr, "Error: search term did not match precisely one message (matched %d messages).\n", count);
|
fprintf (stderr, "Error: search term did not match precisely one message (matched %d messages).\n", count);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (format == FORMAT_HEADERS_ONLY) {
|
if (format == FORMAT_JSON)
|
||||||
reply_format_func = notmuch_reply_format_headers_only;
|
|
||||||
} else if (format == FORMAT_JSON) {
|
|
||||||
reply_format_func = notmuch_reply_format_sprinter;
|
|
||||||
sp = sprinter_json_create (config, stdout);
|
sp = sprinter_json_create (config, stdout);
|
||||||
} else if (format == FORMAT_SEXP) {
|
else
|
||||||
reply_format_func = notmuch_reply_format_sprinter;
|
|
||||||
sp = sprinter_sexp_create (config, stdout);
|
sp = sprinter_sexp_create (config, stdout);
|
||||||
} else {
|
|
||||||
reply_format_func = notmuch_reply_format_default;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
status = notmuch_query_search_messages_st (query, &messages);
|
status = notmuch_query_search_messages_st (query, &messages);
|
||||||
|
@ -745,15 +647,40 @@ static int do_reply(notmuch_config_t *config,
|
||||||
{
|
{
|
||||||
message = notmuch_messages_get (messages);
|
message = notmuch_messages_get (messages);
|
||||||
|
|
||||||
ret = reply_format_func(config, config, message, params, reply_all, sp);
|
if (mime_node_open (config, message, ¶ms->crypto, &node))
|
||||||
|
return 1;
|
||||||
|
|
||||||
notmuch_message_destroy (message);
|
reply = create_reply_message (config, config, message, reply_all,
|
||||||
|
format == FORMAT_HEADERS_ONLY);
|
||||||
|
if (!reply)
|
||||||
|
return 1;
|
||||||
|
|
||||||
if (ret)
|
if (format == FORMAT_JSON || format == FORMAT_SEXP) {
|
||||||
break;
|
sp->begin_map (sp);
|
||||||
|
|
||||||
|
/* The headers of the reply message we've created */
|
||||||
|
sp->map_key (sp, "reply-headers");
|
||||||
|
format_headers_sprinter (sp, reply, TRUE);
|
||||||
|
|
||||||
|
/* Start the original */
|
||||||
|
sp->map_key (sp, "original");
|
||||||
|
format_part_sprinter (config, sp, node, TRUE, TRUE, FALSE);
|
||||||
|
|
||||||
|
/* End */
|
||||||
|
sp->end (sp);
|
||||||
|
} else {
|
||||||
|
show_reply_headers (reply);
|
||||||
|
if (format == FORMAT_DEFAULT)
|
||||||
|
format_part_reply (node);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
g_object_unref (G_OBJECT (reply));
|
||||||
|
talloc_free (node);
|
||||||
|
|
||||||
|
notmuch_message_destroy (message);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
Loading…
Reference in a new issue