* src/modest-text-utils.c:
[modest] / src / modest-text-utils.c
index 2c09387..874c0f9 100644 (file)
@@ -100,11 +100,14 @@ static int      get_breakpoint          (const gchar * s, const gint indent, con
 
 static gchar*   modest_text_utils_quote_plain_text (const gchar *text, 
                                                    const gchar *cite, 
+                                                   const gchar *signature,
                                                    int limit);
 
 static gchar*   modest_text_utils_quote_html       (const gchar *text, 
-                                                   const gchar *cite, 
+                                                   const gchar *cite,
+                                                   const gchar *signature,
                                                    int limit);
+static gchar*   get_email_from_address (const gchar *address);
 
 
 /* ******************************************************************* */
@@ -129,9 +132,9 @@ modest_text_utils_quote (const gchar *text,
        if (content_type && strcmp (content_type, "text/html") == 0)
                /* TODO: extract the <body> of the HTML and pass it to
                   the function */
-               retval = modest_text_utils_quote_html (text, cited, limit);
+               retval = modest_text_utils_quote_html (text, cited, signature, limit);
        else
-               retval = modest_text_utils_quote_plain_text (text, cited, limit);
+               retval = modest_text_utils_quote_plain_text (text, cited, signature, limit);
        
        g_free (cited);
 
@@ -146,7 +149,7 @@ modest_text_utils_cite (const gchar *text,
                        const gchar *from,
                        time_t sent_date)
 {
-       gchar *tmp, *retval;
+       gchar *retval;
        gchar *tmp_sig;
 
        g_return_val_if_fail (text, NULL);
@@ -160,10 +163,8 @@ modest_text_utils_cite (const gchar *text,
                tmp_sig = g_strdup (signature);
        }
 
-       tmp = cite (sent_date, from);
-       retval = g_strdup_printf ("%s%s%s\n", tmp_sig, tmp, text);
+       retval = g_strdup_printf ("\n%s\n", tmp_sig);
        g_free (tmp_sig);
-       g_free (tmp);
 
        return retval;
 }
@@ -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 = "";
@@ -233,7 +234,6 @@ modest_text_utils_strftime(char *s, gsize max, const char *fmt, time_t timet)
         *   g_date_set_time_t (&date, timet);
         */
        localtime_r (&timet, &tm);
-
        return strftime(s, max, fmt, &tm);
 }
 
@@ -262,15 +262,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 +284,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 +295,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);
 
@@ -683,6 +689,7 @@ cite (const time_t sent_date, const gchar *from)
 static gchar *
 modest_text_utils_quote_plain_text (const gchar *text, 
                                    const gchar *cite, 
+                                   const gchar *signature,
                                    int limit)
 {
        const gchar *iter;
@@ -734,24 +741,44 @@ modest_text_utils_quote_plain_text (const gchar *text,
                g_string_free (l, TRUE);
        } while ((iter < text + len) || (remaining->str[0]));
 
+       if (signature != NULL) {
+               q = g_string_append_c (q, '\n');
+               q = g_string_append (q, signature);
+       }
+
        return g_string_free (q, FALSE);
 }
 
 static gchar*
 modest_text_utils_quote_html (const gchar *text, 
                              const gchar *cite, 
+                             const gchar *signature,
                              int limit)
 {
+       gchar *result = NULL;
+       gchar *signature_result = NULL;
        const gchar *format = \
                "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n" \
                "<html>\n" \
                "<body>\n" \
                "%s" \
                "<blockquote type=\"cite\">\n%s\n</blockquote>\n" \
+               "%s" \
                "</body>\n" \
                "</html>\n";
+       const gchar *signature_format =         \
+               "<pre>\n" \
+               "%s\n" \
+               "</pre>";
 
-       return g_strdup_printf (format, cite, text);
+       if (signature == NULL)
+               signature_result = g_strdup ("");
+       else
+               signature_result = g_strdup_printf (signature_format, signature);
+
+       result = g_strdup_printf (format, cite, text, signature_result);
+       g_free (signature_result);
+       return result;
 }
 
 static gint 
@@ -876,9 +903,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 */
@@ -964,14 +991,13 @@ modest_text_utils_get_display_date (time_t date)
        
        now = time (NULL);
 
-       modest_text_utils_strftime (date_buf, BUF_SIZE, "%d/%m/%Y", date);
-       modest_text_utils_strftime (now_buf,  BUF_SIZE, "%d/%m/%Y",  now); /* today */
-/*     modest_text_utils_strftime (date_buf, BUF_SIZE, "%x", date); */
-/*     modest_text_utils_strftime (now_buf,  BUF_SIZE, "%x",  now); /\* today *\/ */
+       /* use the localized dates */
+       modest_text_utils_strftime (date_buf, BUF_SIZE, "%x", date); 
+       modest_text_utils_strftime (now_buf,  BUF_SIZE, "%x", now); 
        
        /* if this is today, get the time instead of the date */
        if (strcmp (date_buf, now_buf) == 0)
-               modest_text_utils_strftime (date_buf, BUF_SIZE, "%H:%M %P", date);
+               modest_text_utils_strftime (date_buf, BUF_SIZE, "%X", date);
        
        return g_strdup(date_buf);
 }
@@ -1057,10 +1083,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 +1134,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);
 }