2007-06-12 Murray Cumming <murrayc@murrayc.com>
[modest] / src / modest-text-utils.c
index 2c09387..d1cc2f6 100644 (file)
@@ -105,6 +105,7 @@ static gchar*   modest_text_utils_quote_plain_text (const gchar *text,
 static gchar*   modest_text_utils_quote_html       (const gchar *text, 
                                                    const gchar *cite, 
                                                    int limit);
+static gchar*   get_email_from_address (const gchar *address);
 
 
 /* ******************************************************************* */
@@ -206,7 +207,7 @@ modest_text_utils_inline (const gchar *text,
                if (!strcmp (content_type, "text/html")) {
                        formatted_signature = g_strconcat (signature, "<br/>", NULL);
                } else {
-                       formatted_signature = g_strconcat (signature, "\n");
+                       formatted_signature = g_strconcat (signature, "\n", NULL);
                }
        } else {
                formatted_signature = "";
@@ -262,15 +263,20 @@ modest_text_utils_remove_address (const gchar *address_list, const gchar *addres
 {
        gchar *dup, *token, *ptr, *result;
        GString *filtered_emails;
+       gchar *email_address;
 
        g_return_val_if_fail (address_list, NULL);
 
        if (!address)
                return g_strdup (address_list);
+
+       email_address = get_email_from_address (address);
        
        /* search for substring */
-       if (!strstr ((const char *) address_list, (const char *) address))
+       if (!strstr ((const char *) address_list, (const char *) email_address)) {
+               g_free (email_address);
                return g_strdup (address_list);
+       }
 
        dup = g_strdup (address_list);
        filtered_emails = g_string_new (NULL);
@@ -279,7 +285,7 @@ modest_text_utils_remove_address (const gchar *address_list, const gchar *addres
 
        while (token != NULL) {
                /* Add to list if not found */
-               if (!strstr ((const char *) token, (const char *) address)) {
+               if (!strstr ((const char *) token, (const char *) email_address)) {
                        if (filtered_emails->len == 0)
                                g_string_append_printf (filtered_emails, "%s", g_strstrip (token));
                        else
@@ -290,6 +296,7 @@ modest_text_utils_remove_address (const gchar *address_list, const gchar *addres
        result = filtered_emails->str;
 
        /* Clean */
+       g_free (email_address);
        g_free (dup);
        g_string_free (filtered_emails, FALSE);
 
@@ -876,9 +883,9 @@ modest_text_utils_get_display_address (gchar *address)
        
        if (!address)
                return NULL;
-
+       
        g_return_val_if_fail (g_utf8_validate (address, -1, NULL), NULL);
-
+       
        g_strchug (address); /* remove leading whitespace */
 
        /*  <email@address> from display name */
@@ -1057,10 +1064,14 @@ modest_text_utils_validate_recipient (const gchar *recipient)
                has_error = TRUE;
                for (; *current != '\0'; current = g_utf8_next_char (current)) {
                        if (*current == '\\') {
+                               /* TODO: This causes a warning, which breaks the build, 
+                                * because a gchar cannot be < 0.
+                                * murrayc. 
                                if (current[1] <0) {
                                        has_error = TRUE;
                                        break;
                                }
+                               */
                        } else if (*current == '\"') {
                                has_error = FALSE;
                                current = g_utf8_next_char (current);
@@ -1104,22 +1115,38 @@ modest_text_utils_validate_recipient (const gchar *recipient)
 
 
 gchar *
-modest_text_utils_get_display_size (guint size)
+modest_text_utils_get_display_size (guint64 size)
 {
        const guint KB=1024;
        const guint MB=1024 * KB;
        const guint GB=1024 * MB;
 
+       if (size == 0)
+               return g_strdup_printf(_FM("sfil_li_size_kb"), 0);
        if (0 < size && size < KB)
                return g_strdup_printf (_FM("sfil_li_size_kb"), 1);
        else if (KB <= size && size < 100 * KB)
                return g_strdup_printf (_FM("sfil_li_size_1kb_99kb"), size / KB);
        else if (100*KB <= size && size < MB)
-               return g_strdup_printf (_FM("sfil_li_size_100kb_1mb"), size / MB);
+               return g_strdup_printf (_FM("sfil_li_size_100kb_1mb"), (float) size / MB);
        else if (MB <= size && size < 10*MB)
-               return g_strdup_printf (_FM("sfil_li_size_1mb_10mb"), size / MB);
+               return g_strdup_printf (_FM("sfil_li_size_1mb_10mb"), (float) size / MB);
        else if (10*MB <= size && size < GB)
                return g_strdup_printf (_FM("sfil_li_size_10mb_1gb"), size / MB);
        else
-               return g_strdup_printf (_FM("sfil_li_size_1gb_or_greater"), size / GB); 
+               return g_strdup_printf (_FM("sfil_li_size_1gb_or_greater"), (float) size / GB); 
+}
+
+static gchar *
+get_email_from_address (const gchar * address)
+{
+       gchar *left_limit, *right_limit;
+
+       left_limit = strstr (address, "<");
+       right_limit = g_strrstr (address, ">");
+
+       if ((left_limit == NULL)||(right_limit == NULL)|| (left_limit > right_limit))
+               return g_strdup (address);
+       else
+               return g_strndup (left_limit + 1, (right_limit - left_limit) - 1);
 }