From c420f2074062b29c82d10589ada5cee0cb7bcd47 Mon Sep 17 00:00:00 2001
From: Jeffrey Stedfast <fejj@ximian.com>
Date: Fri, 19 Oct 2001 20:03:42 +0000
Subject: Now takes a 'attach_all' argument. If !attach_all, then only attach
 the

2001-10-19  Jeffrey Stedfast  <fejj@ximian.com>

	* e-msg-composer.c (handle_multipart): Now takes a 'attach_all'
	argument. If !attach_all, then only attach the attachment if the
	part has a content-id, otherwise we can safely assume that nothing
	references it thus we don't need to attach it.
	(e_msg_composer_add_message_attachments): Now takes a 'attach_all'
	argument that overrides the "only attach attachments if they have
	a content-id header" behavior.
	(e_msg_composer_new_with_message): Pass TRUE as the attach_all
	argument to add_message_attachments.

svn path=/trunk/; revision=13800
---
 composer/ChangeLog        | 12 ++++++++++++
 composer/e-msg-composer.c | 28 ++++++++++++++++------------
 composer/e-msg-composer.h |  3 ++-
 3 files changed, 30 insertions(+), 13 deletions(-)

diff --git a/composer/ChangeLog b/composer/ChangeLog
index 5a529ad0bf..ddf610712b 100644
--- a/composer/ChangeLog
+++ b/composer/ChangeLog
@@ -1,3 +1,15 @@
+2001-10-19  Jeffrey Stedfast  <fejj@ximian.com>
+
+	* e-msg-composer.c (handle_multipart): Now takes a 'attach_all'
+	argument. If !attach_all, then only attach the attachment if the
+	part has a content-id, otherwise we can safely assume that nothing
+	references it thus we don't need to attach it.
+	(e_msg_composer_add_message_attachments): Now takes a 'attach_all'
+	argument that overrides the "only attach attachments if they have
+	a content-id header" behavior.
+	(e_msg_composer_new_with_message): Pass TRUE as the attach_all
+	argument to add_message_attachments.
+
 2001-10-18  Jeffrey Stedfast  <fejj@ximian.com>
 
 	* e-msg-composer.c (best_encoding): Don't use a
diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c
index 3227a2e1a7..1a8f525efa 100644
--- a/composer/e-msg-composer.c
+++ b/composer/e-msg-composer.c
@@ -120,7 +120,8 @@ static GnomeAppClass *parent_class = NULL;
 
 /* local prototypes */
 static GList *add_recipients   (GList *list, const char *recips, gboolean decode);
-static void handle_multipart   (EMsgComposer *composer, CamelMultipart *multipart, int depth);
+static void handle_multipart   (EMsgComposer *composer, CamelMultipart *multipart,
+				gboolean attach_all, int depth);
 static void message_rfc822_dnd (EMsgComposer *composer, CamelStream *stream);
 
 
@@ -1264,8 +1265,7 @@ autosave_manager_register (AutosaveManager *am, EMsgComposer *composer)
 			am->ask = FALSE;
 			autosave_manager_query_load_orphans (am, composer);
 			am->ask = TRUE;
-		} 
-			
+		}
 	}
 	autosave_manager_start (am);
 }
@@ -1285,6 +1285,7 @@ autosave_manager_unregister (AutosaveManager *am, EMsgComposer *composer)
 	}
 	close (composer->autosave_fd);
 	g_free (composer->autosave_file);
+	composer->autosave_file = NULL;
 	
 	if (g_hash_table_size (am->table) == 0)
 		autosave_manager_stop (am);
@@ -2481,7 +2482,7 @@ handle_multipart_alternative (EMsgComposer *composer, CamelMultipart *multipart)
 			
 			contents = camel_medium_get_content_object (CAMEL_MEDIUM (mime_part));
 			text = mail_get_message_body (contents, FALSE, FALSE);
-
+			
 			if (text)
 				e_msg_composer_set_pending_body (composer, text);
 			
@@ -2491,7 +2492,7 @@ handle_multipart_alternative (EMsgComposer *composer, CamelMultipart *multipart)
 }
 
 static void
