Don't default 'me' to the source account until after we've tried to detect

2002-10-02  Jeffrey Stedfast  <fejj@ximian.com>

	* mail-callbacks.c (mail_generate_reply): Don't default 'me' to
	the source account until after we've tried to detect the account
	based on recipients. When adding accounts to the account hash, if
	any accounts have identical email addresses, the ones that are
	enabled take precedence over ones that aren't. This will hopefully
	make everyone happy with reply account picking. Fixes bug #31693.

svn path=/trunk/; revision=18326
This commit is contained in:
Jeffrey Stedfast
2002-10-04 18:12:20 +00:00
committed by Jeffrey Stedfast
parent a57815af6b
commit e23ff89a60
2 changed files with 45 additions and 13 deletions

View File

@ -1,3 +1,12 @@
2002-10-02 Jeffrey Stedfast <fejj@ximian.com>
* mail-callbacks.c (mail_generate_reply): Don't default 'me' to
the source account until after we've tried to detect the account
based on recipients. When adding accounts to the account hash, if
any accounts have identical email addresses, the ones that are
enabled take precedence over ones that aren't. This will hopefully
make everyone happy with reply account picking. Fixes bug #31693.
2002-10-01 Larry Ewing <lewing@ximian.com>
* mail-display.c (drag_data_get_cb): add support for dragging the

View File

@ -1008,7 +1008,7 @@ mail_generate_reply (CamelFolder *folder, CamelMimeMessage *message, const char
const char *name = NULL, *address = NULL, *source = NULL;
const char *message_id, *references, *reply_addr = NULL;
char *text = NULL, *subject, date_str[100], *format;
const MailConfigAccount *account, *me = NULL;
const MailConfigAccount *def, *account, *me = NULL;
const GSList *l, *accounts = NULL;
GHashTable *account_hash = NULL;
GList *to = NULL, *cc = NULL;
@ -1035,13 +1035,37 @@ mail_generate_reply (CamelFolder *folder, CamelMimeMessage *message, const char
/* Set the recipients */
accounts = mail_config_get_accounts ();
account_hash = g_hash_table_new (g_strcase_hash, g_strcase_equal);
/* add the default account to the hash first */
if ((def = mail_config_get_default_account ())) {
if (def->id->address)
g_hash_table_insert (account_hash, (char *) def->id->address, (void *) def);
}
l = accounts;
while (l) {
account = l->data;
if (account->id->address)
g_hash_table_insert (account_hash, (char *) account->id->address, (void *) account);
if (account->id->address) {
const MailConfigAccount *acnt;
/* Accounts with identical email addresses that are enabled
* take precedence over the accounts that aren't. If all
* accounts with matching email addresses are disabled, then
* the first one in the list takes precedence. The default
* account always takes precedence no matter what.
*/
acnt = g_hash_table_lookup (account_hash, account->id->address);
if (acnt && acnt != def && !acnt->source->enabled && account->source->enabled) {
g_hash_table_remove (account_hash, acnt->id->address);
acnt = NULL;
}
if (!acnt)
g_hash_table_insert (account_hash, (char *) account->id->address, (void *) account);
}
l = l->next;
}
@ -1050,11 +1074,6 @@ mail_generate_reply (CamelFolder *folder, CamelMimeMessage *message, const char
mail_ignore_address (composer, to_addrs);
mail_ignore_address (composer, cc_addrs);
/* default 'me' to the source account... */
source = camel_mime_message_get_source (message);
if (source)
me = mail_config_get_account_by_source_url (source);
determine_recipients:
if (mode == REPLY_LIST) {
CamelMessageInfo *info;
@ -1112,8 +1131,7 @@ mail_generate_reply (CamelFolder *folder, CamelMimeMessage *message, const char
}
}
if (!me)
me = guess_me (to_addrs, cc_addrs, account_hash);
me = guess_me (to_addrs, cc_addrs, account_hash);
} else {
GHashTable *rcpt_hash;
EDestination *dest;
@ -1153,8 +1171,7 @@ mail_generate_reply (CamelFolder *folder, CamelMimeMessage *message, const char
cc = g_list_remove_link (cc, to);
}
} else {
if (!me)
me = guess_me (to_addrs, cc_addrs, account_hash);
me = guess_me (to_addrs, cc_addrs, account_hash);
}
g_hash_table_destroy (rcpt_hash);
@ -1162,6 +1179,12 @@ mail_generate_reply (CamelFolder *folder, CamelMimeMessage *message, const char
g_hash_table_destroy (account_hash);
if (!me) {
/* default 'me' to the source account... */
if ((source = camel_mime_message_get_source (message)))
me = mail_config_get_account_by_source_url (source);
}
/* set body text here as we want all ignored words to take effect */
switch (mail_config_get_default_reply_style ()) {
case MAIL_CONFIG_REPLY_DO_NOT_QUOTE: