aboutsummaryrefslogtreecommitdiffstats
path: root/composer
diff options
context:
space:
mode:
Diffstat (limited to 'composer')
-rw-r--r--composer/e-msg-composer.c266
1 files changed, 186 insertions, 80 deletions
diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c
index 67a9781395..ba09088897 100644
--- a/composer/e-msg-composer.c
+++ b/composer/e-msg-composer.c
@@ -94,14 +94,24 @@ static GList *add_recipients (GList *list, const gchar *recips);
static void handle_mailto (EMsgComposer *composer, const gchar *mailto);
/* used by e_msg_composer_add_message_attachments () */
-static void add_attachments_from_multipart (EMsgComposer *composer, CamelMultipart *multipart,
- gboolean just_inlines, gint depth);
+static void add_attachments_from_multipart (EMsgComposer *composer,
+ CamelMultipart *multipart,
+ gboolean just_inlines,
+ gint depth);
/* used by e_msg_composer_new_with_message () */
-static void handle_multipart (EMsgComposer *composer, CamelMultipart *multipart, gint depth);
-static void handle_multipart_alternative (EMsgComposer *composer, CamelMultipart *multipart, gint depth);
-static void handle_multipart_encrypted (EMsgComposer *composer, CamelMimePart *multipart, gint depth);
-static void handle_multipart_signed (EMsgComposer *composer, CamelMultipart *multipart, gint depth);
+static void handle_multipart (EMsgComposer *composer,
+ CamelMultipart *multipart,
+ gint depth);
+static void handle_multipart_alternative (EMsgComposer *composer,
+ CamelMultipart *multipart,
+ gint depth);
+static void handle_multipart_encrypted (EMsgComposer *composer,
+ CamelMimePart *multipart,
+ gint depth);
+static void handle_multipart_signed (EMsgComposer *composer,
+ CamelMultipart *multipart,
+ gint depth);
static void msg_composer_drag_data_received (GtkWidget *widget,
GdkDragContext *context,
@@ -137,11 +147,14 @@ emcu_part_to_html (CamelMimePart *part, gssize *len, EMFormat *source)
emfq = em_format_quote_new (NULL, (CamelStream *)mem, EM_FORMAT_QUOTE_KEEP_SIG);
((EMFormat *) emfq)->composer = TRUE;
if (source) {
- /* copy over things we can, other things are internal, perhaps need different api than 'clone' */
+ /* Copy over things we can, other things are internal.
+ * XXX Perhaps need different api than 'clone'. */
if (source->default_charset)
- em_format_set_default_charset((EMFormat *)emfq, source->default_charset);
+ em_format_set_default_charset (
+ (EMFormat *) emfq, source->default_charset);
if (source->charset)
- em_format_set_default_charset((EMFormat *)emfq, source->charset);
+ em_format_set_default_charset (
+ (EMFormat *) emfq, source->charset);
}
em_format_part((EMFormat *) emfq, (CamelStream *)mem, part);
g_object_unref(emfq);
@@ -192,7 +205,10 @@ emcu_prompt_user (GtkWindow *parent, const gchar *promptkey, const gchar *tag, .
button = gtk_dialog_run (mbox);
if (promptkey)
- gconf_client_set_bool(gconf, promptkey, !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check)), NULL);
+ gconf_client_set_bool (
+ gconf, promptkey,
+ !gtk_toggle_button_get_active (
+ GTK_TOGGLE_BUTTON (check)), NULL);
gtk_widget_destroy((GtkWidget*) mbox);
g_object_unref (gconf);
@@ -302,7 +318,9 @@ best_encoding (GByteArray *buf, const gchar *charset)
if (status == (gsize) -1 || status > 0)
return -1;
- if ((count == 0) && (buf->len < LINE_LEN) && !text_requires_quoted_printable ((const gchar *)buf->data, buf->len))
+ if ((count == 0) && (buf->len < LINE_LEN) &&
+ !text_requires_quoted_printable (
+ (const gchar *) buf->data, buf->len))
return CAMEL_TRANSFER_ENCODING_7BIT;
else if (count <= buf->len * 0.17)
return CAMEL_TRANSFER_ENCODING_QUOTEDPRINTABLE;
@@ -311,7 +329,9 @@ best_encoding (GByteArray *buf, const gchar *charset)
}
static gchar *
-best_charset (GByteArray *buf, const gchar *default_charset, CamelTransferEncoding *encoding)
+best_charset (GByteArray *buf,
+ const gchar *default_charset,
+ CamelTransferEncoding *encoding)
{
gchar *charset;
@@ -894,7 +914,11 @@ build_message (EMsgComposer *composer,
/* Setup working recipient list if we're encrypting */
if (pgp_encrypt || smime_encrypt) {
gint j;
- const gchar *types[] = { CAMEL_RECIPIENT_TYPE_TO, CAMEL_RECIPIENT_TYPE_CC, CAMEL_RECIPIENT_TYPE_BCC };
+ const gchar *types[] = {
+ CAMEL_RECIPIENT_TYPE_TO,
+ CAMEL_RECIPIENT_TYPE_CC,
+ CAMEL_RECIPIENT_TYPE_BCC
+ };
recipients = g_ptr_array_new ();
for (i = 0; i < G_N_ELEMENTS (types); i++) {
@@ -952,7 +976,8 @@ build_message (EMsgComposer *composer,
if (pgp_encrypt) {
CamelMimePart *npart = camel_mime_part_new ();
- /* check to see if we should encrypt to self, NB gets removed immediately after use */
+ /* Check to see if we should encrypt to self.
+ * NB gets removed immediately after use */
if (account && account->pgp_encrypt_to_self && pgp_userid)
g_ptr_array_add (recipients, g_strdup (pgp_userid));
@@ -997,17 +1022,25 @@ build_message (EMsgComposer *composer,
camel_mime_part_set_encoding (part, plain_encoding);
g_object_unref (current);
- if (smime_sign
- && (account == NULL || account->smime_sign_key == NULL || account->smime_sign_key[0] == 0)) {
- camel_exception_set (&ex, CAMEL_EXCEPTION_SYSTEM,
- _("Cannot sign outgoing message: No signing certificate set for this account"));
+ if (smime_sign && (account == NULL ||
+ account->smime_sign_key == NULL ||
+ account->smime_sign_key[0] == 0)) {
+ camel_exception_set (
+ &ex, CAMEL_EXCEPTION_SYSTEM,
+ _("Cannot sign outgoing message: "
+ "No signing certificate set for "
+ "this account"));
goto exception;
}
- if (smime_encrypt
- && (account == NULL || account->smime_sign_key == NULL || account->smime_sign_key[0] == 0)) {
- camel_exception_set (&ex, CAMEL_EXCEPTION_SYSTEM,
- _("Cannot encrypt outgoing message: No encryption certificate set for this account"));
+ if (smime_encrypt && (account == NULL ||
+ account->smime_sign_key == NULL ||
+ account->smime_sign_key[0] == 0)) {
+ camel_exception_set (
+ &ex, CAMEL_EXCEPTION_SYSTEM,
+ _("Cannot encrypt outgoing message: "
+ "No encryption certificate set for "
+ "this account"));
goto exception;
}
@@ -1018,14 +1051,25 @@ build_message (EMsgComposer *composer,
/* if we're also encrypting, envelope-sign rather than clear-sign */
if (smime_encrypt) {
- camel_smime_context_set_sign_mode ((CamelSMIMEContext *)cipher, CAMEL_SMIME_SIGN_ENVELOPED);
- camel_smime_context_set_encrypt_key ((CamelSMIMEContext *)cipher, TRUE, account->smime_encrypt_key);
- } else if (account && account->smime_encrypt_key && *account->smime_encrypt_key) {
- camel_smime_context_set_encrypt_key ((CamelSMIMEContext *)cipher, TRUE, account->smime_encrypt_key);
+ camel_smime_context_set_sign_mode (
+ (CamelSMIMEContext *) cipher,
+ CAMEL_SMIME_SIGN_ENVELOPED);
+ camel_smime_context_set_encrypt_key (
+ (CamelSMIMEContext *) cipher,
+ TRUE, account->smime_encrypt_key);
+ } else if (account &&
+ account->smime_encrypt_key &&
+ *account->smime_encrypt_key) {
+ camel_smime_context_set_encrypt_key (
+ (CamelSMIMEContext *) cipher,
+ TRUE, account->smime_encrypt_key);
}
camel_cipher_sign (cipher, account->smime_sign_key,
- account_hash_algo_to_camel_hash (account ? e_account_get_string (account, E_ACCOUNT_SMIME_HASH_ALGORITHM) : NULL),
+ account_hash_algo_to_camel_hash (
+ (account != NULL) ?
+ e_account_get_string (account,
+ E_ACCOUNT_SMIME_HASH_ALGORITHM) : NULL),
part, npart, &ex);
g_object_unref (cipher);
@@ -1042,10 +1086,14 @@ build_message (EMsgComposer *composer,
/* check to see if we should encrypt to self, NB removed after use */
if (account->smime_encrypt_to_self)
- g_ptr_array_add (recipients, g_strdup (account->smime_encrypt_key));
+ g_ptr_array_add (
+ recipients, g_strdup (
+ account->smime_encrypt_key));
cipher = camel_smime_context_new (session);
- camel_smime_context_set_encrypt_key ((CamelSMIMEContext *)cipher, TRUE, account->smime_encrypt_key);
+ camel_smime_context_set_encrypt_key (
+ (CamelSMIMEContext *) cipher, TRUE,
+ account->smime_encrypt_key);
camel_cipher_encrypt (cipher, NULL, recipients, part, (CamelMimePart *)new, &ex);
g_object_unref (cipher);
@@ -1246,8 +1294,12 @@ add_signature_delim (void)
#define CONVERT_SPACES CAMEL_MIME_FILTER_TOHTML_CONVERT_SPACES
#define NO_SIGNATURE_TEXT \
- "<!--+GtkHTML:<DATA class=\"ClueFlow\" key=\"signature\" value=\"1\">-->" \
- "<!--+GtkHTML:<DATA class=\"ClueFlow\" key=\"signature_name\" value=\"uid:Noname\">--><BR>"
+ "<!--+GtkHTML:<DATA class=\"ClueFlow\" " \
+ " key=\"signature\" " \
+ " value=\"1\">-->" \
+ "<!--+GtkHTML:<DATA class=\"ClueFlow\" " \
+ " key=\"signature_name\" " \
+ " value=\"uid:Noname\">--><BR>"
static gchar *
get_signature_html (EMsgComposer *composer)
@@ -1292,7 +1344,9 @@ get_signature_html (EMsgComposer *composer)
id = account->id;
address = id->address ? camel_text_to_html (id->address, CONVERT_SPACES, 0) : NULL;
name = id->name ? camel_text_to_html (id->name, CONVERT_SPACES, 0) : NULL;
- organization = id->organization ? camel_text_to_html (id->organization, CONVERT_SPACES, 0) : NULL;
+ organization =
+ id->organization ? camel_text_to_html (
+ id->organization, CONVERT_SPACES, 0) : NULL;
text = g_strdup_printf ("%s%s%s%s%s%s%s%s%s",
add_delim ? "-- \n<BR>" : "",
@@ -1319,21 +1373,26 @@ get_signature_html (EMsgComposer *composer)
if (signature)
encoded_uid = encode_signature_uid (signature);
- /* The signature dash convention ("-- \n") is specified in the
- * "Son of RFC 1036": http://www.chemie.fu-berlin.de/outerspace/netnews/son-of-1036.html,
- * section 4.3.2.
+ /* The signature dash convention ("-- \n") is specified
+ * in the "Son of RFC 1036", section 4.3.2.
+ * http://www.chemie.fu-berlin.de/outerspace/netnews/son-of-1036.html
*/
- html = g_strdup_printf ("<!--+GtkHTML:<DATA class=\"ClueFlow\" key=\"signature\" value=\"1\">-->"
- "<!--+GtkHTML:<DATA class=\"ClueFlow\" key=\"signature_name\" value=\"uid:%s\">-->"
- "<TABLE WIDTH=\"100%%\" CELLSPACING=\"0\" CELLPADDING=\"0\"><TR><TD>"
- "%s%s%s%s"
- "%s</TD></TR></TABLE>",
- encoded_uid ? encoded_uid : "",
- format_html ? "" : "<PRE>\n",
- !add_delim ? "" : (!strncmp (sig_delim, text, strlen (sig_delim)) || strstr (text, sig_delim_ent)) ? "" : sig_delim,
- text,
- format_html ? "" : "</PRE>\n",
- is_top_signature (composer) ? "<BR>" : "");
+ html = g_strdup_printf (
+ "<!--+GtkHTML:<DATA class=\"ClueFlow\" key=\"signature\" value=\"1\">-->"
+ "<!--+GtkHTML:<DATA class=\"ClueFlow\" key=\"signature_name\" value=\"uid:%s\">-->"
+ "<TABLE WIDTH=\"100%%\" CELLSPACING=\"0\" CELLPADDING=\"0\"><TR><TD>"
+ "%s%s%s%s"
+ "%s</TD></TR></TABLE>",
+ encoded_uid ? encoded_uid : "",
+ format_html ? "" : "<PRE>\n",
+ !add_delim ? "" :
+ (!strncmp (
+ sig_delim, text, strlen (sig_delim)) ||
+ strstr (text, sig_delim_ent))
+ ? "" : sig_delim,
+ text,
+ format_html ? "" : "</PRE>\n",
+ is_top_signature (composer) ? "<BR>" : "");
g_free (text);
g_free (encoded_uid);
text = html;
@@ -2298,8 +2357,10 @@ add_attachments_handle_mime_part (EMsgComposer *composer,
composer, mime_part);
} else if (related && camel_content_type_is (content_type, "image", "*")) {
e_msg_composer_add_inline_image_from_mime_part (composer, mime_part);
- } else if (camel_content_type_is (content_type, "text", "*") && camel_mime_part_get_filename (mime_part) == NULL) {
- /* do nothing if this is a text/anything without filename, otherwise attach it too */
+ } else if (camel_content_type_is (content_type, "text", "*") &&
+ camel_mime_part_get_filename (mime_part) == NULL) {
+ /* Do nothing if this is a text/anything without a
+ * filename, otherwise attach it too. */
} else {
e_msg_composer_attach (composer, mime_part);
}
@@ -2372,15 +2433,18 @@ handle_multipart_signed (EMsgComposer *composer,
CamelContentType *content_type;
CamelDataWrapper *content;
CamelMimePart *mime_part;
- GtkToggleAction *action = NULL;
+ GtkToggleAction *action;
const gchar *protocol;
- content_type = camel_data_wrapper_get_mime_type_field (CAMEL_DATA_WRAPPER (multipart));
+ content = CAMEL_DATA_WRAPPER (multipart);
+ content_type = camel_data_wrapper_get_mime_type_field (content);
protocol = camel_content_type_param (content_type, "protocol");
- if (protocol && g_ascii_strcasecmp (protocol, "application/pgp-signature") == 0)
+ if (protocol == NULL)
+ action = NULL;
+ else if (g_ascii_strcasecmp (protocol, "application/pgp-signature") == 0)
action = GTK_TOGGLE_ACTION (ACTION (PGP_SIGN));
- else if (protocol && g_ascii_strcasecmp (protocol, "application/x-pkcs7-signature") == 0)
+ else if (g_ascii_strcasecmp (protocol, "application/x-pkcs7-signature") == 0)
action = GTK_TOGGLE_ACTION (ACTION (SMIME_SIGN));
if (action)
@@ -2393,7 +2457,6 @@ handle_multipart_signed (EMsgComposer *composer,
return;
content_type = camel_mime_part_get_content_type (mime_part);
-
content = camel_medium_get_content (CAMEL_MEDIUM (mime_part));
if (CAMEL_IS_MULTIPART (content)) {
@@ -2405,18 +2468,26 @@ handle_multipart_signed (EMsgComposer *composer,
here. */
if (CAMEL_IS_MULTIPART_SIGNED (content)) {
- /* handle the signed content and configure the composer to sign outgoing messages */
+ /* Handle the signed content and configure
+ * the composer to sign outgoing messages. */
handle_multipart_signed (composer, multipart, depth);
+
} else if (CAMEL_IS_MULTIPART_ENCRYPTED (content)) {
- /* decrypt the encrypted content and configure the composer to encrypt outgoing messages */
+ /* Decrypt the encrypted content and configure
+ * the composer to encrypt outgoing messages. */
handle_multipart_encrypted (composer, mime_part, depth);
+
} else if (camel_content_type_is (content_type, "multipart", "alternative")) {
- /* this contains the text/plain and text/html versions of the message body */
- handle_multipart_alternative (composer, multipart, depth);
+ /* This contains the text/plain and text/html
+ * versions of the message body. */
+ handle_multipart_alternative (
+ composer, multipart, depth);
+
} else {
- /* there must be attachments... */
+ /* There must be attachments... */
handle_multipart (composer, multipart, depth);
}
+
} else if (camel_content_type_is (content_type, "text", "*")) {
gchar *html;
gssize length;
@@ -2480,18 +2551,27 @@ handle_multipart_encrypted (EMsgComposer *composer,
here. */
if (CAMEL_IS_MULTIPART_SIGNED (content)) {
- /* handle the signed content and configure the composer to sign outgoing messages */
- handle_multipart_signed (composer, content_multipart, depth);
+ /* Handle the signed content and configure the
+ * composer to sign outgoing messages. */
+ handle_multipart_signed (
+ composer, content_multipart, depth);
+
} else if (CAMEL_IS_MULTIPART_ENCRYPTED (content)) {
- /* decrypt the encrypted content and configure the composer to encrypt outgoing messages */
+ /* Decrypt the encrypted content and configure the
+ * composer to encrypt outgoing messages. */
handle_multipart_encrypted (composer, mime_part, depth);
+
} else if (camel_content_type_is (content_type, "multipart", "alternative")) {
- /* this contains the text/plain and text/html versions of the message body */
- handle_multipart_alternative (composer, content_multipart, depth);
+ /* This contains the text/plain and text/html
+ * versions of the message body. */
+ handle_multipart_alternative (
+ composer, content_multipart, depth);
+
} else {
- /* there must be attachments... */
+ /* There must be attachments... */
handle_multipart (composer, content_multipart, depth);
}
+
} else if (camel_content_type_is (content_type, "text", "*")) {
gchar *html;
gssize length;
@@ -2535,15 +2615,22 @@ handle_multipart_alternative (EMsgComposer *composer,
mp = CAMEL_MULTIPART (content);
if (CAMEL_IS_MULTIPART_SIGNED (content)) {
- /* handle the signed content and configure the composer to sign outgoing messages */
+ /* Handle the signed content and configure
+ * the composer to sign outgoing messages. */
handle_multipart_signed (composer, mp, depth + 1);
+
} else if (CAMEL_IS_MULTIPART_ENCRYPTED (content)) {
- /* decrypt the encrypted content and configure the composer to encrypt outgoing messages */
- handle_multipart_encrypted (composer, mime_part, depth + 1);
+ /* Decrypt the encrypted content and configure
+ * the composer to encrypt outgoing messages. */
+ handle_multipart_encrypted (
+ composer, mime_part, depth + 1);
+
} else {
- /* depth doesn't matter so long as we don't pass 0 */
+ /* Depth doesn't matter so long as we
+ * don't pass 0. */
handle_multipart (composer, mp, depth + 1);
}
+
} else if (camel_content_type_is (content_type, "text", "html")) {
/* text/html is preferable, so once we find it we're done... */
text_part = mime_part;
@@ -2595,17 +2682,26 @@ handle_multipart (EMsgComposer *composer,
mp = CAMEL_MULTIPART (content);
if (CAMEL_IS_MULTIPART_SIGNED (content)) {
- /* handle the signed content and configure the composer to sign outgoing messages */
+ /* Handle the signed content and configure
+ * the composer to sign outgoing messages. */
handle_multipart_signed (composer, mp, depth + 1);
+
} else if (CAMEL_IS_MULTIPART_ENCRYPTED (content)) {
- /* decrypt the encrypted content and configure the composer to encrypt outgoing messages */
- handle_multipart_encrypted (composer, mime_part, depth + 1);
+ /* Decrypt the encrypted content and configure
+ * the composer to encrypt outgoing messages. */
+ handle_multipart_encrypted (
+ composer, mime_part, depth + 1);
+
} else if (camel_content_type_is (content_type, "multipart", "alternative")) {
- handle_multipart_alternative (composer, mp, depth + 1);
+ handle_multipart_alternative (
+ composer, mp, depth + 1);
+
} else {
- /* depth doesn't matter so long as we don't pass 0 */
+ /* Depth doesn't matter so long as we
+ * don't pass 0. */
handle_multipart (composer, mp, depth + 1);
}
+
} else if (depth == 0 && i == 0) {
gchar *html;
gssize length;
@@ -2701,7 +2797,8 @@ e_msg_composer_new_with_message (CamelMimeMessage *message)
}
/* Restore the Account preference */
- account_name = (gchar *) camel_medium_get_header (CAMEL_MEDIUM (message), "X-Evolution-Account");
+ account_name = (gchar *) camel_medium_get_header (
+ CAMEL_MEDIUM (message), "X-Evolution-Account");
if (account_name) {
account_name = g_strdup (account_name);
g_strstrip (account_name);
@@ -2914,16 +3011,23 @@ e_msg_composer_new_with_message (CamelMimeMessage *message)
content_type = camel_mime_part_get_content_type (CAMEL_MIME_PART (message));
if (CAMEL_IS_MULTIPART_SIGNED (content)) {
- /* handle the signed content and configure the composer to sign outgoing messages */
+ /* Handle the signed content and configure the
+ * composer to sign outgoing messages. */
handle_multipart_signed (composer, multipart, 0);
+
} else if (CAMEL_IS_MULTIPART_ENCRYPTED (content)) {
- /* decrypt the encrypted content and configure the composer to encrypt outgoing messages */
- handle_multipart_encrypted (composer, CAMEL_MIME_PART (message), 0);
+ /* Decrypt the encrypted content and configure the
+ * composer to encrypt outgoing messages. */
+ handle_multipart_encrypted (
+ composer, CAMEL_MIME_PART (message), 0);
+
} else if (camel_content_type_is (content_type, "multipart", "alternative")) {
- /* this 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. */
handle_multipart_alternative (composer, multipart, 0);
+
} else {
- /* there must be attachments... */
+ /* There must be attachments... */
handle_multipart (composer, multipart, 0);
}
} else {
@@ -3328,7 +3432,9 @@ e_msg_composer_set_body (EMsgComposer *composer,
table = e_msg_composer_get_header_table (composer);
- buff = g_strconcat ("<b>(", _("The composer contains a non-text message body, which cannot be edited."), ")</b>", NULL);
+ buff = g_markup_printf_escaped ("<b>%s</b>",
+ _("The composer contains a non-text "
+ "message body, which cannot be edited."));
set_editor_text (composer, buff, FALSE);
g_free (buff);
gtkhtml_editor_set_html_mode (GTKHTML_EDITOR (composer), FALSE);