aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--composer/ChangeLog4
-rw-r--r--composer/e-msg-composer.c100
2 files changed, 79 insertions, 25 deletions
diff --git a/composer/ChangeLog b/composer/ChangeLog
index 8c06d532aa..7abbec4006 100644
--- a/composer/ChangeLog
+++ b/composer/ChangeLog
@@ -1,3 +1,7 @@
+2000-06-02 Christopher James Lahey <clahey@helixcode.com>
+
+ * e-msg-composer.c: Added the ability to save plain text mail.
+
2000-05-29 Dan Winship <danw@helixcode.com>
* e-msg-composer.c (get_editor_text): add a "format" argument so
diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c
index fefaa7c967..6e77d4ec51 100644
--- a/composer/e-msg-composer.c
+++ b/composer/e-msg-composer.c
@@ -181,6 +181,10 @@ format_text (char *text)
return out;
}
+typedef enum {
+ MSG_FORMAT_PLAIN,
+ MSG_FORMAT_ALTERNATIVE,
+} MsgFormat;
/* This functions builds a CamelMimeMessage for the message that the user has
composed in `composer'. */
@@ -190,10 +194,21 @@ build_message (EMsgComposer *composer)
EMsgComposerAttachmentBar *attachment_bar =
E_MSG_COMPOSER_ATTACHMENT_BAR (composer->attachment_bar);
CamelMimeMessage *new;
- CamelMultipart *body;
+ CamelMultipart *body = NULL;
CamelMimePart *part;
- char *html, *plain, *fmt;
+ char *html = NULL, *plain = NULL, *fmt = NULL;
int i;
+ char *string;
+ MsgFormat type = MSG_FORMAT_ALTERNATIVE;
+ char *path;
+
+ path = g_strdup_printf ("=%s/config=/mail/msg_format", evolution_dir);
+ string = gnome_config_get_string (path);
+ g_free (path);
+ if (string) {
+ if (!strcasecmp(string, "plain"))
+ type = MSG_FORMAT_PLAIN;
+ }
new = camel_mime_message_new ();
@@ -204,28 +219,33 @@ build_message (EMsgComposer *composer)
composer->extra_hdr_names->pdata[i],
composer->extra_hdr_values->pdata[i]);
}
-
- html = get_editor_text (BONOBO_WIDGET (composer->editor), "text/html");
+
plain = get_editor_text (BONOBO_WIDGET (composer->editor), "text/plain");
fmt = format_text (plain);
g_free (plain);
+
+ if (type != MSG_FORMAT_PLAIN) {
+ html = get_editor_text (BONOBO_WIDGET (composer->editor), "text/html");
+ }
- body = camel_multipart_new ();
- camel_data_wrapper_set_mime_type (CAMEL_DATA_WRAPPER (body),
- "multipart/alternative");
- camel_multipart_set_boundary (body, NULL);
-
- part = camel_mime_part_new ();
- camel_mime_part_set_content (part, fmt, strlen (fmt), "text/plain");
- g_free (fmt);
- camel_multipart_add_part (body, part);
- gtk_object_unref (GTK_OBJECT (part));
+ if (type == MSG_FORMAT_ALTERNATIVE) {
+ body = camel_multipart_new ();
+ camel_data_wrapper_set_mime_type (CAMEL_DATA_WRAPPER (body),
+ "multipart/alternative");
+ camel_multipart_set_boundary (body, NULL);
- part = camel_mime_part_new ();
- camel_mime_part_set_content (part, html, strlen (html), "text/html");
- g_free (html);
- camel_multipart_add_part (body, part);
- gtk_object_unref (GTK_OBJECT (part));
+ part = camel_mime_part_new ();
+ camel_mime_part_set_content (part, fmt, strlen (fmt), "text/plain");
+ g_free (fmt);
+ camel_multipart_add_part (body, part);
+ gtk_object_unref (GTK_OBJECT (part));
+
+ part = camel_mime_part_new ();
+ camel_mime_part_set_content (part, html, strlen (html), "text/html");
+ g_free (html);
+ camel_multipart_add_part (body, part);
+ gtk_object_unref (GTK_OBJECT (part));
+ }
if (e_msg_composer_attachment_bar_get_num_attachments (attachment_bar)) {
CamelMultipart *multipart = camel_multipart_new ();
@@ -234,9 +254,18 @@ build_message (EMsgComposer *composer)
camel_multipart_set_boundary (multipart, NULL);
part = camel_mime_part_new ();
- camel_medium_set_content_object (CAMEL_MEDIUM (part),
- CAMEL_DATA_WRAPPER (body));
- gtk_object_unref (GTK_OBJECT (body));
+ switch (type) {
+ case MSG_FORMAT_ALTERNATIVE:
+ camel_medium_set_content_object (CAMEL_MEDIUM (part),
+ CAMEL_DATA_WRAPPER (body));
+ gtk_object_unref (GTK_OBJECT (body));
+ break;
+ case MSG_FORMAT_PLAIN:
+ camel_mime_part_set_content (part, fmt,
+ strlen (fmt), "text/plain");
+ g_free(fmt);
+ break;
+ }
camel_multipart_add_part (multipart, part);
gtk_object_unref (GTK_OBJECT (part));
@@ -247,9 +276,30 @@ build_message (EMsgComposer *composer)
CAMEL_DATA_WRAPPER (multipart));
gtk_object_unref (GTK_OBJECT (multipart));
} else {
- camel_medium_set_content_object (CAMEL_MEDIUM (new),
- CAMEL_DATA_WRAPPER (body));
- gtk_object_unref (GTK_OBJECT (body));
+ CamelDataWrapper *cdw;
+ CamelStream *stream;
+ switch (type) {
+ case MSG_FORMAT_ALTERNATIVE:
+ camel_medium_set_content_object (CAMEL_MEDIUM (new),
+ CAMEL_DATA_WRAPPER (body));
+ gtk_object_unref (GTK_OBJECT (body));
+ break;
+ case MSG_FORMAT_PLAIN:
+ stream = camel_stream_mem_new_with_buffer (fmt,
+ strlen (fmt));
+ cdw = camel_data_wrapper_new ();
+ camel_data_wrapper_construct_from_stream (cdw, stream);
+ gtk_object_unref (GTK_OBJECT (stream));
+
+ camel_data_wrapper_set_mime_type (cdw, "text/plain");
+
+ camel_medium_set_content_object (CAMEL_MEDIUM (new),
+ CAMEL_DATA_WRAPPER (cdw));
+ gtk_object_unref (GTK_OBJECT (cdw));
+ g_free (fmt);
+ break;
+
+ }
}
return new;