mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-21 18:38:08 +01:00
notmuch-reply.c: Factor adding recipients into common function
This code was already duplicated. We move it to a new, shared add_recipients_from_message function, in preparation for more sophisticated mailing list logic. Signed-off-by: Jed Brown <jed@59A2.org>
This commit is contained in:
parent
bcba87a3e2
commit
fb50f31048
1 changed files with 45 additions and 43 deletions
|
@ -23,17 +23,6 @@
|
||||||
#include "notmuch-client.h"
|
#include "notmuch-client.h"
|
||||||
#include "gmime-filter-reply.h"
|
#include "gmime-filter-reply.h"
|
||||||
|
|
||||||
static const struct {
|
|
||||||
const char *header;
|
|
||||||
const char *fallback;
|
|
||||||
GMimeRecipientType recipient_type;
|
|
||||||
} reply_to_map[] = {
|
|
||||||
{ "reply-to", "from", GMIME_RECIPIENT_TYPE_TO },
|
|
||||||
{ "to", NULL, GMIME_RECIPIENT_TYPE_TO },
|
|
||||||
{ "cc", NULL, GMIME_RECIPIENT_TYPE_CC },
|
|
||||||
{ "bcc", NULL, GMIME_RECIPIENT_TYPE_BCC }
|
|
||||||
};
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
reply_part_content (GMimeObject *part)
|
reply_part_content (GMimeObject *part)
|
||||||
{
|
{
|
||||||
|
@ -199,16 +188,56 @@ add_recipients_for_string (GMimeMessage *message,
|
||||||
return add_recipients_for_address_list (message, config, type, list);
|
return add_recipients_for_address_list (message, config, type, list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Augments the recipients of reply from the headers of message.
|
||||||
|
*
|
||||||
|
* If any of the user's addresses were found in these headers, the first
|
||||||
|
* of these returned, otherwise NULL is returned.
|
||||||
|
*/
|
||||||
|
static const char *
|
||||||
|
add_recipients_from_message (GMimeMessage *reply,
|
||||||
|
notmuch_config_t *config,
|
||||||
|
notmuch_message_t *message)
|
||||||
|
{
|
||||||
|
static const struct {
|
||||||
|
const char *header;
|
||||||
|
const char *fallback;
|
||||||
|
GMimeRecipientType recipient_type;
|
||||||
|
} reply_to_map[] = {
|
||||||
|
{ "reply-to", "from", GMIME_RECIPIENT_TYPE_TO },
|
||||||
|
{ "to", NULL, GMIME_RECIPIENT_TYPE_TO },
|
||||||
|
{ "cc", NULL, GMIME_RECIPIENT_TYPE_CC },
|
||||||
|
{ "bcc", NULL, GMIME_RECIPIENT_TYPE_BCC }
|
||||||
|
};
|
||||||
|
const char *from_addr = NULL;
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE (reply_to_map); i++) {
|
||||||
|
const char *addr, *recipients;
|
||||||
|
|
||||||
|
recipients = notmuch_message_get_header (message,
|
||||||
|
reply_to_map[i].header);
|
||||||
|
if ((recipients == NULL || recipients[0] == '\0') && reply_to_map[i].fallback)
|
||||||
|
recipients = notmuch_message_get_header (message,
|
||||||
|
reply_to_map[i].fallback);
|
||||||
|
|
||||||
|
addr = add_recipients_for_string (reply, config,
|
||||||
|
reply_to_map[i].recipient_type,
|
||||||
|
recipients);
|
||||||
|
if (from_addr == NULL)
|
||||||
|
from_addr = addr;
|
||||||
|
}
|
||||||
|
return from_addr;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
notmuch_reply_format_default(void *ctx, notmuch_config_t *config, notmuch_query_t *query)
|
notmuch_reply_format_default(void *ctx, notmuch_config_t *config, notmuch_query_t *query)
|
||||||
{
|
{
|
||||||
GMimeMessage *reply;
|
GMimeMessage *reply;
|
||||||
notmuch_messages_t *messages;
|
notmuch_messages_t *messages;
|
||||||
notmuch_message_t *message;
|
notmuch_message_t *message;
|
||||||
const char *subject, *recipients, *from_addr = NULL;
|
const char *subject, *from_addr = NULL;
|
||||||
const char *in_reply_to, *orig_references, *references;
|
const char *in_reply_to, *orig_references, *references;
|
||||||
char *reply_headers;
|
char *reply_headers;
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
for (messages = notmuch_query_search_messages (query);
|
for (messages = notmuch_query_search_messages (query);
|
||||||
notmuch_messages_has_more (messages);
|
notmuch_messages_has_more (messages);
|
||||||
|
@ -229,21 +258,7 @@ notmuch_reply_format_default(void *ctx, notmuch_config_t *config, notmuch_query_
|
||||||
subject = talloc_asprintf (ctx, "Re: %s", subject);
|
subject = talloc_asprintf (ctx, "Re: %s", subject);
|
||||||
g_mime_message_set_subject (reply, subject);
|
g_mime_message_set_subject (reply, subject);
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE (reply_to_map); i++) {
|
from_addr = add_recipients_from_message (reply, config, message);
|
||||||
const char *addr;
|
|
||||||
|
|
||||||
recipients = notmuch_message_get_header (message,
|
|
||||||
reply_to_map[i].header);
|
|
||||||
if ((recipients == NULL || recipients[0] == '\0') && reply_to_map[i].fallback)
|
|
||||||
recipients = notmuch_message_get_header (message,
|
|
||||||
reply_to_map[i].fallback);
|
|
||||||
|
|
||||||
addr = add_recipients_for_string (reply, config,
|
|
||||||
reply_to_map[i].recipient_type,
|
|
||||||
recipients);
|
|
||||||
if (from_addr == NULL)
|
|
||||||
from_addr = addr;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (from_addr == NULL)
|
if (from_addr == NULL)
|
||||||
from_addr = notmuch_config_get_user_primary_email (config);
|
from_addr = notmuch_config_get_user_primary_email (config);
|
||||||
|
@ -296,9 +311,8 @@ notmuch_reply_format_headers_only(void *ctx, notmuch_config_t *config, notmuch_q
|
||||||
GMimeMessage *reply;
|
GMimeMessage *reply;
|
||||||
notmuch_messages_t *messages;
|
notmuch_messages_t *messages;
|
||||||
notmuch_message_t *message;
|
notmuch_message_t *message;
|
||||||
const char *recipients, *in_reply_to, *orig_references, *references;
|
const char *in_reply_to, *orig_references, *references;
|
||||||
char *reply_headers;
|
char *reply_headers;
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
for (messages = notmuch_query_search_messages (query);
|
for (messages = notmuch_query_search_messages (query);
|
||||||
notmuch_messages_has_more (messages);
|
notmuch_messages_has_more (messages);
|
||||||
|
@ -332,19 +346,7 @@ notmuch_reply_format_headers_only(void *ctx, notmuch_config_t *config, notmuch_q
|
||||||
g_mime_object_set_header (GMIME_OBJECT (reply),
|
g_mime_object_set_header (GMIME_OBJECT (reply),
|
||||||
"References", references);
|
"References", references);
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE (reply_to_map); i++) {
|
(void)add_recipients_from_message (reply, config, message);
|
||||||
const char *addr;
|
|
||||||
|
|
||||||
recipients = notmuch_message_get_header (message,
|
|
||||||
reply_to_map[i].header);
|
|
||||||
if ((recipients == NULL || recipients[0] == '\0') && reply_to_map[i].fallback)
|
|
||||||
recipients = notmuch_message_get_header (message,
|
|
||||||
reply_to_map[i].fallback);
|
|
||||||
|
|
||||||
addr = add_recipients_for_string (reply, config,
|
|
||||||
reply_to_map[i].recipient_type,
|
|
||||||
recipients);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_mime_object_set_header (GMIME_OBJECT (reply), "Bcc",
|
g_mime_object_set_header (GMIME_OBJECT (reply), "Bcc",
|
||||||
notmuch_config_get_user_primary_email (config));
|
notmuch_config_get_user_primary_email (config));
|
||||||
|
|
Loading…
Reference in a new issue