* src/maemo/modest-msg-view-window.c:
[modest] / src / modest-tny-msg.c
index 437d79e..48b2108 100644 (file)
@@ -179,9 +179,9 @@ add_body_part (TnyMsg *msg,
 
        /* Construct MIME part */
        tny_stream_reset (text_body_stream);
-       tny_mime_part_construct_from_stream (text_body_part,
-                                            text_body_stream,
-                                            content_type);
+       tny_mime_part_construct (text_body_part,
+                                text_body_stream,
+                                content_type, "7bit");
        tny_stream_reset (text_body_stream);
 
        g_object_unref (G_OBJECT(text_body_part));
@@ -209,9 +209,11 @@ add_html_body_part (TnyMsg *msg,
 
        /* Construct MIME part */
        tny_stream_reset (html_body_stream);
-       tny_mime_part_construct_from_stream (html_body_part,
-                                            html_body_stream,
-                                            "text/html; charset=utf-8");
+       tny_mime_part_construct (html_body_part,
+                                html_body_stream,
+                                "text/html; charset=utf-8", 
+                                "7bit"); /* Sometimes it might be needed 
+                                            to make this one a 8bit! */
        tny_stream_reset (html_body_stream);
 
        g_object_unref (G_OBJECT(html_body_part));
@@ -232,7 +234,8 @@ copy_mime_part (TnyMimePart *part)
        TnyList *parts;
        TnyIterator *iterator;
        TnyStream *attachment_stream;
-
+       const gchar *enc;
+       
        if (TNY_IS_MSG (part)) {
                g_object_ref (part);
                return part;
@@ -249,10 +252,12 @@ copy_mime_part (TnyMimePart *part)
        
        /* fill the stream */
        attachment_stream = tny_mime_part_get_stream (part);
+       enc = tny_mime_part_get_transfer_encoding (part);
        tny_stream_reset (attachment_stream);
-       tny_mime_part_construct_from_stream (result,
-                                            attachment_stream,
-                                            attachment_content_type);
+       tny_mime_part_construct (result,
+                                attachment_stream,
+                                attachment_content_type, 
+                                enc);
        tny_stream_reset (attachment_stream);
        
        /* set other mime part fields */
@@ -300,6 +305,7 @@ add_attachments (TnyMimePart *part, GList *attachments_list, gboolean add_inline
                        attachment_part = copy_mime_part (old_attachment);
                        tny_mime_part_set_header_pair (attachment_part, "Content-Disposition", 
                                                       add_inline?"inline":"attachment");
+                       tny_mime_part_set_transfer_encoding (TNY_MIME_PART (attachment_part), "base64");
                        tny_mime_part_add_part (TNY_MIME_PART (part), attachment_part);
                        if (old_cid)
                                tny_mime_part_set_content_id (attachment_part, old_cid);
@@ -633,8 +639,10 @@ modest_tny_msg_create_forward_msg (TnyMsg *msg,
        add_attachments (TNY_MIME_PART (new_msg), attachments_list, FALSE);
 
        /* Clean */
-       if (attachments_list)
+       if (attachments_list) {
+               g_list_foreach (attachments_list, (GFunc) g_object_unref, NULL);
                g_list_free (attachments_list);
+       }
        g_object_unref (G_OBJECT (parts));
 
        return new_msg;
@@ -767,12 +775,9 @@ modest_tny_msg_create_reply_msg (TnyMsg *msg,
 
        g_return_val_if_fail (msg && TNY_IS_MSG(msg), NULL);
        
-       /* Add attachments */
-       if (msg != NULL) {
-               parts = TNY_LIST (tny_simple_list_new());
-               tny_mime_part_get_parts (TNY_MIME_PART (msg), parts);
-               tny_list_foreach (parts, add_if_attachment, &attachments_list);
-       }
+       parts = TNY_LIST (tny_simple_list_new());
+       tny_mime_part_get_parts (TNY_MIME_PART (msg), parts);
+       tny_list_foreach (parts, add_if_attachment, &attachments_list);
 
        new_msg = create_reply_forward_mail (msg, header, from, signature, TRUE, reply_type,
                                             attachments_list);
@@ -845,3 +850,30 @@ get_content_type(const gchar *s)
        }
        return g_string_free(type, FALSE);
 }
+
+guint64
+modest_tny_msg_estimate_size (const gchar *plain_body, const gchar *html_body,
+                             guint64 parts_count,
+                             guint64 parts_size)
+{
+       guint64 result;
+
+       /* estimation of headers size */
+       result = 1024;
+
+       /* We add a 20% of size due to the increase in 7bit encoding */
+       if (plain_body) {
+               result += strlen (plain_body) * 120 / 100;
+       }
+       if (html_body) {
+               result += strlen (html_body) * 120 / 100;
+       }
+
+       /* 256 bytes per additional part because of their headers */
+       result += parts_count * 256;
+
+       /* 150% of increase per encoding */
+       result += parts_size * 3 / 2;
+
+       return result;
+}