From e7157ba8938ac2de32ad3c5f5b73db12ddb772c0 Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Wed, 31 Oct 2001 00:26:58 +0000 Subject: New. * Evolution-Composer.idl (setMultipartType): New. * evolution-composer.c (impl_Composer_set_multipart_type): Allow caller to specify a multipart/alternative rather than multipart/mixed. * e-msg-composer.c (build_message): Revert yesterday's changes. Add new ones for sending multipart/alternative. svn path=/trunk/; revision=14510 --- composer/ChangeLog | 11 +++++++++++ composer/Evolution-Composer.idl | 26 ++++++++++++++++++++++++++ composer/e-msg-composer.c | 39 ++++++++++----------------------------- composer/e-msg-composer.h | 2 +- composer/evolution-composer.c | 41 ++++++++++++++++++++++++----------------- 5 files changed, 72 insertions(+), 47 deletions(-) (limited to 'composer') diff --git a/composer/ChangeLog b/composer/ChangeLog index 02ab55baaa..c849be32bc 100644 --- a/composer/ChangeLog +++ b/composer/ChangeLog @@ -1,3 +1,14 @@ +2001-10-30 Dan Winship + + * Evolution-Composer.idl (setMultipartType): New. + + * evolution-composer.c (impl_Composer_set_multipart_type): Allow + caller to specify a multipart/alternative rather than + multipart/mixed. + + * e-msg-composer.c (build_message): Revert yesterday's changes. + Add new ones for sending multipart/alternative. + 2001-10-30 Larry Ewing * e-msg-composer.h: add dirty prototype. diff --git a/composer/Evolution-Composer.idl b/composer/Evolution-Composer.idl index c15597068a..dcf52b57e1 100644 --- a/composer/Evolution-Composer.idl +++ b/composer/Evolution-Composer.idl @@ -22,6 +22,11 @@ module Evolution { typedef sequence AttachmentData; + enum MultipartType { + MIXED, + ALTERNATIVE + }; + /** * setHeaders: * @to: the "To" recipients @@ -36,6 +41,27 @@ module Evolution { void setHeaders (in RecipientList to, in RecipientList cc, in RecipientList bcc, in string subject); + /** + * setMultipartType: + * @type: a multipart subtype + * + * Sets the kind of multipart message that is being + * created. + * + * If @type is MIXED (the default), setBodyText() + * will create the body, and attachMIME() and + * attachData() will create attachments. + * + * If @type is ALTERNATIVE, setBodyText() will create + * text/plain alternative, and each following + * attachMIME() or attachData() call will create + * another alternative. + * + * Other values of @type are not currently supported, + * although "related" probably should be. + **/ + void setMultipartType (in MultipartType type); + /** * setBodyText: * @body: the body diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index e1b60a773e..740756e2b9 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -280,21 +280,6 @@ add_inlined_images (EMsgComposer *composer, CamelMultipart *multipart) } } -static void -copy_headers (CamelMedium *dest, CamelMedium *src) -{ - CamelMediumHeader header; - GArray *headers; - int i; - - headers = camel_medium_get_headers (src); - for (i = 0; i < headers->len; i++) { - header = g_array_index (headers, CamelMediumHeader, i); - camel_medium_set_header (dest, header.name, header.value); - } - camel_medium_free_headers (src, headers); -} - /* This functions builds a CamelMimeMessage for the message that the user has * composed in `composer'. */ @@ -314,7 +299,7 @@ build_message (EMsgComposer *composer) CamelMultipart *body = NULL; CamelMimePart *part; CamelException ex; - int i, num_attachments; + int i; if (composer->persist_stream_interface == CORBA_OBJECT_NIL) return NULL; @@ -410,10 +395,14 @@ build_message (EMsgComposer *composer) } else current = plain; - num_attachments = e_msg_composer_attachment_bar_get_num_attachments (attachment_bar); - if (num_attachments) { + if (e_msg_composer_attachment_bar_get_num_attachments (attachment_bar)) { CamelMultipart *multipart = camel_multipart_new (); + if (composer->is_alternative) { + camel_data_wrapper_set_mime_type (CAMEL_DATA_WRAPPER (multipart), + "multipart/alternative"); + } + /* Generate a random boundary. */ camel_multipart_set_boundary (multipart, NULL); @@ -426,18 +415,10 @@ build_message (EMsgComposer *composer) camel_object_unref (CAMEL_OBJECT (part)); e_msg_composer_attachment_bar_to_multipart (attachment_bar, multipart, composer->charset); - - if (composer->no_body && num_attachments == 1) { - part = camel_multipart_get_part (multipart, 1); - current = camel_medium_get_content_object (CAMEL_MEDIUM (part)); - copy_headers (CAMEL_MEDIUM (new), CAMEL_MEDIUM (part)); - camel_medium_remove_header (CAMEL_MEDIUM (new), "Content-Disposition"); - camel_object_ref (CAMEL_OBJECT (current)); - camel_object_unref (CAMEL_OBJECT (multipart)); - } else - current = CAMEL_DATA_WRAPPER (multipart); + + current = CAMEL_DATA_WRAPPER (multipart); } - + if (composer->pgp_sign || composer->pgp_encrypt) { part = camel_mime_part_new (); camel_medium_set_content_object (CAMEL_MEDIUM (part), current); diff --git a/composer/e-msg-composer.h b/composer/e-msg-composer.h index 395cf0a4ce..dab1db16bf 100644 --- a/composer/e-msg-composer.h +++ b/composer/e-msg-composer.h @@ -82,6 +82,7 @@ struct _EMsgComposer { gboolean attachment_bar_visible : 1; gboolean send_html : 1; + gboolean is_alternative: 1; gboolean pgp_sign : 1; gboolean pgp_encrypt : 1; gboolean smime_sign : 1; @@ -92,7 +93,6 @@ struct _EMsgComposer { gboolean view_cc : 1; gboolean view_subject : 1; gboolean has_changed : 1; - gboolean no_body : 1; gboolean in_signature_insert : 1; }; diff --git a/composer/evolution-composer.c b/composer/evolution-composer.c index 289a8a3765..cf99f86e8b 100644 --- a/composer/evolution-composer.c +++ b/composer/evolution-composer.c @@ -97,6 +97,23 @@ impl_Composer_set_headers (PortableServer_Servant servant, e_destination_freev (bccv); } +static void +impl_Composer_set_multipart_type (PortableServer_Servant servant, + GNOME_Evolution_Composer_MultipartType type, + CORBA_Environment *ev) +{ + BonoboObject *bonobo_object; + EvolutionComposer *composer; + + bonobo_object = bonobo_object_from_servant (servant); + composer = EVOLUTION_COMPOSER (bonobo_object); + + if (type == GNOME_Evolution_Composer_ALTERNATIVE) { + composer->composer->is_alternative = TRUE; + composer->composer->send_html = FALSE; + } +} + static void impl_Composer_set_body_text (PortableServer_Servant servant, const CORBA_char *text, @@ -109,7 +126,6 @@ impl_Composer_set_body_text (PortableServer_Servant servant, composer = EVOLUTION_COMPOSER (bonobo_object); e_msg_composer_set_body_text (composer->composer, text); - composer->composer->no_body = FALSE; } static void @@ -206,12 +222,13 @@ evolution_composer_get_epv (void) POA_GNOME_Evolution_Composer__epv *epv; epv = g_new0 (POA_GNOME_Evolution_Composer__epv, 1); - epv->setHeaders = impl_Composer_set_headers; - epv->setBodyText = impl_Composer_set_body_text; - epv->attachMIME = impl_Composer_attach_MIME; - epv->attachData = impl_Composer_attach_data; - epv->show = impl_Composer_show; - epv->send = impl_Composer_send; + epv->setHeaders = impl_Composer_set_headers; + epv->setMultipartType = impl_Composer_set_multipart_type; + epv->setBodyText = impl_Composer_set_body_text; + epv->attachMIME = impl_Composer_attach_MIME; + epv->attachData = impl_Composer_attach_data; + epv->show = impl_Composer_show; + epv->send = impl_Composer_send; return epv; } @@ -244,12 +261,6 @@ class_init (EvolutionComposerClass *klass) Composer_vepv.GNOME_Evolution_Composer_epv = evolution_composer_get_epv (); } -static void -unset_no_body (EMsgComposer *composer, gpointer user_data) -{ - composer->no_body = FALSE; -} - static void init (EvolutionComposer *composer) { @@ -257,10 +268,6 @@ init (EvolutionComposer *composer) account = mail_config_get_default_account (); composer->composer = e_msg_composer_new (); - composer->composer->no_body = TRUE; - - gtk_signal_connect (GTK_OBJECT (composer->composer), "realize", - GTK_SIGNAL_FUNC (unset_no_body), NULL); gtk_signal_connect (GTK_OBJECT (composer->composer), "send", GTK_SIGNAL_FUNC (send_cb), NULL); -- cgit v1.2.3