]> git.notmuchmail.org Git - notmuch/commitdiff
pass entire format structure to various show_message functions
authorJameson Graef Rollins <jrollins@finestructure.net>
Fri, 20 May 2011 18:45:33 +0000 (11:45 -0700)
committerCarl Worth <cworth@cworth.org>
Fri, 20 May 2011 19:27:35 +0000 (12:27 -0700)
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.

notmuch-client.h
notmuch-reply.c
notmuch-show.c
show-message.c

index 1dbd987dfd0a5d588b57e355eca7ea178c17cd47..57daa9a25ed0eacce4a188510c9172e9d239e2fc 100644 (file)
 #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);
index 71edb662e02edb35fcdc3441ec2e92e33d3d2674..064d27e08b06089eade9672a60fcf8ff7a1fc425 100644 (file)
 #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);
     }
index 7220dd973803a624e12eb978a9b013c79fbe59ff..20e54bcd0f0a6d665720dbc6354d2824ebdcfe09 100644 (file)
 
 #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;
index c206bddc0371d4d6bdebbb9936b2c2531fb71aa0..44ab8194eed78f31e74c323d2af536bcc971ee68 100644 (file)
@@ -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)