aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--notmuch-client.h5
-rw-r--r--notmuch-reply.c13
-rw-r--r--notmuch-show.c122
-rw-r--r--show-message.c4
4 files changed, 85 insertions, 59 deletions
diff --git a/notmuch-client.h b/notmuch-client.h
index 7221c681..b278bc77 100644
--- a/notmuch-client.h
+++ b/notmuch-client.h
@@ -65,8 +65,9 @@ typedef struct notmuch_show_format {
notmuch_message_t *message);
const char *header_end;
const char *body_start;
- void (*part) (GMimeObject *part,
- int *part_count);
+ void (*part_start) (GMimeObject *part,
+ int *part_count);
+ void (*part_content) (GMimeObject *part);
void (*part_end) (GMimeObject *part);
const char *part_sep;
const char *body_end;
diff --git a/notmuch-reply.c b/notmuch-reply.c
index 79599358..9c35475d 100644
--- a/notmuch-reply.c
+++ b/notmuch-reply.c
@@ -25,14 +25,18 @@
#include "gmime-filter-headers.h"
static void
-reply_part (GMimeObject *part,
- unused (int *part_count));
+reply_part_content (GMimeObject *part);
static const notmuch_show_format_t format_reply = {
"",
"", NULL,
"", NULL, "",
- "", reply_part, NULL, "", "",
+ "",
+ NULL,
+ reply_part_content,
+ NULL,
+ "",
+ "",
"", "",
""
};
@@ -57,8 +61,7 @@ show_reply_headers (GMimeMessage *message)
}
static void
-reply_part (GMimeObject *part,
- unused (int *part_count))
+reply_part_content (GMimeObject *part)
{
GMimeContentType *content_type = g_mime_object_get_content_type (GMIME_OBJECT (part));
GMimeContentDisposition *disposition = g_mime_object_get_content_disposition (part);
diff --git a/notmuch-show.c b/notmuch-show.c
index 65c780e7..363cdbfe 100644
--- a/notmuch-show.c
+++ b/notmuch-show.c
@@ -29,8 +29,11 @@ format_headers_text (const void *ctx,
notmuch_message_t *message);
static void
-format_part_text (GMimeObject *part,
- int *part_count);
+format_part_start_text (GMimeObject *part,
+ int *part_count);
+
+static void
+format_part_content_text (GMimeObject *part);
static void
format_part_end_text (GMimeObject *part);
@@ -39,7 +42,12 @@ static const notmuch_show_format_t format_text = {
"",
"\fmessage{ ", format_message_text,
"\fheader{\n", format_headers_text, "\fheader}\n",
- "\fbody{\n", format_part_text, format_part_end_text, "", "\fbody}\n",
+ "\fbody{\n",
+ format_part_start_text,
+ format_part_content_text,
+ format_part_end_text,
+ "",
+ "\fbody}\n",
"\fmessage}\n", "",
""
};
@@ -53,8 +61,11 @@ format_headers_json (const void *ctx,
notmuch_message_t *message);
static void
-format_part_json (GMimeObject *part,
- int *part_count);
+format_part_start_json (unused (GMimeObject *part),
+ int *part_count);
+
+static void
+format_part_content_json (GMimeObject *part);
static void
format_part_end_json (GMimeObject *part);
@@ -63,7 +74,12 @@ static const notmuch_show_format_t format_json = {
"[",
"{", format_message_json,
", \"headers\": {", format_headers_json, "}",
- ", \"body\": [", format_part_json, format_part_end_json, ", ", "]",
+ ", \"body\": [",
+ format_part_start_json,
+ format_part_content_json,
+ format_part_end_json,
+ ", ",
+ "]",
"}", ", ",
"]"
};
@@ -77,20 +93,29 @@ static const notmuch_show_format_t format_mbox = {
"",
"", format_message_mbox,
"", NULL, "",
- "", NULL, NULL, "", "",
+ "",
+ NULL,
+ NULL,
+ NULL,
+ "",
+ "",
"", "",
""
};
static void
-format_part_raw (GMimeObject *part,
- unused (int *part_count));
+format_part_content_raw (GMimeObject *part);
static const notmuch_show_format_t format_raw = {
"",
"", NULL,
"", NULL, "",
- "", format_part_raw, NULL, "", "",
+ "",
+ NULL,
+ format_part_content_raw,
+ NULL,
+ "",
+ "",
"", "",
""
};
@@ -372,46 +397,41 @@ show_part_content (GMimeObject *part, GMimeStream *stream_out)
}
static void
-format_part_text (GMimeObject *part, int *part_count)
+format_part_start_text (GMimeObject *part, int *part_count)
{
- GMimeContentDisposition *disposition;
- GMimeContentType *content_type;
+ GMimeContentDisposition *disposition = g_mime_object_get_content_disposition (part);
- disposition = g_mime_object_get_content_disposition (part);
if (disposition &&
strcmp (disposition->disposition, GMIME_DISPOSITION_ATTACHMENT) == 0)
{
- const char *filename = g_mime_part_get_filename (GMIME_PART (part));
- content_type = g_mime_object_get_content_type (GMIME_OBJECT (part));
-
- printf ("\fattachment{ ID: %d, Content-type: %s\n",
- *part_count,
- g_mime_content_type_to_string (content_type));
- printf ("Attachment: %s (%s)\n", filename,
- g_mime_content_type_to_string (content_type));
+ printf ("\fattachment{ ID: %d", *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 {
- return;
+ printf ("\fpart{ ID: %d", *part_count);
}
+}
- content_type = g_mime_object_get_content_type (GMIME_OBJECT (part));
+static void
+format_part_content_text (GMimeObject *part)
+{
+ GMimeContentDisposition *disposition = g_mime_object_get_content_disposition (part);
+ GMimeContentType *content_type = g_mime_object_get_content_type (GMIME_OBJECT (part));
+ GMimeStream *stream_stdout = g_mime_stream_file_new (stdout);
+
+ printf (", Content-type: %s\n", g_mime_content_type_to_string (content_type));
- printf ("\fpart{ ID: %d, Content-type: %s\n",
- *part_count,
- g_mime_content_type_to_string (content_type));
+ if (disposition &&
+ strcmp (disposition->disposition, GMIME_DISPOSITION_ATTACHMENT) == 0)
+ {
+ const char *filename = g_mime_part_get_filename (GMIME_PART (part));
+ printf ("Attachment: %s (%s)\n", filename,
+ g_mime_content_type_to_string (content_type));
+ }
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);
@@ -447,27 +467,27 @@ format_part_end_text (GMimeObject *part)
}
static void
-format_part_json (GMimeObject *part, int *part_count)
+format_part_start_json (unused (GMimeObject *part), int *part_count)
{
- GMimeContentType *content_type;
- GMimeContentDisposition *disposition;
- void *ctx = talloc_new (NULL);
+ printf ("{\"id\": %d", *part_count);
+}
+
+static void
+format_part_content_json (GMimeObject *part)
+{
+ GMimeContentType *content_type = g_mime_object_get_content_type (GMIME_OBJECT (part));
GMimeStream *stream_memory = g_mime_stream_mem_new ();
+ const char *cid = g_mime_object_get_content_id (part);
+ void *ctx = talloc_new (NULL);
+ GMimeContentDisposition *disposition = g_mime_object_get_content_disposition (part);
GByteArray *part_content;
- const char *cid;
- content_type = g_mime_object_get_content_type (GMIME_OBJECT (part));
-
- printf ("{\"id\": %d, \"content-type\": %s",
- *part_count,
+ printf (", \"content-type\": %s",
json_quote_str (ctx, g_mime_content_type_to_string (content_type)));
- cid = g_mime_object_get_content_id (part);
if (cid != NULL)
- printf(", \"content-id\": %s",
- json_quote_str (ctx, cid));
+ printf(", \"content-id\": %s", json_quote_str (ctx, cid));
- disposition = g_mime_object_get_content_disposition (part);
if (disposition &&
strcmp (disposition->disposition, GMIME_DISPOSITION_ATTACHMENT) == 0)
{
@@ -510,7 +530,7 @@ format_part_end_json (GMimeObject *part)
}
static void
-format_part_raw (GMimeObject *part, unused (int *part_count))
+format_part_content_raw (GMimeObject *part)
{
GMimeStream *stream_stdout = g_mime_stream_file_new (stdout);
g_mime_stream_file_set_owner (GMIME_STREAM_FILE (stream_stdout), FALSE);
@@ -538,7 +558,7 @@ show_message (void *ctx,
fputs (format->body_start, stdout);
}
- if (format->part)
+ if (format->part_content)
show_message_body (notmuch_message_get_filename (message),
format, params);
diff --git a/show-message.c b/show-message.c
index 32bb860f..fbae5301 100644
--- a/show-message.c
+++ b/show-message.c
@@ -49,7 +49,9 @@ show_message_part (GMimeObject *part,
if (!first && (params->part <= 0 || state->in_zone))
fputs (format->part_sep, stdout);
- format->part (part, &(state->part_count));
+ if (format->part_start)
+ format->part_start (part, &(state->part_count));
+ format->part_content (part);
}
if (GMIME_IS_MULTIPART (part)) {