* src/modest-text-utils.[ch]:
[modest] / src / modest-text-utils.c
index 24d42de..f35a127 100644 (file)
@@ -100,11 +100,16 @@ 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,
+                                                   GList *attachments, 
                                                    int limit);
 
 static gchar*   modest_text_utils_quote_html       (const gchar *text, 
-                                                   const gchar *cite, 
+                                                   const gchar *cite,
+                                                   const gchar *signature,
+                                                   GList *attachments,
                                                    int limit);
+static gchar*   get_email_from_address (const gchar *address);
 
 
 /* ******************************************************************* */
@@ -117,6 +122,7 @@ modest_text_utils_quote (const gchar *text,
                         const gchar *signature,
                         const gchar *from,
                         const time_t sent_date, 
+                        GList *attachments,
                         int limit)
 {
        gchar *retval, *cited;
@@ -129,9 +135,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, attachments, limit);
        else
-               retval = modest_text_utils_quote_plain_text (text, cited, limit);
+               retval = modest_text_utils_quote_plain_text (text, cited, signature, attachments, limit);
        
        g_free (cited);
 
@@ -146,7 +152,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 +166,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;
 }
@@ -233,7 +237,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 +265,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 +287,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 +298,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);
 
@@ -325,7 +334,7 @@ modest_text_utils_convert_buffer_to_html (GString *html, const gchar *data)
                case '\t' : g_string_append (html, "&nbsp;&nbsp;&nbsp; "); break; /* note the space at the end*/
                case ' ':
                        if (space_seen) { /* second space in a row */
-                               g_string_append (html, "&nbsp ");
+                               g_string_append (html, "&nbsp; ");
                                space_seen = FALSE;
                        } else
                                space_seen = TRUE;
@@ -670,28 +679,40 @@ get_breakpoint (const gchar * s, const gint indent, const gint limit)
 static gchar *
 cite (const time_t sent_date, const gchar *from)
 {
-       gchar sent_str[101];
-
-       /* format sent_date */
-       modest_text_utils_strftime (sent_str, 100, "%c", sent_date);
-       return g_strdup_printf (N_("On %s, %s wrote:\n"), 
-                               sent_str, 
-                               (from) ? from : EMPTY_STRING);
+       return g_strdup (_("mcen_ia_editor_original_message"));
 }
 
+static gchar *
+quoted_attachments (GList *attachments)
+{
+       GList *node = NULL;
+       GString *result = g_string_new ("");
+       for (node = attachments; node != NULL; node = g_list_next (node)) {
+               gchar *filename = (gchar *) node->data;
+               g_string_append_printf ( result, "%s %s\n", _("mcen_ia_editor_attach_filename"), filename);
+       }
+
+       return g_string_free (result, FALSE);
+
+}
 
 static gchar *
 modest_text_utils_quote_plain_text (const gchar *text, 
                                    const gchar *cite, 
+                                   const gchar *signature,
+                                   GList *attachments,
                                    int limit)
 {
        const gchar *iter;
        gint indent, breakpoint, rem_indent = 0;
        GString *q, *l, *remaining;
        gsize len;
+       gchar *attachments_string = NULL;
 
        /* remaining will store the rest of the line if we have to break it */
-       q = g_string_new (cite);
+       q = g_string_new ("\n");
+       q = g_string_append (q, cite);
+       q = g_string_append_c (q, '\n');
        remaining = g_string_new ("");
 
        iter = text;
@@ -734,24 +755,53 @@ modest_text_utils_quote_plain_text (const gchar *text,
                g_string_free (l, TRUE);
        } while ((iter < text + len) || (remaining->str[0]));
 
+       attachments_string = quoted_attachments (attachments);
+       q = g_string_append (q, attachments_string);
+       g_free (attachments_string);
+
+       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,
+                             GList *attachments,
                              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" \
+               "<br/>%s<br/>" \
+               "<pre>%s<br/>%s<br/>%s</pre>\n" \
                "</body>\n" \
                "</html>\n";
+       gchar *attachments_string = NULL;
+       gchar *q_attachments_string = NULL;
+       gchar *html_text = NULL;
 
-       return g_strdup_printf (format, cite, text);
+       if (signature == NULL)
+               signature_result = g_strdup ("");
+       else
+               signature_result = modest_text_utils_convert_to_html_body (signature);
+
+       attachments_string = quoted_attachments (attachments);
+       q_attachments_string = modest_text_utils_convert_to_html_body (attachments_string);
+       html_text = modest_text_utils_convert_to_html_body (text);
+       result = g_strdup_printf (format, signature_result, cite, html_text, q_attachments_string);
+       g_free (html_text);
+       g_free (attachments_string);
+       g_free (q_attachments_string);
+       g_free (signature_result);
+       return result;
 }
 
 static gint 
@@ -964,14 +1014,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);
 }
@@ -1121,11 +1170,25 @@ modest_text_utils_get_display_size (guint64 size)
        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);
 }