X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=notmuch-show.c;h=b5db3df95aa2652be9e1f5ffa0f0d7f241894696;hp=7647e9e4c5f7a22b6f4b37ef31757b854c80a932;hb=dfc0780cbab2106a9d8fca69cefae02d4102f397;hpb=50144f95cababfb73027ca95ad1fb303c235a893 diff --git a/notmuch-show.c b/notmuch-show.c index 7647e9e4..b5db3df9 100644 --- a/notmuch-show.c +++ b/notmuch-show.c @@ -67,49 +67,11 @@ _get_one_line_summary (void *ctx, notmuch_message_t *message) } static void -show_message_part (GMimeObject *part, int *part_count) +show_part(GMimeObject *part, int *part_count) { - GMimeStream *stream; - GMimeDataWrapper *wrapper; GMimeContentDisposition *disposition; GMimeContentType *content_type; - - *part_count = *part_count + 1; - - if (GMIME_IS_MULTIPART (part)) { - GMimeMultipart *multipart = GMIME_MULTIPART (part); - int i; - - for (i = 0; i < g_mime_multipart_get_count (multipart); i++) { - if (GMIME_IS_MULTIPART_SIGNED (multipart)) { - /* Don't index the signature. */ - if (i == 1) - continue; - if (i > 1) - fprintf (stderr, "Warning: Unexpected extra parts of mutlipart/signed. Continuing.\n"); - } - show_message_part (g_mime_multipart_get_part (multipart, i), - part_count); - } - return; - } - - if (GMIME_IS_MESSAGE_PART (part)) { - GMimeMessage *mime_message; - - 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); - - return; - } - - if (! (GMIME_IS_PART (part))) { - fprintf (stderr, "Warning: Not displaying unknown mime part: %s.\n", - g_type_name (G_OBJECT_TYPE (part))); - return; - } + GMimeDataWrapper *wrapper; disposition = g_mime_object_get_content_disposition (part); if (disposition && @@ -137,14 +99,14 @@ show_message_part (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")) { - stream = g_mime_stream_file_new (stdout); + GMimeStream *stream = g_mime_stream_file_new (stdout); g_mime_stream_file_set_owner (GMIME_STREAM_FILE (stream), FALSE); wrapper = g_mime_part_get_content_object (GMIME_PART (part)); - if (wrapper) + if (wrapper && stream) g_mime_data_wrapper_write_to_stream (wrapper, stream); - - g_object_unref (stream); + if (stream) + g_object_unref(stream); } else { @@ -155,55 +117,6 @@ show_message_part (GMimeObject *part, int *part_count) printf ("\fpart}\n"); } -static notmuch_status_t -show_message_body (const char *filename) -{ - GMimeStream *stream = NULL; - GMimeParser *parser = NULL; - GMimeMessage *mime_message = NULL; - notmuch_status_t ret = NOTMUCH_STATUS_SUCCESS; - static int initialized = 0; - FILE *file = NULL; - int part_count = 0; - - if (! initialized) { - g_mime_init (0); - initialized = 1; - } - - file = fopen (filename, "r"); - if (! file) { - fprintf (stderr, "Error opening %s: %s\n", filename, strerror (errno)); - ret = NOTMUCH_STATUS_FILE_ERROR; - goto DONE; - } - - stream = g_mime_stream_file_new (file); - g_mime_stream_file_set_owner (GMIME_STREAM_FILE (stream), FALSE); - - parser = g_mime_parser_new_with_stream (stream); - - mime_message = g_mime_parser_construct_message (parser); - - show_message_part (g_mime_message_get_mime_part (mime_message), - &part_count); - - DONE: - if (mime_message) - g_object_unref (mime_message); - - if (parser) - g_object_unref (parser); - - if (stream) - g_object_unref (stream); - - if (file) - fclose (file); - - return ret; -} - int notmuch_show_command (void *ctx, unused (int argc), unused (char *argv[])) { @@ -267,7 +180,7 @@ notmuch_show_command (void *ctx, unused (int argc), unused (char *argv[])) printf ("\fheader}\n"); printf ("\fbody{\n"); - show_message_body (notmuch_message_get_filename (message)); + show_message_body (notmuch_message_get_filename (message), show_part); printf ("\fbody}\n");