X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-tny-msg.c;h=b7de9db59c0d61766f930ecb865d3ed0f5568df1;hp=b56ef3ab2483f7ecb7f927e8f66841ebfaf76a62;hb=e2769fe7a2bfef7080c538f3f98f6fd5520f45ac;hpb=0b89af7ad6d3143f55dddb1407d5f05fbbe4116f diff --git a/src/modest-tny-msg.c b/src/modest-tny-msg.c index b56ef3a..b7de9db 100644 --- a/src/modest-tny-msg.c +++ b/src/modest-tny-msg.c @@ -685,7 +685,7 @@ create_reply_forward_mail (TnyMsg *msg, TnyHeader *header, const gchar *from, /* when we're reply, include the text part if we have it, or nothing otherwise. */ if (is_reply) - new_msg = modest_formatter_quote (formatter, no_text_part ? NULL: body, header, + new_msg = modest_formatter_quote (formatter, body, header, attachments); else { if (no_text_part || (html_body && (strcmp (tny_mime_part_get_content_type (html_body), "text/html")==0))) { @@ -920,6 +920,38 @@ count_addresses (const gchar* addresses) return count; } +static void +remove_undisclosed_recipients (gchar **recipients) +{ + GSList *addresses, *node; + gboolean is_first; + GString *result; + + g_return_if_fail (recipients); + addresses = modest_text_utils_split_addresses_list (*recipients); + + is_first = TRUE; + result = g_string_new (""); + for (node = addresses; node != NULL; node = g_slist_next (node)) { + const gchar *address = (const gchar *) node->data; + + if (address && strstr (address, "undisclosed-recipients")) + continue; + + if (is_first) + is_first = FALSE; + else + result = g_string_append (result, ", "); + + result = g_string_append (result, address); + } + g_slist_foreach (addresses, (GFunc)g_free, NULL); + g_slist_free (addresses); + + g_free (*recipients); + *recipients = g_string_free (result, FALSE); +} + /* get the new To:, based on the old header, * result is newly allocated or NULL in case of error @@ -996,6 +1028,7 @@ get_new_to (TnyMsg *msg, TnyHeader *header, const gchar* from, } tmp = modest_text_utils_simplify_recipients (new_to); + remove_undisclosed_recipients (&tmp); g_free (new_to); new_to = tmp; @@ -1006,7 +1039,7 @@ get_new_to (TnyMsg *msg, TnyHeader *header, const gchar* from, /* get the new Cc:, based on the old header, * result is newly allocated or NULL in case of error */ static gchar* -get_new_cc (TnyHeader *header, const gchar* from) +get_new_cc (TnyHeader *header, const gchar* from, const gchar *new_to) { gchar *old_cc, *result, *dup; @@ -1016,8 +1049,27 @@ get_new_cc (TnyHeader *header, const gchar* from) /* remove me (the new From:) from the Cc: list */ dup = modest_text_utils_remove_address (old_cc, from); + + if (new_to) { + gchar **to_parts, **current; + + to_parts = g_strsplit (new_to, ",", 0); + for (current = to_parts; current && *current != '\0'; current++) { + gchar *dup2; + + dup2 = modest_text_utils_remove_address (dup, g_strstrip (*current)); + g_free (dup); + dup = dup2; + } + g_strfreev (to_parts); + } + result = modest_text_utils_remove_duplicate_addresses (dup); g_free (dup); + dup = result; + result = modest_text_utils_simplify_recipients (dup); + remove_undisclosed_recipients (&result); + g_free (dup); g_free (old_cc); return result; } @@ -1171,17 +1223,19 @@ modest_tny_msg_create_reply_msg (TnyMsg *msg, g_debug ("%s: failed to get new To:", __FUNCTION__); else { tny_header_set_to (new_header, new_to); - g_free (new_to); } if (reply_mode == MODEST_TNY_MSG_REPLY_MODE_ALL) { - gchar *new_cc = get_new_cc (header, from); + gchar *new_cc = get_new_cc (header, from, new_to); if (new_cc) { tny_header_set_cc (new_header, new_cc); g_free (new_cc); } } + if (new_to) + g_free (new_to); + /* Clean */ g_object_unref (G_OBJECT (new_header)); g_object_unref (G_OBJECT (header)); @@ -1254,11 +1308,15 @@ modest_tny_msg_header_get_all_recipients_list (TnyHeader *header) { GSList *recipients = NULL; gchar *from = NULL, *to = NULL, *cc = NULL, *bcc = NULL; - gchar *tmp = NULL, *old_tmp = NULL; + gchar *after_remove; + GString *buffer; + gboolean add_separator = TRUE; if (header == NULL) return NULL; + buffer = g_string_new (""); + from = tny_header_dup_from (header); to = tny_header_dup_to (header); cc = tny_header_dup_cc (header); @@ -1266,32 +1324,39 @@ modest_tny_msg_header_get_all_recipients_list (TnyHeader *header) recipients = NULL; if (from) { - tmp = g_strdup (from); - old_tmp = tmp; - g_free (from); + buffer = g_string_append (buffer, from); + add_separator = TRUE; } if (to) { - tmp = g_strjoin ("; ", old_tmp, to, NULL); - g_free (old_tmp); - old_tmp = tmp; - g_free (to); + if (add_separator) + buffer = g_string_append (buffer, "; "); + else + add_separator = TRUE; + + buffer = g_string_append (buffer, to); } if (cc) { - tmp = g_strjoin ("; ", old_tmp, cc, NULL); - g_free (old_tmp); - old_tmp = tmp; - g_free (cc); + if (add_separator) + buffer = g_string_append (buffer, "; "); + else + add_separator = TRUE; + + buffer = g_string_append (buffer, cc); } if (bcc) { - tmp = g_strjoin ("; ", old_tmp, bcc, NULL); - g_free (old_tmp); - old_tmp = tmp; - g_free (bcc); + if (add_separator) + buffer = g_string_append (buffer, "; "); + else + add_separator = TRUE; + + buffer = g_string_append (buffer, bcc); } - old_tmp = modest_text_utils_remove_duplicate_addresses (tmp); - recipients = modest_text_utils_split_addresses_list (old_tmp); - g_free (tmp); + after_remove = modest_text_utils_remove_duplicate_addresses (buffer->str); + g_string_free (buffer, TRUE); + + recipients = modest_text_utils_split_addresses_list (after_remove); + g_free (after_remove); return recipients; }