[evolution] Bug #268618 - Add: Save replies in the folder of the message being replied to



commit 0c65652f2a3b29250b11425c594ded737a2a4cc5
Author: Milan Crha <mcrha redhat com>
Date:   Mon Oct 22 15:28:01 2012 +0200

    Bug #268618 - Add: Save replies in the folder of the message being replied to
    
    Follow-up fixes:
    a) don't copy to origin folder for forwarded messages
    b) use a real folder when reply/forward from a vFolder

 libemail-engine/e-mail-session-utils.c |   11 ++++--
 libemail-engine/mail-ops.c             |   11 ++++--
 mail/em-composer-utils.c               |   55 ++++++++++++++++++++++++++++---
 3 files changed, 63 insertions(+), 14 deletions(-)
---
diff --git a/libemail-engine/e-mail-session-utils.c b/libemail-engine/e-mail-session-utils.c
index 33e7eff..7ec3ca3 100644
--- a/libemail-engine/e-mail-session-utils.c
+++ b/libemail-engine/e-mail-session-utils.c
@@ -863,10 +863,13 @@ e_mail_session_send_to (EMailSession *session,
 		transport_uid = g_strstrip (g_strdup (string));
 
 	if (replies_to_origin_folder) {
-		string = camel_header_raw_find (&xev, "X-Evolution-Source-Folder", NULL);
-		if (string != NULL && camel_header_raw_find (&xev, "X-Evolution-Source-Message", NULL) != NULL) {
-			g_free (sent_folder_uri);
-			sent_folder_uri = g_strstrip (g_strdup (string));
+		string = camel_header_raw_find (&xev, "X-Evolution-Source-Flags", NULL);
+		if (string != NULL && strstr (string, "FORWARDED") == NULL) {
+			string = camel_header_raw_find (&xev, "X-Evolution-Source-Folder", NULL);
+			if (string != NULL && camel_header_raw_find (&xev, "X-Evolution-Source-Message", NULL) != NULL) {
+				g_free (sent_folder_uri);
+				sent_folder_uri = g_strstrip (g_strdup (string));
+			}
 		}
 	}
 
diff --git a/libemail-engine/mail-ops.c b/libemail-engine/mail-ops.c
index e24e8c9..7481526 100644
--- a/libemail-engine/mail-ops.c
+++ b/libemail-engine/mail-ops.c
@@ -623,10 +623,13 @@ mail_send_message (struct _send_queue_msg *m,
 		sent_folder_uri = g_strstrip (g_strdup (tmp));
 
 	if (replies_to_origin_folder) {
-		tmp = camel_header_raw_find (&xev, "X-Evolution-Source-Folder", NULL);
-		if (tmp != NULL && camel_header_raw_find (&xev, "X-Evolution-Source-Message", NULL) != NULL) {
-			g_free (sent_folder_uri);
-			sent_folder_uri = g_strstrip (g_strdup (tmp));
+		tmp = camel_header_raw_find (&xev, "X-Evolution-Source-Flags", NULL);
+		if (tmp != NULL && strstr (tmp, "FORWARDED") == NULL) {
+			tmp = camel_header_raw_find (&xev, "X-Evolution-Source-Folder", NULL);
+			if (tmp != NULL && camel_header_raw_find (&xev, "X-Evolution-Source-Message", NULL) != NULL) {
+				g_free (sent_folder_uri);
+				sent_folder_uri = g_strstrip (g_strdup (tmp));
+			}
 		}
 	}
 
diff --git a/mail/em-composer-utils.c b/mail/em-composer-utils.c
index 28b1962..b978830 100644
--- a/mail/em-composer-utils.c
+++ b/mail/em-composer-utils.c
@@ -1563,6 +1563,47 @@ emu_update_composers_security (EMsgComposer *composer,
 }
 
 static void
+get_real_folder_uri_and_message_uid (CamelFolder *folder,
+				     const gchar *uid,
+				     gchar **folder_uri,
+				     gchar **message_uid)
+{
+	g_return_if_fail (folder != NULL);
+	g_return_if_fail (uid != NULL);
+	g_return_if_fail (folder_uri != NULL);
+	g_return_if_fail (message_uid != NULL);
+
+	if (CAMEL_IS_VEE_FOLDER (folder)) {
+		CamelMessageInfo *mi;
+
+		mi = camel_folder_get_message_info (folder, uid);
+		if (mi) {
+			CamelFolder *real_folder;
+			gchar *real_uid = NULL;
+
+			real_folder = camel_vee_folder_get_location (
+				CAMEL_VEE_FOLDER (folder),
+				(CamelVeeMessageInfo *) mi,
+				&real_uid);
+
+			if (real_folder) {
+				*folder_uri = e_mail_folder_uri_from_folder (real_folder);
+				*message_uid = real_uid;
+
+				camel_folder_free_message_info (folder, mi);
+
+				return;
+			}
+
+			camel_folder_free_message_info (folder, mi);
+		}
+	}
+
+	*folder_uri = e_mail_folder_uri_from_folder (folder);
+	*message_uid = g_strdup (uid);
+}
+
+static void
 real_update_forwarded_flag (gpointer uid,
                             gpointer folder)
 {
@@ -1721,15 +1762,16 @@ forward_non_attached (EShell *shell,
 		e_msg_composer_set_body_text (composer, text, TRUE);
 
 		if (uid != NULL) {
-			gchar *folder_uri;
+			gchar *folder_uri = NULL, *tmp_message_uid = NULL;
 
-			folder_uri = e_mail_folder_uri_from_folder (folder);
+			get_real_folder_uri_and_message_uid (folder, uid, &folder_uri, &tmp_message_uid);
 
 			e_msg_composer_set_source_headers (
-				composer, folder_uri, uid,
+				composer, folder_uri, tmp_message_uid,
 				CAMEL_MESSAGE_FORWARDED);
 
 			g_free (folder_uri);
+			g_free (tmp_message_uid);
 		}
 
 		emu_update_composers_security (
@@ -2952,14 +2994,15 @@ em_utils_reply_to_message (EShell *shell,
 	composer_set_body (composer, message, style, parts_list);
 
 	if (folder != NULL) {
-		gchar *folder_uri;
+		gchar *folder_uri = NULL, *tmp_message_uid = NULL;
 
-		folder_uri = e_mail_folder_uri_from_folder (folder);
+		get_real_folder_uri_and_message_uid (folder, message_uid, &folder_uri, &tmp_message_uid);
 
 		e_msg_composer_set_source_headers (
-			composer, folder_uri, message_uid, flags);
+			composer, folder_uri, tmp_message_uid, flags);
 
 		g_free (folder_uri);
+		g_free (tmp_message_uid);
 	}
 
 	composer_set_no_change (composer);



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