[evolution] Bug #548778 - Use original location when replying in Search Folder



commit 20973f9281767871e8db287cf55aceae7f68b6df
Author: Milan Crha <mcrha redhat com>
Date:   Tue Jul 10 19:21:28 2012 +0200

    Bug #548778 - Use original location when replying in Search Folder

 libemail-engine/e-mail-session.c   |    2 +-
 libemail-engine/e-mail-utils.c     |   39 +++++++++++++++++++++++++----------
 libemail-engine/e-mail-utils.h     |   12 +++++++---
 mail/em-composer-utils.c           |    4 +-
 modules/itip-formatter/itip-view.c |    2 +-
 modules/mdn/evolution-mdn.c        |    4 +-
 6 files changed, 42 insertions(+), 21 deletions(-)
---
diff --git a/libemail-engine/e-mail-session.c b/libemail-engine/e-mail-session.c
index 881f680..850f9b0 100644
--- a/libemail-engine/e-mail-session.c
+++ b/libemail-engine/e-mail-session.c
@@ -1377,7 +1377,7 @@ mail_session_forward_to (CamelSession *session,
 
 	/* This returns a new ESource reference. */
 	source = em_utils_guess_mail_identity_with_recipients (
-		registry, message, folder);
+		registry, message, folder, NULL);
 	if (source == NULL) {
 		g_set_error (
 			error, CAMEL_ERROR, CAMEL_ERROR_GENERIC,
diff --git a/libemail-engine/e-mail-utils.c b/libemail-engine/e-mail-utils.c
index 20b96f7..fffe388 100644
--- a/libemail-engine/e-mail-utils.c
+++ b/libemail-engine/e-mail-utils.c
@@ -900,7 +900,8 @@ emu_free_mail_cache (void)
 
 static ESource *
 guess_mail_account_from_folder (ESourceRegistry *registry,
-                                CamelFolder *folder)
+                                CamelFolder *folder,
+				const gchar *message_uid)
 {
 	ESource *source;
 	CamelStore *store;
@@ -908,6 +909,18 @@ guess_mail_account_from_folder (ESourceRegistry *registry,
 
 	/* Lookup an ESource by CamelStore UID. */
 	store = camel_folder_get_parent_store (folder);
+	if (message_uid && folder && CAMEL_IS_VEE_STORE (store)) {
+		CamelMessageInfo *mi = camel_folder_get_message_info (folder, message_uid);
+		if (mi) {
+			CamelFolder *location;
+
+			location = camel_vee_folder_get_location (CAMEL_VEE_FOLDER (folder), (CamelVeeMessageInfo *) mi, NULL);
+			if (location)
+				store = camel_folder_get_parent_store (location);
+			camel_folder_free_message_info (folder, mi);
+		}
+	}
+
 	uid = camel_service_get_uid (CAMEL_SERVICE (store));
 	source = e_source_registry_ref_source (registry, uid);
 
@@ -954,7 +967,8 @@ guess_mail_account_from_message (ESourceRegistry *registry,
 ESource *
 em_utils_guess_mail_account (ESourceRegistry *registry,
                              CamelMimeMessage *message,
-                             CamelFolder *folder)
+                             CamelFolder *folder,
+			     const gchar *message_uid)
 {
 	ESource *source = NULL;
 	const gchar *newsgroups;
@@ -969,11 +983,11 @@ em_utils_guess_mail_account (ESourceRegistry *registry,
 	newsgroups = camel_medium_get_header (
 		CAMEL_MEDIUM (message), "Newsgroups");
 	if (folder != NULL && newsgroups != NULL)
-		source = guess_mail_account_from_folder (registry, folder);
+		source = guess_mail_account_from_folder (registry, folder, message_uid);
 
 	/* check for source folder */
 	if (source == NULL && folder != NULL)
-		source = guess_mail_account_from_folder (registry, folder);
+		source = guess_mail_account_from_folder (registry, folder, message_uid);
 
 	/* then message source */
 	if (source == NULL)
@@ -985,7 +999,8 @@ em_utils_guess_mail_account (ESourceRegistry *registry,
 ESource *
 em_utils_guess_mail_identity (ESourceRegistry *registry,
                               CamelMimeMessage *message,
-                              CamelFolder *folder)
+                              CamelFolder *folder,
+			      const gchar *message_uid)
 {
 	ESource *source;
 	ESourceExtension *extension;
@@ -998,7 +1013,7 @@ em_utils_guess_mail_identity (ESourceRegistry *registry,
 	if (folder != NULL)
 		g_return_val_if_fail (CAMEL_IS_FOLDER (folder), NULL);
 
-	source = em_utils_guess_mail_account (registry, message, folder);
+	source = em_utils_guess_mail_account (registry, message, folder, message_uid);
 
 	if (source == NULL)
 		return NULL;
@@ -1075,7 +1090,8 @@ mail_account_in_recipients (ESourceRegistry *registry,
 ESource *
 em_utils_guess_mail_account_with_recipients (ESourceRegistry *registry,
                                              CamelMimeMessage *message,
-                                             CamelFolder *folder)
+                                             CamelFolder *folder,
+					     const gchar *message_uid)
 {
 	ESource *source = NULL;
 	GHashTable *recipients;
@@ -1122,7 +1138,7 @@ em_utils_guess_mail_account_with_recipients (ESourceRegistry *registry,
 	 * in the list of To: or Cc: recipients. */
 
 	if (folder != NULL)
-		source = guess_mail_account_from_folder (registry, folder);
+		source = guess_mail_account_from_folder (registry, folder, message_uid);
 
 	if (source == NULL)
 		goto second_preference;
@@ -1158,7 +1174,7 @@ second_preference:
 		goto exit;
 
 	/* Last Preference: Defer to em_utils_guess_mail_account(). */
-	source = em_utils_guess_mail_account (registry, message, folder);
+	source = em_utils_guess_mail_account (registry, message, folder, message_uid);
 
 exit:
 	g_hash_table_destroy (recipients);
@@ -1169,7 +1185,8 @@ exit:
 ESource *
 em_utils_guess_mail_identity_with_recipients (ESourceRegistry *registry,
                                               CamelMimeMessage *message,
-                                              CamelFolder *folder)
+                                              CamelFolder *folder,
+					      const gchar *message_uid)
 {
 	ESource *source;
 	ESourceExtension *extension;
@@ -1180,7 +1197,7 @@ em_utils_guess_mail_identity_with_recipients (ESourceRegistry *registry,
 	g_return_val_if_fail (CAMEL_IS_MIME_MESSAGE (message), NULL);
 
 	source = em_utils_guess_mail_account_with_recipients (
-		registry, message, folder);
+		registry, message, folder, message_uid);
 
 	if (source == NULL)
 		return NULL;
diff --git a/libemail-engine/e-mail-utils.h b/libemail-engine/e-mail-utils.h
index 812dde2..7c993f6 100644
--- a/libemail-engine/e-mail-utils.h
+++ b/libemail-engine/e-mail-utils.h
@@ -43,18 +43,22 @@ CamelMimePart *	em_utils_contact_photo		(ESourceRegistry *registry,
 						 GCancellable *cancellable);
 ESource *	em_utils_guess_mail_account	(ESourceRegistry *registry,
 						 CamelMimeMessage *message,
-						 CamelFolder *folder);
+						 CamelFolder *folder,
+						 const gchar *message_uid);
 ESource *	em_utils_guess_mail_identity	(ESourceRegistry *registry,
 						 CamelMimeMessage *message,
-						 CamelFolder *folder);
+						 CamelFolder *folder,
+						 const gchar *message_uid);
 ESource *	em_utils_guess_mail_account_with_recipients
 						(ESourceRegistry *registry,
 						 CamelMimeMessage *message,
-						 CamelFolder *folder);
+						 CamelFolder *folder,
+						 const gchar *message_uid);
 ESource *	em_utils_guess_mail_identity_with_recipients
 						(ESourceRegistry *registry,
 						 CamelMimeMessage *message,
-						 CamelFolder *folder);
+						 CamelFolder *folder,
+						 const gchar *message_uid);
 ESource *	em_utils_ref_mail_identity_for_store
 						(ESourceRegistry *registry,
 						 CamelStore *store);
diff --git a/mail/em-composer-utils.c b/mail/em-composer-utils.c
index 71754a6..33b24ae 100644
--- a/mail/em-composer-utils.c
+++ b/mail/em-composer-utils.c
@@ -1961,7 +1961,7 @@ redirect_get_composer (EShell *shell,
 
 	/* This returns a new ESource reference. */
 	source = em_utils_guess_mail_identity_with_recipients (
-		registry, message, NULL);
+		registry, message, NULL, NULL);
 
 	if (source != NULL) {
 		identity_uid = e_source_dup_uid (source);
@@ -2899,7 +2899,7 @@ em_utils_reply_to_message (EShell *shell,
 
 	/* This returns a new ESource reference. */
 	source = em_utils_guess_mail_identity_with_recipients (
-		registry, message, folder);
+		registry, message, folder, message_uid);
 	if (source != NULL) {
 		identity_uid = e_source_dup_uid (source);
 		g_object_unref (source);
diff --git a/modules/itip-formatter/itip-view.c b/modules/itip-formatter/itip-view.c
index 1fddba9..86c2456 100644
--- a/modules/itip-formatter/itip-view.c
+++ b/modules/itip-formatter/itip-view.c
@@ -3167,7 +3167,7 @@ find_to_address (EMailPartItip *itip_part,
 		ESource *source;
 
 		source = em_utils_guess_mail_identity (
-			registry, itip_part->msg, itip_part->folder);
+			registry, itip_part->msg, itip_part->folder, itip_part->uid);
 
 		if (source != NULL) {
 			extension = e_source_get_extension (source, extension_name);
diff --git a/modules/mdn/evolution-mdn.c b/modules/mdn/evolution-mdn.c
index c30e875..cd6d3ed 100644
--- a/modules/mdn/evolution-mdn.c
+++ b/modules/mdn/evolution-mdn.c
@@ -513,7 +513,7 @@ mdn_message_loaded_cb (EMailReader *reader,
 
 	/* This returns a new ESource reference. */
 	source = em_utils_guess_mail_account_with_recipients (
-		registry, message, folder);
+		registry, message, folder, message_uid);
 	if (source == NULL)
 		goto exit;
 
@@ -603,7 +603,7 @@ mdn_message_seen_cb (EMailReader *reader,
 
 	/* This returns a new ESource reference. */
 	source = em_utils_guess_mail_account_with_recipients (
-		registry, message, folder);
+		registry, message, folder, message_uid);
 	if (source == NULL)
 		goto exit;
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]