X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-text-utils.c;h=fb4da8426d6a96c8a42a6552903a0649aff382ee;hp=5aab3a3b6e71eb953faf11442f22ac0fecde3d89;hb=12a672c559d983c4e49a7e4054ee14c0177ecb1c;hpb=f065ac27e44ca355d02b24513e6695812bcf546c;ds=sidebyside diff --git a/src/modest-text-utils.c b/src/modest-text-utils.c index 5aab3a3..fb4da84 100644 --- a/src/modest-text-utils.c +++ b/src/modest-text-utils.c @@ -297,12 +297,13 @@ 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) +modest_text_utils_derived_subject (const gchar *subject, gboolean is_reply) { - gchar *tmp, *subject_dup, *retval; - gint prefix_len; - - g_return_val_if_fail (prefix, NULL); + gchar *tmp, *subject_dup, *retval, *prefix; + const gchar *untranslated_prefix; + gint prefix_len, untranslated_prefix_len; + gboolean translated_found = FALSE; + gboolean first_time; if (!subject || subject[0] == '\0') subject = _("mail_va_no_subject"); @@ -310,13 +311,27 @@ modest_text_utils_derived_subject (const gchar *subject, const gchar *prefix) subject_dup = g_strdup (subject); tmp = g_strchug (subject_dup); + prefix = (is_reply) ? _("mail_va_re") : _("mail_va_fw"); + prefix = g_strconcat (prefix, ":", NULL); + prefix_len = g_utf8_strlen (prefix, -1); + + untranslated_prefix = (is_reply) ? "Re:" : "Fw:"; + untranslated_prefix_len = 3; + /* We do not want things like "Re: Re: Re:" or "Fw: Fw:" so delete the previous ones */ - prefix_len = strlen (prefix); + first_time = TRUE; do { if (g_str_has_prefix (tmp, prefix)) { tmp += prefix_len; tmp = g_strchug (tmp); + /* Do not consider translated prefixes in the + middle of a Re:Re:..Re: like sequence */ + if (G_UNLIKELY (first_time)) + translated_found = TRUE; + } else if (g_str_has_prefix (tmp, untranslated_prefix)) { + tmp += untranslated_prefix_len; + tmp = g_strchug (tmp); } else { gchar *prefix_down, *tmp_down; @@ -336,10 +351,22 @@ modest_text_utils_derived_subject (const gchar *subject, const gchar *prefix) break; } } + first_time = FALSE; } while (tmp); - retval = g_strdup_printf ("%s %s", prefix, tmp); + if (!g_strcmp0 (subject, tmp)) { + /* normal case */ + retval = g_strdup_printf ("%s %s", untranslated_prefix, tmp); + } else { + if (translated_found) { + /* Found a translated prefix, i.e, "VS:" in Finish */ + retval = g_strdup_printf ("%s %s", prefix, tmp); + } else { + retval = g_strdup_printf ("%s %s", untranslated_prefix, tmp); + } + } g_free (subject_dup); + g_free (prefix); return retval; } @@ -489,7 +516,7 @@ modest_text_utils_convert_buffer_to_html_start (GString *html, const gchar *data guchar kar = data[i]; if (space_seen && kar != ' ') { - g_string_append (html, " "); + g_string_append (html, " "); space_seen = FALSE; } @@ -625,7 +652,7 @@ modest_text_utils_get_addresses_indexes (const gchar *addresses, GSList **start_ gchar *next_char = g_utf8_next_char (cur); if (!g_utf8_strchr (start, (cur - start + 1), g_utf8_get_char ("@")) && - next_char && *next_char != '\n') + next_char && *next_char != '\n' && *next_char != '\0') continue; start_index = g_new0 (gint, 1); @@ -2166,8 +2193,7 @@ static void quote_name_part (GString **str, gchar **cur, gchar **start) { gchar *blank; - gint str_len = g_utf8_pointer_to_offset (*start, *cur) - - g_utf8_pointer_to_offset (*start, *start); + gint str_len = *cur - *start; while (**start == ' ') { *start = g_utf8_next_char (*start); @@ -2182,13 +2208,9 @@ quote_name_part (GString **str, gchar **cur, gchar **start) *start = g_utf8_next_char (*cur); } else { *str = g_string_append_c (*str, '"'); - *str = g_string_append_len (*str, *start, - (g_utf8_pointer_to_offset (*start, blank) - - g_utf8_pointer_to_offset (*start, *start))); + *str = g_string_append_len (*str, *start, (blank - *start)); *str = g_string_append_c (*str, '"'); - *str = g_string_append_len (*str, blank, - (g_utf8_pointer_to_offset (*start, *cur) - - g_utf8_pointer_to_offset (*start, blank))); + *str = g_string_append_len (*str, blank, (*cur - blank)); *str = g_string_append (*str, ";"); *start = g_utf8_next_char (*cur); }