/* Formatted output of single message */ static int do_show_single (void *ctx, notmuch_query_t *query, const notmuch_show_format_t *format, notmuch_show_params_t *params) { notmuch_messages_t *messages; notmuch_message_t *message; if (notmuch_query_count_messages (query) != 1) { fprintf (stderr, "Error: search term did not match precisely one message.\n"); return 1; } messages = notmuch_query_search_messages (query); message = notmuch_messages_get (messages); if (message == NULL) { fprintf (stderr, "Error: Cannot find matching message.\n"); return 1; } notmuch_message_set_flag (message, NOTMUCH_MESSAGE_FLAG_MATCH, 1); return show_message (ctx, format, message, 0, params) != NOTMUCH_STATUS_SUCCESS; }
/* Formatted output of single message */ static int do_show_single (void *ctx, notmuch_query_t *query, const notmuch_show_format_t *format, notmuch_show_params_t *params) { notmuch_messages_t *messages; notmuch_message_t *message; if (notmuch_query_count_messages (query) != 1) { fprintf (stderr, "Error: search term did not match precisely one message.\n"); return 1; } messages = notmuch_query_search_messages (query); message = notmuch_messages_get (messages); if (message == NULL) { fprintf (stderr, "Error: Cannot find matching message.\n"); return 1; } notmuch_message_set_flag (message, NOTMUCH_MESSAGE_FLAG_MATCH, 1); /* Special case for --format=raw of full single message, just cat out file */ if (params->raw && 0 == params->part) { const char *filename; FILE *file; size_t size; char buf[4096]; filename = notmuch_message_get_filename (message); if (filename == NULL) { fprintf (stderr, "Error: Cannot message filename.\n"); return 1; } file = fopen (filename, "r"); if (file == NULL) { fprintf (stderr, "Error: Cannot open file %s: %s\n", filename, strerror (errno)); return 1; } while (!feof (file)) { size = fread (buf, 1, sizeof (buf), file); (void) fwrite (buf, size, 1, stdout); } fclose (file); } else { show_message (ctx, format, message, 0, params); } return 0; }
/* Formatted output of single message */ static int do_show_single (void *ctx, notmuch_query_t *query, const notmuch_show_format_t *format, sprinter_t *sp, notmuch_show_params_t *params) { notmuch_messages_t *messages; notmuch_message_t *message; notmuch_status_t status; unsigned int count; status = notmuch_query_count_messages_st (query, &count); if (print_status_query ("notmuch show", query, status)) return 1; if (count != 1) { fprintf (stderr, "Error: search term did not match precisely one message.\n"); return 1; } status = notmuch_query_search_messages_st (query, &messages); if (print_status_query ("notmuch show", query, status)) return 1; message = notmuch_messages_get (messages); if (message == NULL) { fprintf (stderr, "Error: Cannot find matching message.\n"); return 1; } notmuch_message_set_flag (message, NOTMUCH_MESSAGE_FLAG_MATCH, 1); return show_message (ctx, format, sp, message, 0, params) != NOTMUCH_STATUS_SUCCESS; }