X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=notmuch-show.c;h=9f81ae161f1fa4975df8cf721630fbab818539c9;hp=7647e9e4c5f7a22b6f4b37ef31757b854c80a932;hb=d3349358c6a5048559bd2a4faebe476ebd222170;hpb=50144f95cababfb73027ca95ad1fb303c235a893 diff --git a/notmuch-show.c b/notmuch-show.c index 7647e9e4..9f81ae16 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,93 +117,43 @@ 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[])) { - void *local = talloc_new (ctx); - char *query_string; - notmuch_database_t *notmuch = NULL; - notmuch_query_t *query = NULL; + notmuch_config_t *config; + notmuch_database_t *notmuch; + notmuch_query_t *query; notmuch_messages_t *messages; notmuch_message_t *message; - int ret = 0; + char *query_string; const char *headers[] = { - "From", "To", "Cc", "Bcc", "Date" + "Subject", "From", "To", "Cc", "Bcc", "Date" }; const char *name, *value; unsigned int i; - notmuch = notmuch_database_open (NULL); - if (notmuch == NULL) { - ret = 1; - goto DONE; - } + config = notmuch_config_open (ctx, NULL, NULL); + if (config == NULL) + return 1; - query_string = query_string_from_args (local, argc, argv); + notmuch = notmuch_database_open (notmuch_config_get_database_path (config)); + if (notmuch == NULL) + return 1; + + query_string = query_string_from_args (ctx, argc, argv); if (query_string == NULL) { fprintf (stderr, "Out of memory\n"); - ret = 1; - goto DONE; + return 1; } query = notmuch_query_create (notmuch, query_string); if (query == NULL) { fprintf (stderr, "Out of memory\n"); - ret = 1; - goto DONE; + return 1; } - for (messages = notmuch_query_search_messages (query); + for (messages = notmuch_query_search_messages (query, 0, -1); notmuch_messages_has_more (messages); notmuch_messages_advance (messages)) { @@ -253,9 +165,7 @@ notmuch_show_command (void *ctx, unused (int argc), unused (char *argv[])) printf ("\fheader{\n"); - printf ("%s\n", _get_one_line_summary (local, message)); - - printf ("%s\n", notmuch_message_get_header (message, "subject")); + printf ("%s\n", _get_one_line_summary (ctx, message)); for (i = 0; i < ARRAY_SIZE (headers); i++) { name = headers[i]; @@ -267,7 +177,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"); @@ -276,15 +186,8 @@ notmuch_show_command (void *ctx, unused (int argc), unused (char *argv[])) notmuch_message_destroy (message); } - DONE: - if (local) - talloc_free (local); - - if (query) - notmuch_query_destroy (query); - - if (notmuch) - notmuch_database_close (notmuch); + notmuch_query_destroy (query); + notmuch_database_close (notmuch); - return ret; + return 0; }