* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with this program. If not, see http://www.gnu.org/licenses/ .
+ * along with this program. If not, see https://www.gnu.org/licenses/ .
*
* Author: Carl Worth <cworth@cworth.org>
*/
from, relative_date, tags);
}
+static const char *_get_disposition(GMimeObject *meta)
+{
+ GMimeContentDisposition *disposition;
+
+ disposition = g_mime_object_get_content_disposition (meta);
+ if (!disposition)
+ return NULL;
+
+ return g_mime_content_disposition_get_disposition (disposition);
+}
+
/* Emit a sequence of key/value pairs for the metadata of message.
* The caller should begin a map before calling this. */
static void
sp->boolean (sp, notmuch_message_get_flag (message, NOTMUCH_MESSAGE_FLAG_EXCLUDED));
sp->map_key (sp, "filename");
- sp->string (sp, notmuch_message_get_filename (message));
+ if (notmuch_format_version >= 3) {
+ notmuch_filenames_t *filenames;
+
+ sp->begin_list (sp);
+ for (filenames = notmuch_message_get_filenames (message);
+ notmuch_filenames_valid (filenames);
+ notmuch_filenames_move_to_next (filenames)) {
+ sp->string (sp, notmuch_filenames_get (filenames));
+ }
+ notmuch_filenames_destroy (filenames);
+ sp->end (sp);
+ } else {
+ sp->string (sp, notmuch_message_get_filename (message));
+ }
sp->map_key (sp, "timestamp");
date = notmuch_message_get_date (message);
* reflected in the file devel/schemata. */
InternetAddressList *recipients;
- const char *recipients_string;
+ char *recipients_string;
const char *reply_to_string;
+ char *date_string;
sp->begin_map (sp);
if (recipients_string) {
sp->map_key (sp, "To");
sp->string (sp, recipients_string);
+ g_free (recipients_string);
}
recipients = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_CC);
if (recipients_string) {
sp->map_key (sp, "Cc");
sp->string (sp, recipients_string);
+ g_free (recipients_string);
}
recipients = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_BCC);
if (recipients_string) {
sp->map_key (sp, "Bcc");
sp->string (sp, recipients_string);
+ g_free (recipients_string);
}
reply_to_string = g_mime_message_get_reply_to (message);
sp->string (sp, g_mime_object_get_header (GMIME_OBJECT (message), "References"));
} else {
sp->map_key (sp, "Date");
- sp->string (sp, g_mime_message_get_date_as_string (message));
+ date_string = g_mime_message_get_date_as_string (message);
+ sp->string (sp, date_string);
+ g_free (date_string);
}
sp->end (sp);
notmuch_message_get_flag (message, NOTMUCH_MESSAGE_FLAG_EXCLUDED) ? 1 : 0,
notmuch_message_get_filename (message));
} else {
- GMimeContentDisposition *disposition = g_mime_object_get_content_disposition (meta);
+ const char *disposition = _get_disposition (meta);
const char *cid = g_mime_object_get_content_id (meta);
const char *filename = leaf ?
g_mime_part_get_filename (GMIME_PART (node->part)) : NULL;
if (disposition &&
- strcasecmp (g_mime_content_disposition_get_disposition (disposition),
- GMIME_DISPOSITION_ATTACHMENT) == 0)
+ strcasecmp (disposition, GMIME_DISPOSITION_ATTACHMENT) == 0)
part_type = "attachment";
else
part_type = "part";
if (GMIME_IS_MESSAGE (node->part)) {
GMimeMessage *message = GMIME_MESSAGE (node->part);
InternetAddressList *recipients;
- const char *recipients_string;
+ char *recipients_string;
+ char *date_string;
printf ("\fheader{\n");
if (node->envelope_file)
recipients_string = internet_address_list_to_string (recipients, 0);
if (recipients_string)
printf ("To: %s\n", recipients_string);
+ g_free (recipients_string);
recipients = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_CC);
recipients_string = internet_address_list_to_string (recipients, 0);
if (recipients_string)
printf ("Cc: %s\n", recipients_string);
- printf ("Date: %s\n", g_mime_message_get_date_as_string (message));
+ g_free (recipients_string);
+ date_string = g_mime_message_get_date_as_string (message);
+ printf ("Date: %s\n", date_string);
+ g_free (date_string);
printf ("\fheader}\n");
printf ("\fbody{\n");
GMimeObject *meta = node->envelope_part ?
GMIME_OBJECT (node->envelope_part) : node->part;
GMimeContentType *content_type = g_mime_object_get_content_type (meta);
+ const char *disposition = _get_disposition (meta);
const char *cid = g_mime_object_get_content_id (meta);
const char *filename = GMIME_IS_PART (node->part) ?
g_mime_part_get_filename (GMIME_PART (node->part)) : NULL;
sp->map_key (sp, "content-type");
sp->string (sp, g_mime_content_type_to_string (content_type));
+ if (disposition) {
+ sp->map_key (sp, "content-disposition");
+ sp->string (sp, disposition);
+ }
+
if (cid) {
sp->map_key (sp, "content-id");
sp->string (sp, cid);