diff options
-rw-r--r-- | composer/ChangeLog | 13 | ||||
-rw-r--r-- | composer/e-msg-composer.c | 120 | ||||
-rw-r--r-- | composer/e-msg-composer.h | 3 |
3 files changed, 92 insertions, 44 deletions
diff --git a/composer/ChangeLog b/composer/ChangeLog index 9bd36cfd7e..bc9184ece5 100644 --- a/composer/ChangeLog +++ b/composer/ChangeLog @@ -1,3 +1,16 @@ +2001-10-10 Larry Ewing <lewing@ximian.com> + + * e-msg-composer.h: add prototype. + + * e-msg-composer.c (e_msg_composer_add_message_attachments): new + function to copy attachments from the a message to a composer. + (e_msg_composer_set_pending_body): make simple function to + abstract this. + (e_msg_composer_apply_pending_body): apply the pending body to + the composer. + (e_msg_composer_new_with_message): use + e_msg_composer_add_message_attachments to copy attachments. + 2001-10-09 Jeffrey Stedfast <fejj@ximian.com> * e-msg-composer-attachment-bar.c (add_from_file): If the diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 4da1760c10..ce79fe1fb5 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -2434,6 +2434,29 @@ e_msg_composer_new (void) } static void +e_msg_composer_set_pending_body (EMsgComposer *composer, char *text) +{ + char *old; + + old = gtk_object_get_data (GTK_OBJECT (composer), "body:text"); + g_free (old); + gtk_object_set_data (GTK_OBJECT (composer), "body:text", text); +} + +static void +e_msg_composer_apply_pending_body (EMsgComposer *composer) +{ + char *body; + + body = gtk_object_get_data (GTK_OBJECT (composer), "body:text"); + if (body) { + e_msg_composer_set_body_text (composer, body); + gtk_object_set_data (GTK_OBJECT (composer), "body:text", NULL); + g_free (body); + } +} + +static void handle_multipart_alternative (EMsgComposer *composer, CamelMultipart *multipart) { /* Find the text/html part and set the composer body to it's contents */ @@ -2456,7 +2479,7 @@ handle_multipart_alternative (EMsgComposer *composer, CamelMultipart *multipart) text = mail_get_message_body (contents, FALSE, FALSE); if (text) - gtk_object_set_data (GTK_OBJECT (composer), "body:text", text); + e_msg_composer_set_pending_body (composer, text); return; } @@ -2504,7 +2527,7 @@ handle_multipart (EMsgComposer *composer, CamelMultipart *multipart, int depth) text = mail_get_message_body (contents, FALSE, FALSE); if (text) - gtk_object_set_data (GTK_OBJECT (composer), "body:text", 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); @@ -2557,6 +2580,56 @@ is_special_header (const char *hdr_name) } /** + * e_msg_composer_add_message_attachments: + * @composer: the composer to add the attachments to. + * @msg: the source message to copy the attachments from. + * + * Walk through all the mime parts in @msg and add them to the composer + * specified in @composer. + */ +void +e_msg_composer_add_message_attachments (EMsgComposer *composer, CamelMimeMessage *msg) +{ + CamelContentType *content_type; + + content_type = camel_mime_part_get_content_type (CAMEL_MIME_PART (msg)); + if (header_content_type_is (content_type, "multipart", "alternative")) { + /* multipart/alternative contains the text/plain and text/html versions of the message body */ + CamelDataWrapper *wrapper; + CamelMultipart *multipart; + + wrapper = camel_medium_get_content_object (CAMEL_MEDIUM (CAMEL_MIME_PART (msg))); + multipart = CAMEL_MULTIPART (wrapper); + + handle_multipart_alternative (composer, multipart); + } else if (header_content_type_is (content_type, "multipart", "*")) { + /* there must be attachments... */ + CamelDataWrapper *wrapper; + CamelMultipart *multipart; + + wrapper = camel_medium_get_content_object (CAMEL_MEDIUM (CAMEL_MIME_PART (msg))); + multipart = CAMEL_MULTIPART (wrapper); + + handle_multipart (composer, multipart, 0); + } else { + /* We either have a text/plain or a text/html part */ + CamelDataWrapper *contents; + char *text; + + contents = camel_medium_get_content_object (CAMEL_MEDIUM (msg)); + text = mail_get_message_body (contents, FALSE, FALSE); + + if (text) + e_msg_composer_set_pending_body (composer, text); + } + + /* We wait until now to set the body text because we need to ensure that + * the attachment bar has all the attachments, before we request them. + */ + e_msg_composer_apply_pending_body (composer); +} + +/** * e_msg_composer_new_with_message: * @msg: The message to use as the source * @@ -2571,8 +2644,6 @@ e_msg_composer_new_with_message (CamelMimeMessage *msg) GList *To = NULL, *Cc = NULL, *Bcc = NULL; EDestination **Tov, **Ccv, **Bccv; const char *format, *subject, *account_name; - char *body; - CamelContentType *content_type; struct _header_raw *headers; EMsgComposer *new; XEvolution *xev; @@ -2673,46 +2744,7 @@ e_msg_composer_new_with_message (CamelMimeMessage *msg) headers = headers->next; } - content_type = camel_mime_part_get_content_type (CAMEL_MIME_PART (msg)); - if (header_content_type_is (content_type, "multipart", "alternative")) { - /* multipart/alternative contains the text/plain and text/html versions of the message body */ - CamelDataWrapper *wrapper; - CamelMultipart *multipart; - - wrapper = camel_medium_get_content_object (CAMEL_MEDIUM (CAMEL_MIME_PART (msg))); - multipart = CAMEL_MULTIPART (wrapper); - - handle_multipart_alternative (new, multipart); - } else if (header_content_type_is (content_type, "multipart", "*")) { - /* there must be attachments... */ - CamelDataWrapper *wrapper; - CamelMultipart *multipart; - - wrapper = camel_medium_get_content_object (CAMEL_MEDIUM (CAMEL_MIME_PART (msg))); - multipart = CAMEL_MULTIPART (wrapper); - - handle_multipart (new, multipart, 0); - } else { - /* We either have a text/plain or a text/html part */ - CamelDataWrapper *contents; - char *text; - - contents = camel_medium_get_content_object (CAMEL_MEDIUM (msg)); - text = mail_get_message_body (contents, FALSE, FALSE); - - if (text) - gtk_object_set_data (GTK_OBJECT (new), "body:text", text); - } - - /* We wait until now to set the body text because we need to ensure that - * the attachment bar has all the attachments, before we request them. - */ - body = gtk_object_get_data (GTK_OBJECT (new), "body:text"); - if (body) { - e_msg_composer_set_body_text (new, body); - gtk_object_set_data (GTK_OBJECT (new), "body:text", NULL); - g_free (body); - } + e_msg_composer_add_message_attachments (new, msg); return new; } diff --git a/composer/e-msg-composer.h b/composer/e-msg-composer.h index e3cc8537ee..0f727d2065 100644 --- a/composer/e-msg-composer.h +++ b/composer/e-msg-composer.h @@ -172,6 +172,9 @@ gboolean e_msg_composer_get_smime_encrypt (EMsgComposer *compo gchar * e_msg_composer_get_sig_file_content (const char *sigfile, gboolean in_html); +void e_msg_composer_add_message_attachments (EMsgComposer *composer, + CamelMimeMessage *msg); + #ifdef __cplusplus } #endif /* __cplusplus */ |