]> git.notmuchmail.org Git - notmuch/blobdiff - notmuch-show.c
CLI: replace some constructs with more uncrustify friendly ones
[notmuch] / notmuch-show.c
index b95fc389cf009eec354a44bc09787e7009083fad..bce7d8279b42060abfc2b9a2a3b6a431264ea89f 100644 (file)
@@ -197,7 +197,7 @@ _is_from_line (const char *line)
 
 void
 format_headers_sprinter (sprinter_t *sp, GMimeMessage *message,
-                        bool reply)
+                        bool reply, const _notmuch_message_crypto_t *msg_crypto)
 {
     /* Any changes to the JSON or S-Expression format should be
      * reflected in the file devel/schemata. */
@@ -209,7 +209,10 @@ format_headers_sprinter (sprinter_t *sp, GMimeMessage *message,
     sp->begin_map (sp);
 
     sp->map_key (sp, "Subject");
-    sp->string (sp, g_mime_message_get_subject (message));
+    if (msg_crypto && msg_crypto->payload_subject) {
+       sp->string (sp, msg_crypto->payload_subject);
+    } else
+       sp->string (sp, g_mime_message_get_subject (message));
 
     sp->map_key (sp, "From");
     sp->string (sp, g_mime_message_get_from_string (message));
@@ -487,8 +490,8 @@ format_part_text (const void *ctx, sprinter_t *sp, mime_node_t *node,
 {
     /* The disposition and content-type metadata are associated with
      * the envelope for message parts */
-    GMimeObject *meta = node->envelope_part ?
-       GMIME_OBJECT (node->envelope_part) : node->part;
+    GMimeObject *meta = node->envelope_part ? (
+       GMIME_OBJECT (node->envelope_part) ) : node->part ;
     GMimeContentType *content_type = g_mime_object_get_content_type (meta);
     const bool leaf = GMIME_IS_PART (node->part);
     GMimeStream *stream = params->out_stream;
@@ -510,8 +513,8 @@ format_part_text (const void *ctx, sprinter_t *sp, mime_node_t *node,
        char *content_string;
        const char *disposition = _get_disposition (meta);
        const char *cid = g_mime_object_get_content_id (meta);
-       const char *filename = leaf ?
-           g_mime_part_get_filename (GMIME_PART (node->part)) : NULL;
+       const char *filename = leaf ? (
+           g_mime_part_get_filename (GMIME_PART (node->part)) ) : NULL ;
 
        if (disposition &&
            strcasecmp (disposition, GMIME_DISPOSITION_ATTACHMENT) == 0)
@@ -616,32 +619,83 @@ format_part_sprinter (const void *ctx, sprinter_t *sp, mime_node_t *node,
      * reflected in the file devel/schemata. */
 
     if (node->envelope_file) {
+       const _notmuch_message_crypto_t *msg_crypto = NULL;
        sp->begin_map (sp);
        format_message_sprinter (sp, node->envelope_file);
 
-       sp->map_key (sp, "headers");
-       format_headers_sprinter (sp, GMIME_MESSAGE (node->part), false);
-
        if (output_body) {
            sp->map_key (sp, "body");
            sp->begin_list (sp);
            format_part_sprinter (ctx, sp, mime_node_child (node, 0), true, include_html);
            sp->end (sp);
        }
+
+       msg_crypto = mime_node_get_message_crypto_status (node);
+       if (notmuch_format_version >= 4) {
+           sp->map_key (sp, "crypto");
+           sp->begin_map (sp);
+           if (msg_crypto->sig_list ||
+               msg_crypto->decryption_status != NOTMUCH_MESSAGE_DECRYPTED_NONE) {
+               if (msg_crypto->sig_list) {
+                   sp->map_key (sp, "signed");
+                   sp->begin_map (sp);
+                   sp->map_key (sp, "status");
+                   format_part_sigstatus_sprinter (sp, msg_crypto->sig_list);
+                   if (msg_crypto->signature_encrypted) {
+                       sp->map_key (sp, "encrypted");
+                       sp->boolean (sp, msg_crypto->signature_encrypted);
+                   }
+                   if (msg_crypto->payload_subject) {
+                       sp->map_key (sp, "headers");
+                       sp->begin_list (sp);
+                       sp->string (sp, "Subject");
+                       sp->end (sp);
+                   }
+                   sp->end (sp);
+               }
+               if (msg_crypto->decryption_status != NOTMUCH_MESSAGE_DECRYPTED_NONE) {
+                   sp->map_key (sp, "decrypted");
+                   sp->begin_map (sp);
+                   sp->map_key (sp, "status");
+                   sp->string (sp, msg_crypto->decryption_status == NOTMUCH_MESSAGE_DECRYPTED_FULL ? "full" : "partial");
+
+                   if (msg_crypto->payload_subject) {
+                       const char *subject = g_mime_message_get_subject GMIME_MESSAGE (node->part);
+                       if (subject == NULL || strcmp (subject, msg_crypto->payload_subject)) {
+                           /* protected subject differs from the external header */
+                           sp->map_key (sp, "header-mask");
+                           sp->begin_map (sp);
+                           sp->map_key (sp, "Subject");
+                           if (subject == NULL)
+                               sp->null (sp);
+                           else
+                               sp->string (sp, subject);
+                           sp->end (sp);
+                       }
+                   }
+                   sp->end (sp);
+               }
+           }
+           sp->end (sp);
+       }
+
+       sp->map_key (sp, "headers");
+       format_headers_sprinter (sp, GMIME_MESSAGE (node->part), false, msg_crypto);
+
        sp->end (sp);
        return;
     }
 
     /* The disposition and content-type metadata are associated with
      * the envelope for message parts */
-    GMimeObject *meta = node->envelope_part ?
-       GMIME_OBJECT (node->envelope_part) : node->part;
+    GMimeObject *meta = node->envelope_part ? (
+       GMIME_OBJECT (node->envelope_part) ): node->part;
     GMimeContentType *content_type = g_mime_object_get_content_type (meta);
     char *content_string;
     const char *disposition = _get_disposition (meta);
     const char *cid = g_mime_object_get_content_id (meta);
-    const char *filename = GMIME_IS_PART (node->part) ?
-       g_mime_part_get_filename (GMIME_PART (node->part)) : NULL;
+    const char *filename = GMIME_IS_PART (node->part) ? (
+       g_mime_part_get_filename (GMIME_PART (node->part) ) ) : NULL;
     int nclose = 0;
     int i;
 
@@ -719,7 +773,7 @@ format_part_sprinter (const void *ctx, sprinter_t *sp, mime_node_t *node,
        sp->begin_map (sp);
 
        sp->map_key (sp, "headers");
-       format_headers_sprinter (sp, GMIME_MESSAGE (node->part), false);
+       format_headers_sprinter (sp, GMIME_MESSAGE (node->part), false, NULL);
 
        sp->map_key (sp, "body");
        sp->begin_list (sp);