[PATCH 1/9] lib: read "property" terms from messages.
[notmuch-archives.git] / 5e / 76cbb883c61774903ff75dbcaab7d5a0151ce2
1 Return-Path: <amthrax@drake.mit.edu>\r
2 X-Original-To: notmuch@notmuchmail.org\r
3 Delivered-To: notmuch@notmuchmail.org\r
4 Received: from localhost (localhost [127.0.0.1])\r
5         by olra.theworths.org (Postfix) with ESMTP id CA737431FC9\r
6         for <notmuch@notmuchmail.org>; Tue, 27 Mar 2012 14:59:59 -0700 (PDT)\r
7 X-Virus-Scanned: Debian amavisd-new at olra.theworths.org\r
8 X-Spam-Flag: NO\r
9 X-Spam-Score: -0.7\r
10 X-Spam-Level: \r
11 X-Spam-Status: No, score=-0.7 tagged_above=-999 required=5\r
12         tests=[RCVD_IN_DNSWL_LOW=-0.7] autolearn=disabled\r
13 Received: from olra.theworths.org ([127.0.0.1])\r
14         by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024)\r
15         with ESMTP id hZ4ZwYNkFyVr for <notmuch@notmuchmail.org>;\r
16         Tue, 27 Mar 2012 14:59:58 -0700 (PDT)\r
17 Received: from dmz-mailsec-scanner-4.mit.edu (DMZ-MAILSEC-SCANNER-4.MIT.EDU\r
18         [18.9.25.15])\r
19         by olra.theworths.org (Postfix) with ESMTP id AB160431FC7\r
20         for <notmuch@notmuchmail.org>; Tue, 27 Mar 2012 14:59:57 -0700 (PDT)\r
21 X-AuditID: 1209190f-b7f8a6d000000914-33-4f72385c6e03\r
22 Received: from mailhub-auth-2.mit.edu ( [18.7.62.36])\r
23         by dmz-mailsec-scanner-4.mit.edu (Symantec Messaging Gateway) with SMTP\r
24         id 75.1A.02324.C58327F4; Tue, 27 Mar 2012 17:59:56 -0400 (EDT)\r
25 Received: from outgoing.mit.edu (OUTGOING-AUTH.MIT.EDU [18.7.22.103])\r
26         by mailhub-auth-2.mit.edu (8.13.8/8.9.2) with ESMTP id q2RLxtbr013555; \r
27         Tue, 27 Mar 2012 17:59:55 -0400\r
28 Received: from drake.mit.edu (26-4-166.dynamic.csail.mit.edu [18.26.4.166])\r
29         (authenticated bits=0)\r
30         (User authenticated as amdragon@ATHENA.MIT.EDU)\r
31         by outgoing.mit.edu (8.13.6/8.12.4) with ESMTP id q2RLxsYX014143\r
32         (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NOT);\r
33         Tue, 27 Mar 2012 17:59:55 -0400 (EDT)\r
34 Received: from amthrax by drake.mit.edu with local (Exim 4.77)\r
35         (envelope-from <amthrax@drake.mit.edu>)\r
36         id 1SCeQk-0008Vs-Mk; Tue, 27 Mar 2012 17:59:54 -0400\r
37 From: Austin Clements <amdragon@MIT.EDU>\r
38 To: notmuch@notmuchmail.org\r
39 Subject: [PATCH v2 2/3] reply: Convert default reply format to self-recursive\r
40         style\r
41 Date: Tue, 27 Mar 2012 17:59:51 -0400\r
42 Message-Id: <1332885592-32668-3-git-send-email-amdragon@mit.edu>\r
43 X-Mailer: git-send-email 1.7.9.1\r
44 In-Reply-To: <1332885592-32668-1-git-send-email-amdragon@mit.edu>\r
45 References: <1332473647-9133-1-git-send-email-amdragon@mit.edu>\r
46         <1332885592-32668-1-git-send-email-amdragon@mit.edu>\r
47 X-Brightmail-Tracker:\r
48  H4sIAAAAAAAAA+NgFtrEIsWRmVeSWpSXmKPExsUixG6nohtjUeRvMOupusX1mzOZHRg9nq26\r
49         xRzAGMVlk5Kak1mWWqRvl8CV8fnnc7aC3UYVB/uOszYwbtHsYuTkkBAwkZjz9gszhC0mceHe\r
50         erYuRi4OIYF9jBKrV7xnhXA2MEr8ednADuEcZ5KY0nSSGcKZzyjRMmUqK0g/m4CGxLb9yxlB\r
51         bBEBaYmdd2cDxTk4mAXUJP50qYCEhQWCJabdXcsOYrMIqErMmTmREaSEV8BBYt5hcYgrFCSe\r
52         rTvOBGJzCjhKXN31BswWEiiTuHPpNOsERv4FjAyrGGVTcqt0cxMzc4pTk3WLkxPz8lKLdE30\r
53         cjNL9FJTSjcxgoKGU5J/B+O3g0qHGAU4GJV4eJUZivyFWBPLiitzDzFKcjApifIqmAKF+JLy\r
54         UyozEosz4otKc1KLDzFKcDArifBqRxX6C/GmJFZWpRblw6SkOViUxHnVtN75CQmkJ5akZqem\r
55         FqQWwWRlODiUJHjbzIGGChalpqdWpGXmlCCkmTg4QYbzAA3/bAZUw1tckJhbnJkOkT/FqCgl\r
56         zhsF0iwAksgozYPrhUX1K0ZxoFeEefNAqniACQGu+xXQYCagwUuO5IMMLklESEk1MM6vf7OW\r
57         aW1YCUeQ0XuHuWeXLF1gqHh4d8/OF8vPJL55mtkg7rF5C9ekLNHVkbPrdqoUC7Worsk5Uxud\r
58         bS4tLujeVlRcX8GSX7gi/HLJmcbaLQfrP6u85TtvK/1oR6I219UWJcWgI3e2Jn1wdWEuMpGr\r
59         WOLheWu//QUV8W4Fn1ein+NjBJfXKbEUZyQaajEXFScCAP3rGYHFAgAA\r
60 X-BeenThere: notmuch@notmuchmail.org\r
61 X-Mailman-Version: 2.1.13\r
62 Precedence: list\r
63 List-Id: "Use and development of the notmuch mail system."\r
64         <notmuch.notmuchmail.org>\r
65 List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,\r
66         <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>\r
67 List-Archive: <http://notmuchmail.org/pipermail/notmuch>\r
68 List-Post: <mailto:notmuch@notmuchmail.org>\r
69 List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>\r
70 List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,\r
71         <mailto:notmuch-request@notmuchmail.org?subject=subscribe>\r
72 X-List-Received-Date: Tue, 27 Mar 2012 22:00:00 -0000\r
73 \r
74 This re-arranges the default reply formatter code to use the\r
75 mime_node_t abstraction.  There are no semantic changes.\r
76 ---\r
77  notmuch-reply.c |  123 +++++++++++++++++++++----------------------------------\r
78  1 files changed, 47 insertions(+), 76 deletions(-)\r
79 \r
80 diff --git a/notmuch-reply.c b/notmuch-reply.c\r
81 index 2f5ed3d..84a1220 100644\r
82 --- a/notmuch-reply.c\r
83 +++ b/notmuch-reply.c\r
84 @@ -24,28 +24,6 @@\r
85  #include "gmime-filter-headers.h"\r
86  \r
87  static void\r
88 -reply_headers_message_part (GMimeMessage *message);\r
89 -\r
90 -static void\r
91 -reply_part_content (GMimeObject *part);\r
92 -\r
93 -static const notmuch_show_format_t format_reply = {\r
94 -    "", NULL,\r
95 -       "", NULL,\r
96 -           "", NULL, reply_headers_message_part, ">\n",\r
97 -           "",\r
98 -               NULL,\r
99 -               NULL,\r
100 -               NULL,\r
101 -               reply_part_content,\r
102 -               NULL,\r
103 -               "",\r
104 -           "",\r
105 -       "", "",\r
106 -    ""\r
107 -};\r
108 -\r
109 -static void\r
110  show_reply_headers (GMimeMessage *message)\r
111  {\r
112      GMimeStream *stream_stdout = NULL, *stream_filter = NULL;\r
113 @@ -65,66 +43,55 @@ show_reply_headers (GMimeMessage *message)\r
114  }\r
115  \r
116  static void\r
117 -reply_headers_message_part (GMimeMessage *message)\r
118 +format_part_reply (mime_node_t *node)\r
119  {\r
120 -    InternetAddressList *recipients;\r
121 -    const char *recipients_string;\r
122 -\r
123 -    printf ("> From: %s\n", g_mime_message_get_sender (message));\r
124 -    recipients = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_TO);\r
125 -    recipients_string = internet_address_list_to_string (recipients, 0);\r
126 -    if (recipients_string)\r
127 -       printf ("> To: %s\n",\r
128 -               recipients_string);\r
129 -    recipients = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_CC);\r
130 -    recipients_string = internet_address_list_to_string (recipients, 0);\r
131 -    if (recipients_string)\r
132 -       printf ("> Cc: %s\n",\r
133 -               recipients_string);\r
134 -    printf ("> Subject: %s\n", g_mime_message_get_subject (message));\r
135 -    printf ("> Date: %s\n", g_mime_message_get_date_as_string (message));\r
136 -}\r
137 -\r
138 -\r
139 -static void\r
140 -reply_part_content (GMimeObject *part)\r
141 -{\r
142 -    GMimeContentType *content_type = g_mime_object_get_content_type (GMIME_OBJECT (part));\r
143 -    GMimeContentDisposition *disposition = g_mime_object_get_content_disposition (part);\r
144 +    int i;\r
145  \r
146 -    if (g_mime_content_type_is_type (content_type, "multipart", "*") ||\r
147 -       g_mime_content_type_is_type (content_type, "message", "rfc822"))\r
148 -    {\r
149 -       /* Output nothing, since multipart subparts will be handled individually. */\r
150 -    }\r
151 -    else if (g_mime_content_type_is_type (content_type, "application", "pgp-encrypted") ||\r
152 -            g_mime_content_type_is_type (content_type, "application", "pgp-signature"))\r
153 -    {\r
154 -       /* Ignore PGP/MIME cruft parts */\r
155 -    }\r
156 -    else if (g_mime_content_type_is_type (content_type, "text", "*") &&\r
157 -       !g_mime_content_type_is_type (content_type, "text", "html"))\r
158 -    {\r
159 -       GMimeStream *stream_stdout = g_mime_stream_file_new (stdout);\r
160 -       g_mime_stream_file_set_owner (GMIME_STREAM_FILE (stream_stdout), FALSE);\r
161 -       show_text_part_content (part, stream_stdout, NOTMUCH_SHOW_TEXT_PART_REPLY);\r
162 -       g_object_unref(stream_stdout);\r
163 -    }\r
164 -    else\r
165 -    {\r
166 -       if (disposition &&\r
167 -           strcmp (disposition->disposition, GMIME_DISPOSITION_ATTACHMENT) == 0)\r
168 -       {\r
169 -           const char *filename = g_mime_part_get_filename (GMIME_PART (part));\r
170 +    if (GMIME_IS_MESSAGE (node->part)) {\r
171 +       GMimeMessage *message = GMIME_MESSAGE (node->part);\r
172 +       InternetAddressList *recipients;\r
173 +       const char *recipients_string;\r
174 +\r
175 +       printf ("> From: %s\n", g_mime_message_get_sender (message));\r
176 +       recipients = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_TO);\r
177 +       recipients_string = internet_address_list_to_string (recipients, 0);\r
178 +       if (recipients_string)\r
179 +           printf ("> To: %s\n",\r
180 +                   recipients_string);\r
181 +       recipients = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_CC);\r
182 +       recipients_string = internet_address_list_to_string (recipients, 0);\r
183 +       if (recipients_string)\r
184 +           printf ("> Cc: %s\n",\r
185 +                   recipients_string);\r
186 +       printf ("> Subject: %s\n", g_mime_message_get_subject (message));\r
187 +       printf ("> Date: %s\n", g_mime_message_get_date_as_string (message));\r
188 +       printf (">\n");\r
189 +    } else if (GMIME_IS_PART (node->part)) {\r
190 +       GMimeContentType *content_type = g_mime_object_get_content_type (node->part);\r
191 +       GMimeContentDisposition *disposition = g_mime_object_get_content_disposition (node->part);\r
192 +\r
193 +       if (g_mime_content_type_is_type (content_type, "application", "pgp-encrypted") ||\r
194 +           g_mime_content_type_is_type (content_type, "application", "pgp-signature")) {\r
195 +           /* Ignore PGP/MIME cruft parts */\r
196 +       } else if (g_mime_content_type_is_type (content_type, "text", "*") &&\r
197 +                  !g_mime_content_type_is_type (content_type, "text", "html")) {\r
198 +           GMimeStream *stream_stdout = g_mime_stream_file_new (stdout);\r
199 +           g_mime_stream_file_set_owner (GMIME_STREAM_FILE (stream_stdout), FALSE);\r
200 +           show_text_part_content (node->part, stream_stdout, NOTMUCH_SHOW_TEXT_PART_REPLY);\r
201 +           g_object_unref(stream_stdout);\r
202 +       } else if (disposition &&\r
203 +                  strcmp (disposition->disposition, GMIME_DISPOSITION_ATTACHMENT) == 0) {\r
204 +           const char *filename = g_mime_part_get_filename (GMIME_PART (node->part));\r
205             printf ("Attachment: %s (%s)\n", filename,\r
206                     g_mime_content_type_to_string (content_type));\r
207 -       }\r
208 -       else\r
209 -       {\r
210 +       } else {\r
211             printf ("Non-text part: %s\n",\r
212                     g_mime_content_type_to_string (content_type));\r
213         }\r
214      }\r
215 +\r
216 +    for (i = 0; i < node->nchildren; i++)\r
217 +       format_part_reply (mime_node_child (node, i));\r
218  }\r
219  \r
220  /* Is the given address configured as one of the user's "personal" or\r
221 @@ -550,7 +517,7 @@ notmuch_reply_format_default(void *ctx,\r
222      GMimeMessage *reply;\r
223      notmuch_messages_t *messages;\r
224      notmuch_message_t *message;\r
225 -    const notmuch_show_format_t *format = &format_reply;\r
226 +    mime_node_t *root;\r
227  \r
228      for (messages = notmuch_query_search_messages (query);\r
229          notmuch_messages_valid (messages);\r
230 @@ -577,7 +544,11 @@ notmuch_reply_format_default(void *ctx,\r
231                 notmuch_message_get_header (message, "date"),\r
232                 notmuch_message_get_header (message, "from"));\r
233  \r
234 -       show_message_body (message, format, params);\r
235 +       if (mime_node_open (ctx, message, params->cryptoctx, params->decrypt,\r
236 +                           &root) == NOTMUCH_STATUS_SUCCESS) {\r
237 +           format_part_reply (mime_node_child (root, 0));\r
238 +           talloc_free (root);\r
239 +       }\r
240  \r
241         notmuch_message_destroy (message);\r
242      }\r
243 -- \r
244 1.7.9.1\r
245 \r