mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-22 02:48:08 +01:00
cli/reply: pass gmime message to Reply-To: redundancy detection
Use gmime message instead of notmuch message in Reply-To: redundancy detection. This allows us to easily iterate over all recipient email addresses accurately, instead of just scanning for strings in the relevant message headers. This improves the accuracy of the detection in many ways. This also makes the notmuch message parameter to get_sender() unused. This will be cleaned up in a follow-up patch to not make too many changes here at once.
This commit is contained in:
parent
932c0ff879
commit
e20a7a2fbc
1 changed files with 24 additions and 13 deletions
|
@ -230,13 +230,16 @@ scan_address_list (InternetAddressList *list,
|
||||||
/* Does the address in the Reply-To header of 'message' already appear
|
/* Does the address in the Reply-To header of 'message' already appear
|
||||||
* in either the 'To' or 'Cc' header of the message?
|
* in either the 'To' or 'Cc' header of the message?
|
||||||
*/
|
*/
|
||||||
static int
|
static notmuch_bool_t
|
||||||
reply_to_header_is_redundant (notmuch_message_t *message,
|
reply_to_header_is_redundant (GMimeMessage *message,
|
||||||
InternetAddressList *reply_to_list)
|
InternetAddressList *reply_to_list)
|
||||||
{
|
{
|
||||||
const char *to, *cc, *addr;
|
const char *addr, *reply_to;
|
||||||
InternetAddress *address;
|
InternetAddress *address;
|
||||||
InternetAddressMailbox *mailbox;
|
InternetAddressMailbox *mailbox;
|
||||||
|
InternetAddressList *recipients;
|
||||||
|
notmuch_bool_t ret = FALSE;
|
||||||
|
int i;
|
||||||
|
|
||||||
if (reply_to_list == NULL ||
|
if (reply_to_list == NULL ||
|
||||||
internet_address_list_length (reply_to_list) != 1)
|
internet_address_list_length (reply_to_list) != 1)
|
||||||
|
@ -246,22 +249,30 @@ reply_to_header_is_redundant (notmuch_message_t *message,
|
||||||
if (INTERNET_ADDRESS_IS_GROUP (address))
|
if (INTERNET_ADDRESS_IS_GROUP (address))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
mailbox = INTERNET_ADDRESS_MAILBOX (address);
|
||||||
|
reply_to = internet_address_mailbox_get_addr (mailbox);
|
||||||
|
|
||||||
|
recipients = g_mime_message_get_all_recipients (message);
|
||||||
|
|
||||||
|
for (i = 0; i < internet_address_list_length (recipients); i++) {
|
||||||
|
address = internet_address_list_get_address (recipients, i);
|
||||||
|
if (INTERNET_ADDRESS_IS_GROUP (address))
|
||||||
|
continue;
|
||||||
|
|
||||||
mailbox = INTERNET_ADDRESS_MAILBOX (address);
|
mailbox = INTERNET_ADDRESS_MAILBOX (address);
|
||||||
addr = internet_address_mailbox_get_addr (mailbox);
|
addr = internet_address_mailbox_get_addr (mailbox);
|
||||||
|
if (strcmp (addr, reply_to) == 0) {
|
||||||
to = notmuch_message_get_header (message, "to");
|
ret = TRUE;
|
||||||
cc = notmuch_message_get_header (message, "cc");
|
break;
|
||||||
|
}
|
||||||
if ((to && strstr (to, addr) != 0) ||
|
|
||||||
(cc && strstr (cc, addr) != 0))
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
g_object_unref (G_OBJECT (recipients));
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static InternetAddressList *get_sender(notmuch_message_t *message,
|
static InternetAddressList *get_sender(unused(notmuch_message_t *message),
|
||||||
GMimeMessage *mime_message)
|
GMimeMessage *mime_message)
|
||||||
{
|
{
|
||||||
const char *reply_to;
|
const char *reply_to;
|
||||||
|
@ -284,7 +295,7 @@ static InternetAddressList *get_sender(notmuch_message_t *message,
|
||||||
* will always appear in the reply if reply_all is true.
|
* will always appear in the reply if reply_all is true.
|
||||||
*/
|
*/
|
||||||
reply_to_list = internet_address_list_parse_string (reply_to);
|
reply_to_list = internet_address_list_parse_string (reply_to);
|
||||||
if (! reply_to_header_is_redundant (message, reply_to_list))
|
if (! reply_to_header_is_redundant (mime_message, reply_to_list))
|
||||||
return reply_to_list;
|
return reply_to_list;
|
||||||
|
|
||||||
g_object_unref (G_OBJECT (reply_to_list));
|
g_object_unref (G_OBJECT (reply_to_list));
|
||||||
|
|
Loading…
Reference in a new issue