]> git.notmuchmail.org Git - notmuch/blob - util/gmime-extra.c
8590c55d184b747799f7a30b545963e748f5de10
[notmuch] / util / gmime-extra.c
1 #include "gmime-extra.h"
2
3 GMimeStream *
4 g_mime_stream_stdout_new()
5 {
6     GMimeStream *stream_stdout = NULL;
7     GMimeStream *stream_buffered = NULL;
8
9     stream_stdout = g_mime_stream_pipe_new (STDOUT_FILENO);
10     if (!stream_stdout)
11         return NULL;
12
13     g_mime_stream_pipe_set_owner (GMIME_STREAM_PIPE (stream_stdout), FALSE);
14
15     stream_buffered = g_mime_stream_buffer_new (stream_stdout, GMIME_STREAM_BUFFER_BLOCK_WRITE);
16
17     g_object_unref (stream_stdout);
18
19     return stream_buffered;
20 }
21
22 /**
23  * copy a glib string into a talloc context, and free it.
24  */
25 static char*
26 g_string_talloc_strdup (void *ctx, char *g_string)
27 {
28     char *new_str = talloc_strdup (ctx, g_string);
29     g_free (g_string);
30     return new_str;
31 }
32
33 #if (GMIME_MAJOR_VERSION < 3)
34
35 char *
36 g_mime_message_get_date_string (void *ctx, GMimeMessage *message)
37 {
38     char *date = g_mime_message_get_date_as_string (message);
39     return g_string_talloc_strdup (ctx, date);
40 }
41
42 InternetAddressList *
43 g_mime_message_get_from (GMimeMessage *message)
44 {
45     return internet_address_list_parse_string (g_mime_message_get_sender (message));
46 }
47
48 const char *
49 g_mime_message_get_from_string (GMimeMessage *message) {
50     return  g_mime_message_get_sender (message);
51 }
52
53 InternetAddressList *
54 g_mime_message_get_reply_to_list (GMimeMessage *message)
55 {
56     const char *reply_to;
57
58     reply_to = g_mime_message_get_reply_to (message);
59     if (reply_to && *reply_to)
60         return internet_address_list_parse_string (reply_to);
61     else
62         return NULL;
63 }
64
65 /**
66  * return talloc allocated reply-to string
67  */
68 char *
69 g_mime_message_get_reply_to_string (void *ctx, GMimeMessage *message)
70 {
71     return talloc_strdup(ctx, g_mime_message_get_reply_to (message));
72 }
73
74
75 #else /* GMime >= 3.0 */
76
77 char *
78 g_mime_message_get_date_string (void *ctx, GMimeMessage *message)
79 {
80     GDateTime* parsed_date = g_mime_message_get_date (message);
81     if (parsed_date) {
82         char *date = g_mime_utils_header_format_date (parsed_date);
83         return g_string_talloc_strdup (ctx, date);
84     } else {
85         return talloc_strdup(ctx, "Thu, 01 Jan 1970 00:00:00 +0000");
86     }
87 }
88
89 InternetAddressList *
90 g_mime_message_get_reply_to_list(GMimeMessage *message)
91 {
92     return g_mime_message_get_reply_to (message);
93 }
94
95 const char *
96 g_mime_message_get_from_string (GMimeMessage *message)
97 {
98     return g_mime_object_get_header (GMIME_OBJECT (message), "From");
99 }
100
101 char *
102 g_mime_message_get_reply_to_string (void *ctx, GMimeMessage *message)
103 {
104     InternetAddressList *list = g_mime_message_get_reply_to (message);
105     return g_string_talloc_strdup (ctx, internet_address_list_to_string (list, NULL, 0));
106 }
107
108
109 #endif