+static gpointer
+on_fetch_image_thread (gpointer userdata)
+{
+ FetchImageData *fidata = (FetchImageData *) userdata;
+ TnyStreamCache *cache;
+ TnyStream *cache_stream;
+
+ cache = modest_runtime_get_images_cache ();
+ cache_stream = tny_stream_cache_get_stream (cache, fidata->cache_id, (TnyStreamCacheOpenStreamFetcher) fetch_image_open_stream, (gpointer) fidata->uri);
+ g_free (fidata->cache_id);
+ g_free (fidata->uri);
+
+ if (cache_stream != NULL) {
+ tny_stream_write_to_stream (cache_stream, fidata->output_stream);
+ tny_stream_close (cache_stream);
+ g_object_unref (cache_stream);
+ }
+
+ tny_stream_close (fidata->output_stream);
+ g_object_unref (fidata->output_stream);
+
+
+ gdk_threads_enter ();
+ g_idle_add (on_fetch_image_idle_refresh_view, fidata);
+ gdk_threads_leave ();
+
+ return NULL;
+}
+
+static gboolean
+on_fetch_image (ModestMsgView *msgview,
+ const gchar *uri,
+ TnyStream *stream,
+ ModestMsgViewWindow *window)
+{
+ const gchar *current_account;
+ ModestMsgViewWindowPrivate *priv;
+ FetchImageData *fidata;
+
+ priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
+
+ current_account = modest_window_get_active_account (MODEST_WINDOW (window));
+
+ fidata = g_slice_new0 (FetchImageData);
+ fidata->msg_view = g_object_ref (msgview);
+ fidata->uri = g_strdup (uri);
+ fidata->cache_id = modest_images_cache_get_id (current_account, uri);
+ fidata->output_stream = g_object_ref (stream);
+
+ if (g_thread_create (on_fetch_image_thread, fidata, FALSE, NULL) == NULL) {
+ g_object_unref (fidata->output_stream);
+ g_free (fidata->cache_id);
+ g_free (fidata->uri);
+ g_object_unref (fidata->msg_view);
+ g_slice_free (FetchImageData, fidata);
+ tny_stream_close (stream);
+ return FALSE;
+ }
+
+ return TRUE;;
+}
+
+void
+modest_msg_view_window_add_to_contacts (ModestMsgViewWindow *self)
+{
+ modest_ui_actions_on_add_to_contacts (NULL, MODEST_WINDOW (self));
+}
+
+
+void
+modest_msg_view_window_fetch_images (ModestMsgViewWindow *self)
+{
+ ModestMsgViewWindowPrivate *priv;
+ priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
+
+ modest_msg_view_request_fetch_images (MODEST_MSG_VIEW (priv->msg_view));
+}
+
+gboolean
+modest_msg_view_window_has_blocked_external_images (ModestMsgViewWindow *self)
+{
+ ModestMsgViewWindowPrivate *priv;
+ priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
+
+ g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (self), FALSE);
+
+ return modest_msg_view_has_blocked_external_images (MODEST_MSG_VIEW (priv->msg_view));
+}
+
+void
+modest_msg_view_window_reload (ModestMsgViewWindow *self)
+{
+ ModestMsgViewWindowPrivate *priv;
+ TnyHeader *header;
+
+ g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (self));
+
+ priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
+ header = modest_msg_view_window_get_header (MODEST_MSG_VIEW_WINDOW (self));
+
+ if (!message_reader (self, priv, header, priv->row_reference)) {
+ g_warning ("Shouldn't happen, trying to reload a message failed");
+ }
+
+ g_object_unref (header);
+}