mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-21 18:38:08 +01:00
pass entire format structure to various show_message functions
Various show_message* functions require formatting functions, which were previously being passed individually as arguments. Since we will need to be needing to passing in more formatting function in the future (ie. for crypto support), we here modify things so that we just pass in the entire format structure. This will make things much simpler down the line as we need to pass in new format functions. We move the show_format structure into notmuch-client.c as notmuch_show_format. This also affects notmuch-reply.c, so we create a mostly-empty format_reply to pass the reply_part function to show_message_body.
This commit is contained in:
parent
8b9fc33d99
commit
dcdb843094
4 changed files with 68 additions and 46 deletions
|
@ -54,6 +54,27 @@
|
|||
#define STRINGIFY(s) STRINGIFY_(s)
|
||||
#define STRINGIFY_(s) #s
|
||||
|
||||
typedef struct notmuch_show_format {
|
||||
const char *message_set_start;
|
||||
const char *message_start;
|
||||
void (*message) (const void *ctx,
|
||||
notmuch_message_t *message,
|
||||
int indent);
|
||||
const char *header_start;
|
||||
void (*header) (const void *ctx,
|
||||
notmuch_message_t *message);
|
||||
const char *header_end;
|
||||
const char *body_start;
|
||||
void (*part) (GMimeObject *part,
|
||||
int *part_count,
|
||||
int first);
|
||||
void (*part_end) (GMimeObject *part);
|
||||
const char *body_end;
|
||||
const char *message_end;
|
||||
const char *message_set_sep;
|
||||
const char *message_set_end;
|
||||
} notmuch_show_format_t;
|
||||
|
||||
/* There's no point in continuing when we've detected that we've done
|
||||
* something wrong internally (as opposed to the user passing in a
|
||||
* bogus value).
|
||||
|
@ -133,8 +154,7 @@ query_string_from_args (void *ctx, int argc, char *argv[]);
|
|||
|
||||
notmuch_status_t
|
||||
show_message_body (const char *filename,
|
||||
void (*show_part) (GMimeObject *part, int *part_count, int first),
|
||||
void (*show_part_end) (GMimeObject *part));
|
||||
const notmuch_show_format_t *format);
|
||||
|
||||
notmuch_status_t
|
||||
show_one_part (const char *filename, int part);
|
||||
|
|
|
@ -24,6 +24,20 @@
|
|||
#include "gmime-filter-reply.h"
|
||||
#include "gmime-filter-headers.h"
|
||||
|
||||
static void
|
||||
reply_part (GMimeObject *part,
|
||||
unused (int *part_count),
|
||||
unused (int first));
|
||||
|
||||
static const notmuch_show_format_t format_reply = {
|
||||
NULL,
|
||||
NULL, NULL,
|
||||
NULL, NULL, NULL,
|
||||
NULL, reply_part, NULL, NULL,
|
||||
NULL, NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
static void
|
||||
reply_part_content (GMimeObject *part)
|
||||
{
|
||||
|
@ -72,12 +86,13 @@ show_reply_headers (GMimeMessage *message)
|
|||
}
|
||||
|
||||
static void
|
||||
reply_part (GMimeObject *part, int *part_count, unused (int first))
|
||||
reply_part (GMimeObject *part,
|
||||
unused (int *part_count),
|
||||
unused (int first))
|
||||
{
|
||||
GMimeContentDisposition *disposition;
|
||||
GMimeContentType *content_type;
|
||||
|
||||
(void) part_count;
|
||||
disposition = g_mime_object_get_content_disposition (part);
|
||||
if (disposition &&
|
||||
strcmp (disposition->disposition, GMIME_DISPOSITION_ATTACHMENT) == 0)
|
||||
|
@ -447,6 +462,7 @@ notmuch_reply_format_default(void *ctx, notmuch_config_t *config, notmuch_query_
|
|||
notmuch_message_t *message;
|
||||
const char *subject, *from_addr = NULL;
|
||||
const char *in_reply_to, *orig_references, *references;
|
||||
const notmuch_show_format_t *format = &format_reply;
|
||||
|
||||
for (messages = notmuch_query_search_messages (query);
|
||||
notmuch_messages_valid (messages);
|
||||
|
@ -506,7 +522,7 @@ notmuch_reply_format_default(void *ctx, notmuch_config_t *config, notmuch_query_
|
|||
notmuch_message_get_header (message, "from"));
|
||||
|
||||
show_message_body (notmuch_message_get_filename (message),
|
||||
reply_part, NULL);
|
||||
format);
|
||||
|
||||
notmuch_message_destroy (message);
|
||||
}
|
||||
|
|
|
@ -20,26 +20,6 @@
|
|||
|
||||
#include "notmuch-client.h"
|
||||
|
||||
typedef struct show_format {
|
||||
const char *message_set_start;
|
||||
const char *message_start;
|
||||
void (*message) (const void *ctx,
|
||||
notmuch_message_t *message,
|
||||
int indent);
|
||||
const char *header_start;
|
||||
void (*header) (const void *ctx,
|
||||
notmuch_message_t *message);
|
||||
const char *header_end;
|
||||
const char *body_start;
|
||||
void (*part) (GMimeObject *part,
|
||||
int *part_count, int first);
|
||||
void (*part_end) (GMimeObject *part);
|
||||
const char *body_end;
|
||||
const char *message_end;
|
||||
const char *message_set_sep;
|
||||
const char *message_set_end;
|
||||
} show_format_t;
|
||||
|
||||
static void
|
||||
format_message_text (unused (const void *ctx),
|
||||
notmuch_message_t *message,
|
||||
|
@ -56,7 +36,7 @@ format_part_text (GMimeObject *part,
|
|||
static void
|
||||
format_part_end_text (GMimeObject *part);
|
||||
|
||||
static const show_format_t format_text = {
|
||||
static const notmuch_show_format_t format_text = {
|
||||
"",
|
||||
"\fmessage{ ", format_message_text,
|
||||
"\fheader{\n", format_headers_text, "\fheader}\n",
|
||||
|
@ -81,7 +61,7 @@ format_part_json (GMimeObject *part,
|
|||
static void
|
||||
format_part_end_json (GMimeObject *part);
|
||||
|
||||
static const show_format_t format_json = {
|
||||
static const notmuch_show_format_t format_json = {
|
||||
"[",
|
||||
"{", format_message_json,
|
||||
", \"headers\": {", format_headers_json, "}",
|
||||
|
@ -95,7 +75,7 @@ format_message_mbox (const void *ctx,
|
|||
notmuch_message_t *message,
|
||||
unused (int indent));
|
||||
|
||||
static const show_format_t format_mbox = {
|
||||
static const notmuch_show_format_t format_mbox = {
|
||||
"",
|
||||
"", format_message_mbox,
|
||||
"", NULL, "",
|
||||
|
@ -515,7 +495,10 @@ format_part_end_json (GMimeObject *part)
|
|||
}
|
||||
|
||||
static void
|
||||
show_message (void *ctx, const show_format_t *format, notmuch_message_t *message, int indent)
|
||||
show_message (void *ctx,
|
||||
const notmuch_show_format_t *format,
|
||||
notmuch_message_t *message,
|
||||
int indent)
|
||||
{
|
||||
fputs (format->message_start, stdout);
|
||||
if (format->message)
|
||||
|
@ -529,7 +512,7 @@ show_message (void *ctx, const show_format_t *format, notmuch_message_t *message
|
|||
fputs (format->body_start, stdout);
|
||||
if (format->part)
|
||||
show_message_body (notmuch_message_get_filename (message),
|
||||
format->part, format->part_end);
|
||||
format);
|
||||
fputs (format->body_end, stdout);
|
||||
|
||||
fputs (format->message_end, stdout);
|
||||
|
@ -537,7 +520,10 @@ show_message (void *ctx, const show_format_t *format, notmuch_message_t *message
|
|||
|
||||
|
||||
static void
|
||||
show_messages (void *ctx, const show_format_t *format, notmuch_messages_t *messages, int indent,
|
||||
show_messages (void *ctx,
|
||||
const notmuch_show_format_t *format,
|
||||
notmuch_messages_t *messages,
|
||||
int indent,
|
||||
notmuch_bool_t entire_thread)
|
||||
{
|
||||
notmuch_message_t *message;
|
||||
|
@ -631,7 +617,7 @@ do_show_raw (unused(void *ctx), notmuch_query_t *query)
|
|||
static int
|
||||
do_show (void *ctx,
|
||||
notmuch_query_t *query,
|
||||
const show_format_t *format,
|
||||
const notmuch_show_format_t *format,
|
||||
int entire_thread)
|
||||
{
|
||||
notmuch_threads_t *threads;
|
||||
|
@ -676,7 +662,7 @@ notmuch_show_command (void *ctx, unused (int argc), unused (char *argv[]))
|
|||
notmuch_query_t *query;
|
||||
char *query_string;
|
||||
char *opt;
|
||||
const show_format_t *format = &format_text;
|
||||
const notmuch_show_format_t *format = &format_text;
|
||||
int entire_thread = 0;
|
||||
int i;
|
||||
int raw = 0;
|
||||
|
|
|
@ -25,8 +25,7 @@
|
|||
static void
|
||||
show_message_part (GMimeObject *part,
|
||||
int *part_count,
|
||||
void (*show_part) (GMimeObject *part, int *part_count, int first),
|
||||
void (*show_part_end) (GMimeObject *part),
|
||||
const notmuch_show_format_t *format,
|
||||
int first)
|
||||
{
|
||||
if (GMIME_IS_MULTIPART (part)) {
|
||||
|
@ -34,15 +33,15 @@ show_message_part (GMimeObject *part,
|
|||
int i;
|
||||
|
||||
*part_count = *part_count + 1;
|
||||
(*show_part) (part, part_count, first);
|
||||
format->part (part, part_count, first);
|
||||
|
||||
for (i = 0; i < g_mime_multipart_get_count (multipart); i++) {
|
||||
show_message_part (g_mime_multipart_get_part (multipart, i),
|
||||
part_count, show_part, show_part_end, i == 0);
|
||||
part_count, format, i == 0);
|
||||
}
|
||||
|
||||
if (show_part_end)
|
||||
(*show_part_end) (part);
|
||||
if (format->part_end)
|
||||
format->part_end (part);
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -53,7 +52,7 @@ show_message_part (GMimeObject *part,
|
|||
mime_message = g_mime_message_part_get_message (GMIME_MESSAGE_PART (part));
|
||||
|
||||
show_message_part (g_mime_message_get_mime_part (mime_message),
|
||||
part_count, show_part, show_part_end, first);
|
||||
part_count, format, first);
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -66,15 +65,14 @@ show_message_part (GMimeObject *part,
|
|||
|
||||
*part_count = *part_count + 1;
|
||||
|
||||
(*show_part) (part, part_count, first);
|
||||
if (show_part_end)
|
||||
(*show_part_end) (part);
|
||||
format->part (part, part_count, first);
|
||||
if (format->part_end)
|
||||
format->part_end (part);
|
||||
}
|
||||
|
||||
notmuch_status_t
|
||||
show_message_body (const char *filename,
|
||||
void (*show_part) (GMimeObject *part, int *part_count, int first),
|
||||
void (*show_part_end) (GMimeObject *part))
|
||||
const notmuch_show_format_t *format)
|
||||
{
|
||||
GMimeStream *stream = NULL;
|
||||
GMimeParser *parser = NULL;
|
||||
|
@ -98,7 +96,9 @@ show_message_body (const char *filename,
|
|||
mime_message = g_mime_parser_construct_message (parser);
|
||||
|
||||
show_message_part (g_mime_message_get_mime_part (mime_message),
|
||||
&part_count, show_part, show_part_end, TRUE);
|
||||
&part_count,
|
||||
format,
|
||||
TRUE);
|
||||
|
||||
DONE:
|
||||
if (mime_message)
|
||||
|
|
Loading…
Reference in a new issue