Use the same logic as mail_generate_reply(). Fixes bug #34882

2002-12-03  Jeffrey Stedfast  <fejj@ximian.com>

	* mail-callbacks.c (guess_me_from_accounts): Use the same logic as
	mail_generate_reply(). Fixes bug #34882

	Fixes bug #34315

	* component-factory.c (message_rfc822_dnd): Return TRUE if we
	successfully handled all messages in the mbox stream, or FALSE
	otherwise.
	(destination_folder_handle_drop): For TEXT_URI_LIST, use the
	retval from message_rfc822_dnd() rather than relying on an
	exception, because one will not always necessarily be set. For
	MESSAGE_RFC822, also use the retval from message_rfc822_dnd().

svn path=/trunk/; revision=18995
This commit is contained in:
Jeffrey Stedfast
2002-12-03 17:42:44 +00:00
committed by Jeffrey Stedfast
parent 9ce8e76a13
commit 0fe83413d0
3 changed files with 63 additions and 16 deletions

View File

@ -1,3 +1,18 @@
2002-12-03 Jeffrey Stedfast <fejj@ximian.com>
* mail-callbacks.c (guess_me_from_accounts): Use the same logic as
mail_generate_reply(). Fixes bug #34882
Fixes bug #34315
* component-factory.c (message_rfc822_dnd): Return TRUE if we
successfully handled all messages in the mbox stream, or FALSE
otherwise.
(destination_folder_handle_drop): For TEXT_URI_LIST, use the
retval from message_rfc822_dnd() rather than relying on an
exception, because one will not always necessarily be set. For
MESSAGE_RFC822, also use the retval from message_rfc822_dnd().
2002-12-03 Not Zed <NotZed@Ximian.com>
* folder-browser.c (folder_browser_finalise/destroy): frobbed

View File

@ -508,10 +508,11 @@ destination_folder_handle_motion (EvolutionShellComponentDndDestinationFolder *f
return TRUE;
}
static void
static gboolean
message_rfc822_dnd (CamelFolder *dest, CamelStream *stream, CamelException *ex)
{
CamelMimeParser *mp;
gboolean handled = FALSE;
mp = camel_mime_parser_new ();
camel_mime_parser_scan_from (mp, TRUE);
@ -521,25 +522,32 @@ message_rfc822_dnd (CamelFolder *dest, CamelStream *stream, CamelException *ex)
CamelMessageInfo *info;
CamelMimeMessage *msg;
handled = TRUE;
msg = camel_mime_message_new ();
if (camel_mime_part_construct_from_parser (CAMEL_MIME_PART (msg), mp) == -1) {
camel_object_unref (CAMEL_OBJECT (msg));
camel_object_unref (msg);
handled = FALSE;
break;
}
/* append the message to the folder... */
info = g_new0 (CamelMessageInfo, 1);
camel_folder_append_message (dest, msg, info, NULL, ex);
camel_object_unref (CAMEL_OBJECT (msg));
camel_object_unref (msg);
if (camel_exception_is_set (ex))
if (camel_exception_is_set (ex)) {
handled = FALSE;
break;
}
/* skip over the FROM_END state */
camel_mime_parser_step (mp, 0, 0);
}
camel_object_unref (CAMEL_OBJECT (mp));
camel_object_unref (mp);
return handled;
}
static CORBA_boolean
@ -621,11 +629,9 @@ destination_folder_handle_drop (EvolutionShellComponentDndDestinationFolder *des
}
stream = camel_stream_fs_new_with_fd (fd);
message_rfc822_dnd (folder, stream, &ex);
camel_object_unref (CAMEL_OBJECT (stream));
camel_object_unref (CAMEL_OBJECT (folder));
retval = !camel_exception_is_set (&ex);
retval = message_rfc822_dnd (folder, stream, &ex);
camel_object_unref (stream);
camel_object_unref (folder);
if (action == GNOME_Evolution_ShellComponentDnd_ACTION_MOVE && retval)
unlink (url);
@ -647,9 +653,9 @@ destination_folder_handle_drop (EvolutionShellComponentDndDestinationFolder *des
camel_stream_write (stream, data->bytes._buffer, data->bytes._length);
camel_stream_reset (stream);
message_rfc822_dnd (folder, stream, &ex);
camel_object_unref (CAMEL_OBJECT (stream));
camel_object_unref (CAMEL_OBJECT (folder));
retval = message_rfc822_dnd (folder, stream, &ex);
camel_object_unref (stream);
camel_object_unref (folder);
break;
case ACCEPTED_DND_TYPE_X_EVOLUTION_MESSAGE:
folder = mail_tools_x_evolution_message_parse (data->bytes._buffer,
@ -663,7 +669,7 @@ destination_folder_handle_drop (EvolutionShellComponentDndDestinationFolder *des
action == GNOME_Evolution_ShellComponentDnd_ACTION_MOVE,
physical_uri, 0, NULL, NULL);
camel_object_unref (CAMEL_OBJECT (folder));
camel_object_unref (folder);
break;
default:
break;

View File

@ -869,15 +869,41 @@ guess_me (const CamelInternetAddress *to, const CamelInternetAddress *cc, GHashT
static const MailConfigAccount *
guess_me_from_accounts (const CamelInternetAddress *to, const CamelInternetAddress *cc, const GSList *accounts)
{
const MailConfigAccount *account;
const MailConfigAccount *account, *def;
GHashTable *account_hash;
const GSList *l;
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;
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;
}