diff options
Diffstat (limited to 'mail/mail-callbacks.c')
-rw-r--r-- | mail/mail-callbacks.c | 73 |
1 files changed, 35 insertions, 38 deletions
diff --git a/mail/mail-callbacks.c b/mail/mail-callbacks.c index f08c40f9d4..31d5afa65b 100644 --- a/mail/mail-callbacks.c +++ b/mail/mail-callbacks.c @@ -791,49 +791,44 @@ send_to_url (const char *url) static GList * list_add_addresses (GList *list, const CamelInternetAddress *cia, const GSList *accounts, - GHashTable *rcpt_hash, const MailConfigAccount **me, - const char *ignore_addr) + GHashTable *rcpt_hash, const MailConfigAccount **me) { + const MailConfigAccount *account; + GHashTable *account_hash; const char *name, *addr; const GSList *l; - gboolean notme; int i; + account_hash = g_hash_table_new (g_strcase_hash, g_strcase_equal); + l = accounts; + while (l) { + account = l->data; + g_hash_table_insert (account_hash, (char *) account->id->address, (void *) account); + l = l->next; + } + for (i = 0; camel_internet_address_get (cia, i, &name, &addr); i++) { - /* Make sure we don't want to ignore this address */ - if (!ignore_addr || g_strcasecmp (ignore_addr, addr)) { + /* Here I'll check to see if the cc:'d address is the address + of the sender, and if so, don't add it to the cc: list; this + is to fix Bugzilla bug #455. */ + account = g_hash_table_lookup (account_hash, addr); + if (account && me && !*me) + *me = account; + + if (!account && !g_hash_table_lookup (rcpt_hash, addr)) { + EDestination *dest; - /* Here I'll check to see if the cc:'d address is the address - of the sender, and if so, don't add it to the cc: list; this - is to fix Bugzilla bug #455. */ - notme = TRUE; - l = accounts; - while (l) { - const MailConfigAccount *acnt = l->data; - - if (!g_strcasecmp (acnt->id->address, addr)) { - notme = FALSE; - if (me && !*me) - *me = acnt; - break; - } - - l = l->next; - } + dest = e_destination_new (); + e_destination_set_name (dest, name); + e_destination_set_email (dest, addr); - if (notme && !g_hash_table_lookup (rcpt_hash, addr)) { - EDestination *dest; - - dest = e_destination_new (); - e_destination_set_name (dest, name); - e_destination_set_email (dest, addr); - - list = g_list_append (list, dest); - g_hash_table_insert (rcpt_hash, (char *) addr, GINT_TO_POINTER (1)); - } - } + list = g_list_append (list, dest); + g_hash_table_insert (rcpt_hash, (char *) addr, GINT_TO_POINTER (1)); + } } + g_hash_table_destroy (account_hash); + return list; } @@ -975,14 +970,16 @@ mail_generate_reply (CamelFolder *folder, CamelMimeMessage *message, const char } else { GHashTable *rcpt_hash; - rcpt_hash = g_hash_table_new (g_str_hash, g_str_equal); + rcpt_hash = g_hash_table_new (g_strcase_hash, g_strcase_equal); reply_to = camel_mime_message_get_reply_to (message); if (!reply_to) reply_to = camel_mime_message_get_from (message); if (reply_to) { - /* Get the Reply-To address so we can ignore references to it in the Cc: list */ - if (camel_internet_address_get (reply_to, 0, &name, &reply_addr)) { + int i; + + for (i = 0; camel_internet_address_get (reply_to, i, &name, &reply_addr); i++) { + /* Get the Reply-To address so we can ignore references to it in the Cc: list */ EDestination *dest; dest = e_destination_new (); @@ -994,8 +991,8 @@ mail_generate_reply (CamelFolder *folder, CamelMimeMessage *message, const char } if (mode == REPLY_ALL) { - cc = list_add_addresses (cc, to_addrs, accounts, rcpt_hash, &me, NULL); - cc = list_add_addresses (cc, cc_addrs, accounts, rcpt_hash, me ? NULL : &me, reply_addr); + cc = list_add_addresses (cc, to_addrs, accounts, rcpt_hash, &me); + cc = list_add_addresses (cc, cc_addrs, accounts, rcpt_hash, me ? NULL : &me); } else { me = guess_me (to_addrs, cc_addrs, accounts); } |