X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-text-utils.c;h=6e89e717135415270799cb8f2019b1183dc4db1e;hp=8deb5cc2b29abb5de54f1a9da66af22077d73c83;hb=4f233ba7d5d71cd8cb848fd2e88b63ce6bc6fc21;hpb=b82646213f0d683e64a8a3b115d69fb0d243cd2e diff --git a/src/modest-text-utils.c b/src/modest-text-utils.c index 8deb5cc..6e89e71 100644 --- a/src/modest-text-utils.c +++ b/src/modest-text-utils.c @@ -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* @@ -360,17 +372,24 @@ modest_text_utils_remove_duplicate_addresses (const gchar *address_list) g_return_val_if_fail (address_list, NULL); - table = g_hash_table_new (g_str_hash, g_str_equal); + table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); addresses = modest_text_utils_split_addresses_list (address_list); cursor = addresses; while (cursor) { const gchar* address = (const gchar*)cursor->data; + /* We need only the email to just compare it and not + the full address which would make "a " + different from "a@a.com" */ + const gchar *email = get_email_from_address (address); + /* ignore the address if already seen */ - if (g_hash_table_lookup (table, address) == 0) { + if (g_hash_table_lookup (table, email) == 0) { gchar *tmp; + /* Include the full address and not only the + email in the returned list */ if (!new_list) { tmp = g_strdup (address); } else { @@ -379,12 +398,12 @@ modest_text_utils_remove_duplicate_addresses (const gchar *address_list) } new_list = tmp; - g_hash_table_insert (table, (gchar*)address, GINT_TO_POINTER(1)); + g_hash_table_insert (table, (gchar*)email, GINT_TO_POINTER(1)); } cursor = g_slist_next (cursor); } - g_hash_table_destroy (table); + g_hash_table_unref (table); g_slist_foreach (addresses, (GFunc)g_free, NULL); g_slist_free (addresses); @@ -863,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'); @@ -917,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); } @@ -933,8 +954,8 @@ modest_text_utils_quote_html (const gchar *text, "\n" \ "\n" \ "\n" \ - "
%s
" \ "
%s
%s
%s
\n" \ + "
--
%s
\n" \ "\n" \ "\n"; gchar *attachments_string = NULL; @@ -951,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); @@ -1336,9 +1357,8 @@ modest_text_utils_validate_folder_name (const gchar *folder_name) gint i; const gchar **cursor = NULL; const gchar *forbidden_names[] = { /* windows does not like these */ - "CON", "PRN", "AUX", "NUL", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", - "COM7", "COM8", "COM9", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9", - ".", "..", "cur", "tmp", "new", NULL /* cur, tmp new are reserved for Maildir */ + "CON", "PRN", "AUX", "NUL", ".", "..", "cur", "tmp", "new", + NULL /* cur, tmp, new are reserved for Maildir */ }; /* cannot be NULL */ @@ -1362,6 +1382,25 @@ modest_text_utils_validate_folder_name (const gchar *folder_name) for (i = 0; i < len; i++) if (modest_text_utils_is_forbidden_char (folder_name[i], FOLDER_NAME_FORBIDDEN_CHARS)) return FALSE; + + /* Cannot contain Windows port numbers. I'd like to use GRegex + but it's still not available in Maemo. sergio */ + if (g_ascii_strncasecmp (folder_name, "LPT", 3) || + g_ascii_strncasecmp (folder_name, "COM", 3)) { + glong val; + gchar *endptr; + + /* We skip the first 3 characters for the + comparison */ + val = strtol(folder_name+3, &endptr, 10); + + /* If the conversion to long succeeded then the string + is not valid for us */ + if (*endptr == '\0') + return FALSE; + else + return TRUE; + } /* cannot contain a forbidden word */ if (len <= 4) {