* Fixes NB#87346 do not generate nested "Fw:" or "Re:"
[modest] / src / modest-text-utils.c
index 6ef698a..6e89e71 100644 (file)
@@ -288,21 +288,33 @@ modest_text_utils_strftime(char *s, gsize max, const char *fmt, time_t timet)
 gchar *
 modest_text_utils_derived_subject (const gchar *subject, const gchar *prefix)
 {
-       gchar *tmp;
+       gchar *tmp, *subject_dup, *retval;
+       gint prefix_len;
 
        g_return_val_if_fail (prefix, NULL);
 
        if (!subject || subject[0] == '\0')
                subject = _("mail_va_no_subject");
 
-       tmp = g_strchug (g_strdup (subject));
+       subject_dup = g_strdup (subject);
+       tmp = g_strchug (subject_dup);
 
-       if (!strncmp (tmp, prefix, strlen (prefix))) {
-               return tmp;
-       } else {
-               g_free (tmp);
-               return g_strdup_printf ("%s %s", prefix, subject);
-       }
+       /* We do not want things like "Re: Re: Re:" or "Fw: Fw:" so
+          delete the previous ones */
+       prefix_len = strlen (prefix);
+       do {
+               if (g_str_has_prefix (tmp, prefix)) {
+                       tmp += prefix_len;
+                       tmp = g_strchug (tmp);
+               } else {
+                       break;
+               }
+       } while (tmp);
+
+       retval = g_strdup_printf ("%s %s", prefix, tmp);
+       g_free (subject_dup);
+
+       return retval;
 }
 
 gchar*
@@ -870,10 +882,6 @@ modest_text_utils_quote_plain_text (const gchar *text,
        gchar *attachments_string = NULL;
 
        q = g_string_new ("\n");
-       if (signature != NULL) {
-               q = g_string_append (q, signature);
-               q = g_string_append_c (q, '\n');
-       }
        q = g_string_append (q, cite);
        q = g_string_append_c (q, '\n');
 
@@ -924,6 +932,12 @@ modest_text_utils_quote_plain_text (const gchar *text,
        q = g_string_append (q, attachments_string);
        g_free (attachments_string);
 
+       if (signature != NULL) {
+               q = g_string_append (q, "\n--\n");
+               q = g_string_append (q, signature);
+               q = g_string_append_c (q, '\n');
+       }
+
        return g_string_free (q, FALSE);
 }
 
@@ -940,8 +954,8 @@ modest_text_utils_quote_html (const gchar *text,
                "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n" \
                "<html>\n" \
                "<body>\n" \
-               "<br/>%s<br/>" \
                "<pre>%s<br/>%s<br/>%s</pre>\n" \
+               "<br/>--<br/>%s<br/>\n" \
                "</body>\n" \
                "</html>\n";
        gchar *attachments_string = NULL;
@@ -958,7 +972,7 @@ modest_text_utils_quote_html (const gchar *text,
        q_attachments_string = modest_text_utils_convert_to_html_body (attachments_string, -1, TRUE);
        q_cite = modest_text_utils_convert_to_html_body (cite, -1, TRUE);
        html_text = modest_text_utils_convert_to_html_body (text, -1, TRUE);
-       result = g_strdup_printf (format, signature_result, q_cite, html_text, q_attachments_string);
+       result = g_strdup_printf (format, q_cite, html_text, q_attachments_string, signature_result);
        g_free (q_cite);
        g_free (html_text);
        g_free (attachments_string);
@@ -1371,10 +1385,8 @@ modest_text_utils_validate_folder_name (const gchar *folder_name)
 
        /* Cannot contain Windows port numbers. I'd like to use GRegex
           but it's still not available in Maemo. sergio */
-       if (g_str_has_prefix (folder_name, "LTP") ||
-           g_str_has_prefix (folder_name, "ltp") ||
-           g_str_has_prefix (folder_name, "COM") ||
-           g_str_has_prefix (folder_name, "com")) {
+       if (g_ascii_strncasecmp (folder_name, "LPT", 3) ||
+           g_ascii_strncasecmp (folder_name, "COM", 3)) {
                glong val;
                gchar *endptr;