* Fixes NB#87102, append the signature at the end of the message
[modest] / src / modest-text-utils.c
index 8deb5cc..e2802d8 100644 (file)
@@ -360,17 +360,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 <a@a.com>"
+                  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 +386,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 +870,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 +920,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 +942,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;
@@ -951,7 +960,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 +1345,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 +1370,27 @@ 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_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")) {
+               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) {