notmuch reply: Don't reply to address belonging to the user.

Here's our first real advantage of having a configuration system.
We get to omit our own addresses from the recipient list of any
replies.
This commit is contained in:
Carl Worth 2009-11-11 21:18:15 -08:00
parent 13569ad6c9
commit dbe41eab82

View file

@ -71,8 +71,30 @@ reply_part(GMimeObject *part, int *part_count)
} }
} }
/* Is the given address configured as one of the user's "personal" or
* "other" addresses. */
static int
address_is_users (const char *address, notmuch_config_t *config)
{
const char *primary;
char **other;
unsigned int i, other_len;
primary = notmuch_config_get_user_primary_email (config);
if (strcmp (primary, address) == 0)
return 1;
other = notmuch_config_get_user_other_email (config, &other_len);
for (i = 0; i < other_len; i++)
if (strcmp (other[i], address) == 0)
return 1;
return 0;
}
static void static void
add_recipients_for_address_list (GMimeMessage *message, add_recipients_for_address_list (GMimeMessage *message,
notmuch_config_t *config,
GMimeRecipientType type, GMimeRecipientType type,
InternetAddressList *list) InternetAddressList *list)
{ {
@ -90,7 +112,8 @@ add_recipients_for_address_list (GMimeMessage *message,
if (group_list == NULL) if (group_list == NULL)
continue; continue;
add_recipients_for_address_list (message, type, group_list); add_recipients_for_address_list (message, config,
type, group_list);
} else { } else {
InternetAddressMailbox *mailbox; InternetAddressMailbox *mailbox;
const char *name; const char *name;
@ -101,6 +124,7 @@ add_recipients_for_address_list (GMimeMessage *message,
name = internet_address_get_name (address); name = internet_address_get_name (address);
addr = internet_address_mailbox_get_addr (mailbox); addr = internet_address_mailbox_get_addr (mailbox);
if (! address_is_users (addr, config))
g_mime_message_add_recipient (message, type, name, addr); g_mime_message_add_recipient (message, type, name, addr);
} }
} }
@ -108,6 +132,7 @@ add_recipients_for_address_list (GMimeMessage *message,
static void static void
add_recipients_for_string (GMimeMessage *message, add_recipients_for_string (GMimeMessage *message,
notmuch_config_t *config,
GMimeRecipientType type, GMimeRecipientType type,
const char *recipients) const char *recipients)
{ {
@ -117,7 +142,7 @@ add_recipients_for_string (GMimeMessage *message,
if (list == NULL) if (list == NULL)
return; return;
add_recipients_for_address_list (message, type, list); add_recipients_for_address_list (message, config, type, list);
} }
int int
@ -194,7 +219,7 @@ notmuch_reply_command (void *ctx, int argc, char *argv[])
for (i = 0; i < ARRAY_SIZE (reply_to_map); i++) { for (i = 0; i < ARRAY_SIZE (reply_to_map); i++) {
recipients = notmuch_message_get_header (message, recipients = notmuch_message_get_header (message,
reply_to_map[i].header); reply_to_map[i].header);
add_recipients_for_string (reply, add_recipients_for_string (reply, config,
reply_to_map[i].recipient_type, reply_to_map[i].recipient_type,
recipients); recipients);
} }