diff options
author | Dan Winship <danw@src.gnome.org> | 2002-02-26 00:36:59 +0800 |
---|---|---|
committer | Dan Winship <danw@src.gnome.org> | 2002-02-26 00:36:59 +0800 |
commit | c91f7c6b59f1a845bc98797c9d6bae5344136854 (patch) | |
tree | 7d4cd3bc10536913dd6359b3004fe19d47b02629 | |
parent | 387acacf48126af9f050ba2e81f5aa1ec9456ff2 (diff) | |
download | gsoc2013-evolution-c91f7c6b59f1a845bc98797c9d6bae5344136854.tar gsoc2013-evolution-c91f7c6b59f1a845bc98797c9d6bae5344136854.tar.gz gsoc2013-evolution-c91f7c6b59f1a845bc98797c9d6bae5344136854.tar.bz2 gsoc2013-evolution-c91f7c6b59f1a845bc98797c9d6bae5344136854.tar.lz gsoc2013-evolution-c91f7c6b59f1a845bc98797c9d6bae5344136854.tar.xz gsoc2013-evolution-c91f7c6b59f1a845bc98797c9d6bae5344136854.tar.zst gsoc2013-evolution-c91f7c6b59f1a845bc98797c9d6bae5344136854.zip |
[pulled up from evolution-1-0-branch]
Mailer side of 14705.
* Evolution-Composer.idl (setBody): Change setBodyText to setBody
and take a MIME type as well.
(show): Add an exception.
* evolution-composer.c (impl_Composer_set_body, etc): Update for
IDL change. While I'm here, fix this to DTRT with both plaintext
and HTML bodies. (It claimed to take plain text before, but then
passed it to the composer as HTML.)
(impl_Composer_show): Raise an exception if setBody has been
called, since the composer window will not display the real data
in that case.
* e-msg-composer.c (e_msg_composer_set_body): interface for
impl_Composer_set_body.
(build_message): If e_msg_composer_set_body has been called, use
the body and MIME type supplied to it rather than the contents of
the HTML editor.
svn path=/trunk/; revision=15833
-rw-r--r-- | composer/ChangeLog | 22 | ||||
-rw-r--r-- | composer/Evolution-Composer.idl | 22 | ||||
-rw-r--r-- | composer/e-msg-composer.c | 60 | ||||
-rw-r--r-- | composer/e-msg-composer.h | 7 | ||||
-rw-r--r-- | composer/evolution-composer.c | 26 |
5 files changed, 112 insertions, 25 deletions
diff --git a/composer/ChangeLog b/composer/ChangeLog index f279adf966..56d6a60b79 100644 --- a/composer/ChangeLog +++ b/composer/ChangeLog @@ -1,3 +1,25 @@ +2002-02-25 Dan Winship <danw@ximian.com> + + Mailer side of 14705. + + * Evolution-Composer.idl (setBody): Change setBodyText to setBody + and take a MIME type as well. + (show): Add an exception. + + * evolution-composer.c (impl_Composer_set_body, etc): Update for + IDL change. While I'm here, fix this to DTRT with both plaintext + and HTML bodies. (It claimed to take plain text before, but then + passed it to the composer as HTML.) + (impl_Composer_show): Raise an exception if setBody has been + called, since the composer window will not display the real data + in that case. + + * e-msg-composer.c (e_msg_composer_set_body): interface for + impl_Composer_set_body. + (build_message): If e_msg_composer_set_body has been called, use + the body and MIME type supplied to it rather than the contents of + the HTML editor. + 2002-02-14 Radek Doulik <rodo@ximian.com> * e-msg-composer.c (delete_old_signature): don't insert paragraph diff --git a/composer/Evolution-Composer.idl b/composer/Evolution-Composer.idl index dcf52b57e1..543e6edd2d 100644 --- a/composer/Evolution-Composer.idl +++ b/composer/Evolution-Composer.idl @@ -48,11 +48,11 @@ module Evolution { * Sets the kind of multipart message that is being * created. * - * If @type is MIXED (the default), setBodyText() + * If @type is MIXED (the default), setBody() * will create the body, and attachMIME() and * attachData() will create attachments. * - * If @type is ALTERNATIVE, setBodyText() will create + * If @type is ALTERNATIVE, setBody() will create * text/plain alternative, and each following * attachMIME() or attachData() call will create * another alternative. @@ -63,13 +63,19 @@ module Evolution { void setMultipartType (in MultipartType type); /** - * setBodyText: + * setBody: * @body: the body + * @mime_type: the MIME type of @body * - * Sets the text in the body of the composer to - * the given UTF-8 plain text. + * Sets the body of the composer to @body. If + * @mime_type is something other than "text/plain" or + * "text/html", the composer will not be editable + * (calling show() will raise an exception), and the + * composer will not attempt to assign a non-UTF8 + * character set to the data. However, @mime_type may + * include parameters in that case. **/ - void setBodyText (in string body); + void setBody (in string body, in string mime_type); /** * attachMIME: @@ -117,7 +123,9 @@ module Evolution { * Shows the composer and lets the user edit things * and send the message. **/ - void show (); + exception CannotShow {}; + void show () + raises (CannotShow); /** diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index e540f4579f..5a40fd0f27 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -336,19 +336,32 @@ build_message (EMsgComposer *composer) composer->extra_hdr_values->pdata[i]); } - data = get_text (composer->persist_stream_interface, "text/plain"); - if (!data) { - /* The component has probably died */ - camel_object_unref (CAMEL_OBJECT (new)); - return NULL; + if (composer->mime_body) { + plain_encoding = CAMEL_MIME_PART_ENCODING_7BIT; + for (i = 0; composer->mime_body[i]; i++) { + if ((unsigned char)composer->mime_body[i] > 127) { + plain_encoding = CAMEL_MIME_PART_ENCODING_QUOTEDPRINTABLE; + break; + } + } + data = g_byte_array_new (); + g_byte_array_append (data, composer->mime_body, i); + type = header_content_type_decode (composer->mime_type); + } else { + data = get_text (composer->persist_stream_interface, "text/plain"); + if (!data) { + /* The component has probably died */ + camel_object_unref (CAMEL_OBJECT (new)); + return NULL; + } + + /* FIXME: we may want to do better than this... */ + charset = best_charset (data, composer->charset, &plain_encoding); + type = header_content_type_new ("text", "plain"); + if (charset) + header_content_type_set_param (type, "charset", charset); } - /* FIXME: we may want to do better than this... */ - charset = best_charset (data, composer->charset, &plain_encoding); - type = header_content_type_new ("text", "plain"); - if (charset) - header_content_type_set_param (type, "charset", charset); - plain = camel_data_wrapper_new (); stream = camel_stream_mem_new_with_byte_array (data); camel_data_wrapper_construct_from_stream (plain, stream); @@ -2053,6 +2066,8 @@ destroy (GtkObject *object) g_hash_table_destroy (composer->inline_images_by_url); g_free (composer->charset); + g_free (composer->mime_type); + g_free (composer->mime_body); CORBA_exception_init (&ev); @@ -3206,6 +3221,29 @@ e_msg_composer_set_body_text (EMsgComposer *composer, const char *text) /** + * e_msg_composer_set_body: + * @composer: a composer object + * @body: the data to initialize the composer with + * @mime_type: the MIME type of data + * + * Loads the given data into the composer as the message body. + * This function should only be used by the CORBA composer factory. + **/ +void +e_msg_composer_set_body (EMsgComposer *composer, const char *body, + const char *mime_type) +{ + g_return_if_fail (E_IS_MSG_COMPOSER (composer)); + + g_free (composer->mime_body); + composer->mime_body = g_strdup (body); + g_free (composer->mime_type); + composer->mime_type = g_strdup (mime_type); + composer->send_html = FALSE; +} + + +/** * e_msg_composer_add_header: * @composer: a composer object * @name: the header name diff --git a/composer/e-msg-composer.h b/composer/e-msg-composer.h index cb679107b8..100760f87e 100644 --- a/composer/e-msg-composer.h +++ b/composer/e-msg-composer.h @@ -75,8 +75,8 @@ struct _EMsgComposer { Bonobo_ConfigDatabase config_db; - char *charset; - + char *mime_type, *mime_body, *charset; + char *autosave_file; int autosave_fd; @@ -126,6 +126,9 @@ void e_msg_composer_set_headers (EMsgCo const char *subject); void e_msg_composer_set_body_text (EMsgComposer *composer, const char *text); +void e_msg_composer_set_body (EMsgComposer *composer, + const char *body, + const char *mime_type); void e_msg_composer_add_header (EMsgComposer *composer, const char *name, const char *value); diff --git a/composer/evolution-composer.c b/composer/evolution-composer.c index cf99f86e8b..1630d97ce3 100644 --- a/composer/evolution-composer.c +++ b/composer/evolution-composer.c @@ -33,6 +33,7 @@ #include <camel/camel.h> #include "evolution-composer.h" #include "mail/mail-config.h" +#include "e-util/e-html-utils.h" #define PARENT_TYPE BONOBO_OBJECT_TYPE static BonoboObjectClass *parent_class = NULL; @@ -115,9 +116,10 @@ impl_Composer_set_multipart_type (PortableServer_Servant servant, } static void -impl_Composer_set_body_text (PortableServer_Servant servant, - const CORBA_char *text, - CORBA_Environment *ev) +impl_Composer_set_body (PortableServer_Servant servant, + const CORBA_char *body, + const CORBA_char *mime_type, + CORBA_Environment *ev) { BonoboObject *bonobo_object; EvolutionComposer *composer; @@ -125,7 +127,14 @@ impl_Composer_set_body_text (PortableServer_Servant servant, bonobo_object = bonobo_object_from_servant (servant); composer = EVOLUTION_COMPOSER (bonobo_object); - e_msg_composer_set_body_text (composer->composer, text); + if (!g_strcasecmp (mime_type, "text/plain")) { + char *htmlbody = e_text_to_html (body, E_TEXT_TO_HTML_PRE); + e_msg_composer_set_body_text (composer->composer, htmlbody); + g_free (htmlbody); + } else if (!g_strcasecmp (mime_type, "text/html")) + e_msg_composer_set_body_text (composer->composer, body); + else + e_msg_composer_set_body (composer->composer, body, mime_type); } static void @@ -200,6 +209,13 @@ impl_Composer_show (PortableServer_Servant servant, bonobo_object = bonobo_object_from_servant (servant); composer = EVOLUTION_COMPOSER (bonobo_object); + if (composer->composer->mime_body) { + CORBA_exception_set (ev, CORBA_USER_EXCEPTION, + ex_GNOME_Evolution_Composer_CannotShow, + NULL); + return; + } + gtk_widget_show (GTK_WIDGET (composer->composer)); } @@ -224,7 +240,7 @@ evolution_composer_get_epv (void) epv = g_new0 (POA_GNOME_Evolution_Composer__epv, 1); epv->setHeaders = impl_Composer_set_headers; epv->setMultipartType = impl_Composer_set_multipart_type; - epv->setBodyText = impl_Composer_set_body_text; + epv->setBody = impl_Composer_set_body; epv->attachMIME = impl_Composer_attach_MIME; epv->attachData = impl_Composer_attach_data; epv->show = impl_Composer_show; |