]> git.notmuchmail.org Git - notmuch/blobdiff - notmuch-show.c
show: Make format_part_sigstatus_json's API consistent between GMIME 2.4 and 2.6
[notmuch] / notmuch-show.c
index 9ca988207bfe232ee6384e477b5527c4ae943faa..07276c7db27d776133483c38a563e75a2729f824 100644 (file)
@@ -291,66 +291,35 @@ format_headers_message_part_text (GMimeMessage *message)
 }
 
 static void
-format_headers_json (const void *ctx, notmuch_message_t *message)
+format_headers_json (const void *ctx, GMimeMessage *message)
 {
-    const char *headers[] = {
-       "Subject", "From", "To", "Cc", "Bcc", "Date"
-    };
-    const char *name, *value;
-    unsigned int i;
-    int first_header = 1;
-    void *ctx_quote = talloc_new (ctx);
-
-    for (i = 0; i < ARRAY_SIZE (headers); i++) {
-       name = headers[i];
-       value = notmuch_message_get_header (message, name);
-       if (value)
-       {
-           if (!first_header)
-               fputs (", ", stdout);
-           first_header = 0;
-
-           printf ("%s: %s",
-                   json_quote_str (ctx_quote, name),
-                   json_quote_str (ctx_quote, value));
-       }
-    }
-
-    talloc_free (ctx_quote);
-}
-
-static void
-format_headers_message_part_json (GMimeMessage *message)
-{
-    void *ctx = talloc_new (NULL);
-    void *ctx_quote = talloc_new (ctx);
+    void *local = talloc_new (ctx);
     InternetAddressList *recipients;
     const char *recipients_string;
 
-    printf ("%s: %s",
-           json_quote_str (ctx_quote, "Subject"),
-           json_quote_str (ctx_quote, g_mime_message_get_subject (message)));
+    printf ("{%s: %s",
+           json_quote_str (local, "Subject"),
+           json_quote_str (local, g_mime_message_get_subject (message)));
     printf (", %s: %s",
-           json_quote_str (ctx_quote, "From"),
-           json_quote_str (ctx_quote, g_mime_message_get_sender (message)));
+           json_quote_str (local, "From"),
+           json_quote_str (local, g_mime_message_get_sender (message)));
     recipients = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_TO);
     recipients_string = internet_address_list_to_string (recipients, 0);
     if (recipients_string)
        printf (", %s: %s",
-               json_quote_str (ctx_quote, "To"),
-               json_quote_str (ctx_quote, recipients_string));
+               json_quote_str (local, "To"),
+               json_quote_str (local, recipients_string));
     recipients = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_CC);
     recipients_string = internet_address_list_to_string (recipients, 0);
     if (recipients_string)
        printf (", %s: %s",
-               json_quote_str (ctx_quote, "Cc"),
-               json_quote_str (ctx_quote, recipients_string));
-    printf (", %s: %s",
-           json_quote_str (ctx_quote, "Date"),
-           json_quote_str (ctx_quote, g_mime_message_get_date_as_string (message)));
+               json_quote_str (local, "Cc"),
+               json_quote_str (local, recipients_string));
+    printf (", %s: %s}",
+           json_quote_str (local, "Date"),
+           json_quote_str (local, g_mime_message_get_date_as_string (message)));
 
-    talloc_free (ctx_quote);
-    talloc_free (ctx);
+    talloc_free (local);
 }
 
 /* Write a MIME text part out to the given stream.
@@ -435,9 +404,11 @@ signer_status_to_string (GMimeSignerStatus x)
 
 #ifdef GMIME_ATLEAST_26
 static void
-format_part_sigstatus_json (GMimeSignatureList *siglist)
+format_part_sigstatus_json (mime_node_t *node)
 {
-    printf (", \"sigstatus\": [");
+    GMimeSignatureList *siglist = node->sig_list;
+
+    printf ("[");
 
     if (!siglist) {
        printf ("]");
@@ -501,9 +472,11 @@ format_part_sigstatus_json (GMimeSignatureList *siglist)
 }
 #else
 static void
-format_part_sigstatus_json (const GMimeSignatureValidity* validity)
+format_part_sigstatus_json (mime_node_t *node)
 {
-    printf (", \"sigstatus\": [");
+    const GMimeSignatureValidity* validity = node->sig_validity;
+
+    printf ("[");
 
     if (!validity) {
        printf ("]");
@@ -689,9 +662,8 @@ format_part_json (const void *ctx, mime_node_t *node, notmuch_bool_t first)
        printf ("{");
        format_message_json (ctx, node->envelope_file);
 
-       printf ("\"headers\": {");
-       format_headers_json (ctx, node->envelope_file);
-       printf ("}");
+       printf ("\"headers\": ");
+       format_headers_json (ctx, GMIME_MESSAGE (node->part));
 
        printf (", \"body\": [");
        format_part_json (ctx, mime_node_child (node, 0), first);
@@ -727,11 +699,8 @@ format_part_json (const void *ctx, mime_node_t *node, notmuch_bool_t first)
     }
 
     if (node->verify_attempted) {
-#ifdef GMIME_ATLEAST_26
-       format_part_sigstatus_json (node->sig_list);
-#else
-       format_part_sigstatus_json (node->sig_validity);
-#endif
+       printf (", \"sigstatus\": ");
+       format_part_sigstatus_json (node);
     }
 
     printf (", \"content-type\": %s",
@@ -777,9 +746,8 @@ format_part_json (const void *ctx, mime_node_t *node, notmuch_bool_t first)
        g_object_unref (stream_memory);
 
     if (GMIME_IS_MESSAGE (node->part)) {
-       printf ("\"headers\": {");
-       format_headers_message_part_json (GMIME_MESSAGE (node->part));
-       printf ("}");
+       printf ("\"headers\": ");
+       format_headers_json (local, GMIME_MESSAGE (node->part));
 
        printf (", \"body\": [");
     }