-handle_multipart (EMsgComposer *composer, CamelMultipart *multipart, int depth)
+handle_multipart (EMsgComposer *composer, CamelMultipart *multipart, gboolean attach_all, int depth)
 {
 	int i, nparts;
 	
@@ -2521,7 +2522,7 @@ handle_multipart (EMsgComposer *composer, CamelMultipart *multipart, int depth)
 			wrapper = camel_medium_get_content_object (CAMEL_MEDIUM (mime_part));
 			mpart = CAMEL_MULTIPART (wrapper);
 			
-			handle_multipart (composer, mpart, depth + 1);
+			handle_multipart (composer, mpart, attach_all, depth + 1);
 		} else if (depth == 0 && i == 0) {
 			/* Since the first part is not multipart/alternative, then this must be the body */
 			CamelDataWrapper *contents;
@@ -2529,12 +2530,13 @@ handle_multipart (EMsgComposer *composer, CamelMultipart *multipart, int depth)
 			
 			contents = camel_medium_get_content_object (CAMEL_MEDIUM (mime_part));
 			text = mail_get_message_body (contents, FALSE, FALSE);
-
+			
 			if (text)
 				e_msg_composer_set_pending_body (composer, text);
 		} else {
 			/* this is a leaf of the tree, so attach it */
-			e_msg_composer_attach (composer, mime_part);
+			if (attach_all || camel_mime_part_get_content_id (mime_part))
+				e_msg_composer_attach (composer, mime_part);
 		}
 	}
 }
@@ -2588,18 +2590,20 @@ is_special_header (const char *hdr_name)
  * @composer: the composer to add the attachments to.
  * @message: the source message to copy the attachments from.
  * @settext: set the text of the composer
+ * @attach_all: attach all attachments
  *
  * Walk through all the mime parts in @message and add them to the composer
  * specified in @composer.
  */
 void
-e_msg_composer_add_message_attachments (EMsgComposer *composer, CamelMimeMessage *message, gboolean settext)
+e_msg_composer_add_message_attachments (EMsgComposer *composer, CamelMimeMessage *message,
+					gboolean settext, gboolean attach_all)
 {
 	CamelContentType *content_type;
 	
 	content_type = camel_mime_part_get_content_type (CAMEL_MIME_PART (message));
 	if (header_content_type_is (content_type, "multipart", "alternative")) {
-		/* multipart/alternative contains the text/plain and text/html versions of the message body */
+		/* this contains the text/plain and text/html versions of the message body */
 		CamelDataWrapper *wrapper;
 		CamelMultipart *multipart;
 		
@@ -2615,7 +2619,7 @@ e_msg_composer_add_message_attachments (EMsgComposer *composer, CamelMimeMessage
 		wrapper = camel_medium_get_content_object (CAMEL_MEDIUM (CAMEL_MIME_PART (message)));
 		multipart = CAMEL_MULTIPART (wrapper);
 		
-		handle_multipart (composer, multipart, 0);
+		handle_multipart (composer, multipart, attach_all, 0);
 	} else if (settext) {
 		/* We either have a text/plain or a text/html part */
 		CamelDataWrapper *contents;
@@ -2752,7 +2756,7 @@ e_msg_composer_new_with_message (CamelMimeMessage *message)
 		headers = headers->next;
 	}
 	
-	e_msg_composer_add_message_attachments (new, message, TRUE);
+	e_msg_composer_add_message_attachments (new, message, TRUE, TRUE);
 	
 	return new;
 }
diff --git a/composer/e-msg-composer.h b/composer/e-msg-composer.h
index e926ce84a7..0153fe3ccf 100644
--- a/composer/e-msg-composer.h
+++ b/composer/e-msg-composer.h
@@ -173,7 +173,8 @@ gchar *           e_msg_composer_get_sig_file_content   (const char       *sigfi
 
 void              e_msg_composer_add_message_attachments (EMsgComposer *composer, 
 							  CamelMimeMessage *message,
-							  gboolean settext);
+							  gboolean settext,
+							  gboolean attach_all);
 
 #ifdef __cplusplus
 }
-- 
cgit