]> git.notmuchmail.org Git - notmuch/blobdiff - notmuch-show.c
Setup the GMimeStream only when needed
[notmuch] / notmuch-show.c
index 1a1d6019eac95713f92976f2cefafd474256866a..96647c1205d32ad036d6920f07dae7aee9547a4c 100644 (file)
@@ -90,8 +90,8 @@ _get_tags_as_string (const void *ctx, notmuch_message_t *message)
        return NULL;
 
     for (tags = notmuch_message_get_tags (message);
-        notmuch_tags_has_more (tags);
-        notmuch_tags_advance (tags))
+        notmuch_tags_valid (tags);
+        notmuch_tags_move_to_next (tags))
     {
        tag = notmuch_tags_get (tags);
 
@@ -136,13 +136,24 @@ format_message_text (unused (const void *ctx), notmuch_message_t *message, int i
 static void
 format_message_json (const void *ctx, notmuch_message_t *message, unused (int indent))
 {
+    notmuch_tags_t *tags;
+    int first = 1;
     void *ctx_quote = talloc_new (ctx);
 
-    printf ("\"id\": %s, \"match\": %s, \"filename\": %s",
+    printf ("\"id\": %s, \"match\": %s, \"filename\": %s, \"tags\": [",
            json_quote_str (ctx_quote, notmuch_message_get_message_id (message)),
            notmuch_message_get_flag (message, NOTMUCH_MESSAGE_FLAG_MATCH) ? "true" : "false",
            json_quote_str (ctx_quote, notmuch_message_get_filename (message)));
 
+    for (tags = notmuch_message_get_tags (message);
+        notmuch_tags_valid (tags);
+        notmuch_tags_move_to_next (tags))
+    {
+         printf("%s%s", first ? "" : ",",
+               json_quote_str (ctx_quote, notmuch_tags_get (tags)));
+         first = 0;
+    }
+    printf("]");
     talloc_free (ctx_quote);
 }
 
@@ -160,7 +171,7 @@ format_headers_text (const void *ctx, notmuch_message_t *message)
     for (i = 0; i < ARRAY_SIZE (headers); i++) {
        name = headers[i];
        value = notmuch_message_get_header (message, name);
-       if (value)
+       if (value && strlen (value))
            printf ("%s: %s\n", name, value);
     }
 }
@@ -225,9 +236,6 @@ format_part_text (GMimeObject *part, int *part_count)
 {
     GMimeContentDisposition *disposition;
     GMimeContentType *content_type;
-    GMimeStream *stream_stdout = g_mime_stream_file_new (stdout);
-
-    g_mime_stream_file_set_owner (GMIME_STREAM_FILE (stream_stdout), FALSE);
 
     disposition = g_mime_object_get_content_disposition (part);
     if (disposition &&
@@ -245,14 +253,14 @@ format_part_text (GMimeObject *part, int *part_count)
        if (g_mime_content_type_is_type (content_type, "text", "*") &&
            !g_mime_content_type_is_type (content_type, "text", "html"))
        {
+           GMimeStream *stream_stdout = g_mime_stream_file_new (stdout);
+           g_mime_stream_file_set_owner (GMIME_STREAM_FILE (stream_stdout), FALSE);
            show_part_content (part, stream_stdout);
+           g_object_unref(stream_stdout);
        }
 
        printf ("\fattachment}\n");
 
-       if (stream_stdout)
-           g_object_unref(stream_stdout);
-
        return;
     }
 
@@ -265,7 +273,10 @@ format_part_text (GMimeObject *part, int *part_count)
     if (g_mime_content_type_is_type (content_type, "text", "*") &&
        !g_mime_content_type_is_type (content_type, "text", "html"))
     {
+       GMimeStream *stream_stdout = g_mime_stream_file_new (stdout);
+       g_mime_stream_file_set_owner (GMIME_STREAM_FILE (stream_stdout), FALSE);
        show_part_content (part, stream_stdout);
+       g_object_unref(stream_stdout);
     }
     else
     {
@@ -274,9 +285,6 @@ format_part_text (GMimeObject *part, int *part_count)
     }
 
     printf ("\fpart}\n");
-
-    if (stream_stdout)
-       g_object_unref(stream_stdout);
 }
 
 static void
@@ -355,8 +363,8 @@ show_messages (void *ctx, const show_format_t *format, notmuch_messages_t *messa
     fputs (format->message_set_start, stdout);
 
     for (;
-        notmuch_messages_has_more (messages);
-        notmuch_messages_advance (messages))
+        notmuch_messages_valid (messages);
+        notmuch_messages_move_to_next (messages))
     {
        if (!first_set)
            fputs (format->message_set_sep, stdout);
@@ -460,8 +468,8 @@ notmuch_show_command (void *ctx, unused (int argc), unused (char *argv[]))
     fputs (format->message_set_start, stdout);
 
     for (threads = notmuch_query_search_threads (query);
-        notmuch_threads_has_more (threads);
-        notmuch_threads_advance (threads))
+        notmuch_threads_valid (threads);
+        notmuch_threads_move_to_next (threads))
     {
        thread = notmuch_threads_get (threads);