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
add_recipients_for_address_list (GMimeMessage *message,
notmuch_config_t *config,
GMimeRecipientType type,
InternetAddressList *list)
{
@ -90,7 +112,8 @@ add_recipients_for_address_list (GMimeMessage *message,
if (group_list == NULL)
continue;
add_recipients_for_address_list (message, type, group_list);
add_recipients_for_address_list (message, config,
type, group_list);
} else {
InternetAddressMailbox *mailbox;
const char *name;
@ -101,6 +124,7 @@ add_recipients_for_address_list (GMimeMessage *message,
name = internet_address_get_name (address);
addr = internet_address_mailbox_get_addr (mailbox);
if (! address_is_users (addr, config))
g_mime_message_add_recipient (message, type, name, addr);
}
}
@ -108,6 +132,7 @@ add_recipients_for_address_list (GMimeMessage *message,
static void
add_recipients_for_string (GMimeMessage *message,
notmuch_config_t *config,
GMimeRecipientType type,
const char *recipients)
{
@ -117,7 +142,7 @@ add_recipients_for_string (GMimeMessage *message,
if (list == NULL)
return;
add_recipients_for_address_list (message, type, list);
add_recipients_for_address_list (message, config, type, list);
}
int
@ -194,7 +219,7 @@ notmuch_reply_command (void *ctx, int argc, char *argv[])
for (i = 0; i < ARRAY_SIZE (reply_to_map); i++) {
recipients = notmuch_message_get_header (message,
reply_to_map[i].header);
add_recipients_for_string (reply,
add_recipients_for_string (reply, config,
reply_to_map[i].recipient_type,
recipients);
}