X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-text-utils.c;h=62bd6bb5c8c38d295989a1c794af9b2dd6999c08;hp=ba1ac547b5f7f4f31dc1ef7bbddc80d178bc8f69;hb=e45958deaf9701399c552ea0d84c2447efacd4ca;hpb=dc52d5899681c227497f50833f650d9cc7c64fe7
diff --git a/src/modest-text-utils.c b/src/modest-text-utils.c
index ba1ac54..62bd6bb 100644
--- a/src/modest-text-utils.c
+++ b/src/modest-text-utils.c
@@ -63,7 +63,7 @@
* will hang modest
*/
#define HYPERLINKIFY_MAX_LENGTH (1024*50)
-
+#define SIGNATURE_MARKER "--"
/*
@@ -215,11 +215,11 @@ modest_text_utils_cite (const gchar *text,
if (!signature)
retval = g_strdup ("");
else if (strcmp(content_type, "text/html") == 0) {
- tmp_sig = g_strconcat ("\n", signature, NULL);
+ tmp_sig = g_strconcat ("\n", SIGNATURE_MARKER,"\n", signature, NULL);
retval = modest_text_utils_convert_to_html_body(tmp_sig, -1, TRUE);
g_free (tmp_sig);
} else {
- retval = g_strconcat (text, "\n", signature, NULL);
+ retval = g_strconcat (text, "\n", SIGNATURE_MARKER, "\n", signature, NULL);
}
return retval;
@@ -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*
@@ -869,11 +881,14 @@ modest_text_utils_quote_plain_text (const gchar *text,
gsize len;
gchar *attachments_string = NULL;
- q = g_string_new ("\n");
+ q = g_string_new ("");
+
if (signature != NULL) {
+ q = g_string_append (q, "\n--\n");
q = g_string_append (q, signature);
- q = g_string_append_c (q, '\n');
}
+
+ q = g_string_append (q, "\n");
q = g_string_append (q, cite);
q = g_string_append_c (q, '\n');
@@ -927,6 +942,17 @@ modest_text_utils_quote_plain_text (const gchar *text,
return g_string_free (q, FALSE);
}
+static void
+quote_html_add_to_gstring (GString *string,
+ const gchar *text)
+{
+ if (text && strcmp (text, "")) {
+ gchar *html_text = modest_text_utils_convert_to_html_body (text, -1, TRUE);
+ g_string_append_printf (string, "%s
", html_text);
+ g_free (html_text);
+ }
+}
+
static gchar*
modest_text_utils_quote_html (const gchar *text,
const gchar *cite,
@@ -934,38 +960,33 @@ modest_text_utils_quote_html (const gchar *text,
GList *attachments,
int limit)
{
- gchar *result = NULL;
- gchar *signature_result = NULL;
- const gchar *format = \
- "\n" \
- "\n" \
- "
%s\n" \ - "\n" \ - "\n"; - gchar *attachments_string = NULL; - gchar *q_attachments_string = NULL; - gchar *q_cite = NULL; - gchar *html_text = NULL; - - if (signature == NULL) - signature_result = g_strdup (""); - else - signature_result = modest_text_utils_convert_to_html_body (signature, -1, TRUE); + GString *result_string; + + result_string = + g_string_new ( \ + "\n" \ + "\n" \ + "\n
%s
%s
\n"); + if (signature) { + quote_html_add_to_gstring (result_string, SIGNATURE_MARKER); + quote_html_add_to_gstring (result_string, signature); + } + quote_html_add_to_gstring (result_string, cite); + quote_html_add_to_gstring (result_string, text); + if (attachments) { + gchar *attachments_string = quoted_attachments (attachments); + quote_html_add_to_gstring (result_string, attachments_string); + g_free (attachments_string); + } + g_string_append (result_string, ""); + } + g_string_append (result_string, ""); + g_string_append (result_string, ""); - attachments_string = quoted_attachments (attachments); - 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); - g_free (q_cite); - g_free (html_text); - g_free (attachments_string); - g_free (q_attachments_string); - g_free (signature_result); - - return result; + return g_string_free (result_string, FALSE); } static gint @@ -1248,7 +1269,7 @@ modest_text_utils_get_subject_prefix_len (const gchar *sub) int c = prefix_len + 1; while (sub[c] && sub[c] != ']') ++c; - if (sub[c]) + if (!sub[c]) return 0; /* no end to the ']' found */ else prefix_len = c + 1; @@ -1283,7 +1304,8 @@ modest_text_utils_utf8_strcmp (const gchar* s1, const gchar *s2, gboolean insens if (!insensitive) { /* optimization: shortcut if first char is ascii */ - if (((s1[0] & 0xf0)== 0) && ((s2[0] & 0xf0) == 0)) + if (((s1[0] & 0x80)== 0) && ((s2[0] & 0x80) == 0) && + (s1[0] != s2[0])) return s1[0] - s2[0]; return g_utf8_collate (s1, s2); @@ -1292,8 +1314,9 @@ modest_text_utils_utf8_strcmp (const gchar* s1, const gchar *s2, gboolean insens gint result; gchar *n1, *n2; - /* optimization: short cut iif first char is ascii */ - if (((s1[0] & 0xf0) == 0) && ((s2[0] & 0xf0) == 0)) + /* optimization: shortcut if first char is ascii */ + if (((s1[0] & 0x80) == 0) && ((s2[0] & 0x80) == 0) && + (s1[0] != s2[0])) return tolower(s1[0]) - tolower(s2[0]); n1 = g_utf8_strdown (s1, -1); @@ -1343,9 +1366,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 */ @@ -1369,6 +1391,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) {