+static gboolean
+idle_get_mime_part_size_cb (gpointer userdata)
+{
+ ModestAttachmentView *view = (ModestAttachmentView *) userdata;
+ ModestAttachmentViewPrivate *priv = MODEST_ATTACHMENT_VIEW_GET_PRIVATE (view);
+ gchar *size_str;
+ gchar *label_text;
+ gdk_threads_enter ();
+
+ if (GTK_WIDGET_VISIBLE (view)) {
+ size_str = modest_text_utils_get_display_size (priv->size);
+ label_text = g_strdup_printf (" (%s)", size_str);
+ g_free (size_str);
+ gtk_label_set_text (GTK_LABEL (priv->size_view), label_text);
+ g_free (label_text);
+ }
+
+ gdk_threads_leave ();
+
+ g_object_unref (view);
+
+ return FALSE;
+}
+
+static gpointer
+get_mime_part_size_thread (gpointer thr_user_data)
+{
+ ModestAttachmentView *view = (ModestAttachmentView *) thr_user_data;
+ ModestAttachmentViewPrivate *priv = MODEST_ATTACHMENT_VIEW_GET_PRIVATE (view);
+ gchar read_buffer[GET_SIZE_BUFFER_SIZE];
+ TnyStream *stream;
+ gssize readed_size;
+ gssize total = 0;
+
+ stream = tny_camel_mem_stream_new ();
+ tny_mime_part_decode_to_stream (priv->mime_part, stream);
+ tny_stream_reset (stream);
+ if (tny_stream_is_eos (stream)) {
+ tny_stream_close (stream);
+ stream = tny_mime_part_get_stream (priv->mime_part);
+ }
+
+ while (!tny_stream_is_eos (stream)) {
+ readed_size = tny_stream_read (stream, read_buffer, GET_SIZE_BUFFER_SIZE);
+ total += readed_size;
+ }
+
+ priv->size = total;
+
+ g_idle_add (idle_get_mime_part_size_cb, g_object_ref (view));
+
+ g_object_unref (stream);
+ g_object_unref (view);
+
+ return NULL;
+}