From dd5b534edcb22912f505a0ead0ad1ac944d5165a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sergio=20Villar=20Sen=C3=ADn?= Date: Thu, 14 Jan 2010 21:39:19 +0100 Subject: [PATCH] Use non-localized reply and forward prefixes Fixes NB#142363 --- src/modest-text-utils.c | 72 ++++++++++++++++------------------------------- 1 file changed, 25 insertions(+), 47 deletions(-) diff --git a/src/modest-text-utils.c b/src/modest-text-utils.c index c244d44..7b60998 100644 --- a/src/modest-text-utils.c +++ b/src/modest-text-utils.c @@ -302,8 +302,7 @@ modest_text_utils_derived_subject (const gchar *subject, gboolean is_reply) gchar *tmp, *subject_dup, *retval, *prefix; const gchar *untranslated_prefix; gint prefix_len, untranslated_prefix_len; - gboolean translated_found = FALSE; - gboolean first_time; + gboolean found = FALSE; if (!subject || subject[0] == '\0') subject = _("mail_va_no_subject"); @@ -318,54 +317,33 @@ modest_text_utils_derived_subject (const gchar *subject, gboolean is_reply) 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 */ - 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; - - /* We need this to properly check the cases of - some clients adding FW: instead of Fw: for - example */ - prefix_down = g_utf8_strdown (prefix, -1); - tmp_down = g_utf8_strdown (tmp, -1); - if (g_str_has_prefix (tmp_down, prefix_down)) { - tmp += prefix_len; - tmp = g_strchug (tmp); - g_free (prefix_down); - g_free (tmp_down); - } else { - g_free (prefix_down); - g_free (tmp_down); - break; - } - } - first_time = FALSE; - } while (tmp); + if (g_str_has_prefix (tmp, prefix) || + g_str_has_prefix (tmp, untranslated_prefix)) { + found = TRUE; + } else { + gchar *prefix_down, *tmp_down, *untranslated_down; - if (!g_strcmp0 (subject, tmp)) { - /* normal case */ - retval = g_strdup_printf ("%s %s", untranslated_prefix, tmp); + prefix_down = g_utf8_strdown (prefix, -1); + untranslated_down = g_utf8_strdown (untranslated_prefix, -1); + tmp_down = g_utf8_strdown (tmp, -1); + if (g_str_has_prefix (tmp_down, prefix_down) || + g_str_has_prefix (tmp_down, untranslated_down) || + (!is_reply && g_str_has_prefix (tmp_down, "fwd:"))) + found = TRUE; + + g_free (prefix_down); + g_free (untranslated_down); + g_free (tmp_down); + } + + if (found) { + /* If the prefix is already present do not touch the subject */ + retval = subject_dup; } 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); - } + /* Normal case, add the prefix */ + retval = g_strdup_printf ("%s %s", untranslated_prefix, tmp); + g_free (subject_dup); } - g_free (subject_dup); g_free (prefix); return retval; -- 1.7.9.5