GtkHTMLStream *stream;
GtkHTML *html;
guint stop_streams_id;
+
+ gssize max_size;
+ gssize current_size;
};
#define MODEST_TNY_STREAM_GTKHTML_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
MODEST_TYPE_TNY_STREAM_GTKHTML, \
priv->stream = NULL;
priv->html = NULL;
priv->stop_streams_id = 0;
+
+ priv->max_size = 0;
+ priv->current_size = 0;
}
static void
priv->stop_streams_id = g_signal_connect (G_OBJECT (html), "stop-streams",
G_CALLBACK (stop_streams), obj);
+ priv->current_size = 0;
return obj;
}
if (!priv->html || !GTK_WIDGET_VISIBLE (priv->html))
return -1;
+ if (priv->max_size > 0) {
+
+ /* We only use the maximum size for write method, and even we
+ * ignore and fake as we would do a successfull read */
+ if (priv->current_size > priv->max_size)
+ return n;
+
+ if (priv->current_size + n > priv->max_size)
+ n = priv->max_size - priv->current_size;
+ }
+
gtk_html_stream_write (priv->stream, buffer, n);
+ priv->current_size += n;
+
return n; /* hmmm */
}
}
}
+void
+modest_tny_stream_gtkhtml_set_max_size (ModestTnyStreamGtkhtml *stream,
+ gssize max_size)
+{
+ ModestTnyStreamGtkhtmlPrivate *priv;
+
+ g_return_if_fail (MODEST_IS_TNY_STREAM_GTKHTML (stream));
+ priv = MODEST_TNY_STREAM_GTKHTML_GET_PRIVATE (stream);
+
+ priv->max_size = max_size;
+}
+
+gssize
+modest_tny_stream_gtkhtml_get_max_size (ModestTnyStreamGtkhtml *stream)
+{
+ ModestTnyStreamGtkhtmlPrivate *priv;
+
+ g_return_val_if_fail (MODEST_IS_TNY_STREAM_GTKHTML (stream), 0);
+ priv = MODEST_TNY_STREAM_GTKHTML_GET_PRIVATE (stream);
+
+ return priv->max_size;
+}
+
static void
modest_tny_stream_gtkhml_iface_init (gpointer g_iface, gpointer iface_data)
{
**/
GObject* modest_tny_stream_gtkhtml_new (GtkHTMLStream* stream, GtkHTML *html);
+/**
+ * modest_tny_stream_gtkhtml_set_max_size:
+ * @stream: a #ModestTnyStreamGtkhtml
+ * @max_size: a #gssize
+ *
+ * set @max_size as the maximum size @stream will process
+ */
+void modest_tny_stream_gtkhtml_set_max_size (ModestTnyStreamGtkhtml *stream, gssize max_size);
+
+/**
+ * modest_tny_stream_gtkhtml_get_max_size:
+ * @stream: a #ModestTnyStreamGtkhtml
+ *
+ * obtain the maximum size @stream will process
+ *
+ * Returns: a #gssize (or 0 if unlimited)
+ */
+gssize modest_tny_stream_gtkhtml_get_max_size (ModestTnyStreamGtkhtml *stream);
G_END_DECLS