xeme/xeme

Make DodoInputStream derivable

6 months ago, Gary Kramlich
3bf4f6013e82
Parents e1f346d550b3
Children 8098514a37ca
Make DodoInputStream derivable
--- a/dodo/dodoinputstream.c Mon Nov 27 23:52:48 2023 -0600
+++ b/dodo/dodoinputstream.c Tue Nov 28 00:08:10 2023 -0600
@@ -27,16 +27,15 @@
};
static guint signals[N_SIGNALS];
-struct _DodoInputStream {
- DodoStream parent;
-
+typedef struct {
gboolean running;
GInputStream *input;
GMarkupParseContext *context;
-};
+} DodoInputStreamPrivate;
-G_DEFINE_TYPE(DodoInputStream, dodo_input_stream, DODO_TYPE_STREAM)
+G_DEFINE_TYPE_WITH_PRIVATE(DodoInputStream, dodo_input_stream,
+ DODO_TYPE_STREAM)
/******************************************************************************
* Helpers
@@ -53,12 +52,15 @@
GAsyncResult *result, gpointer data)
{
DodoInputStream *stream = data;
+ DodoInputStreamPrivate *priv = NULL;
GBytes *bytes = NULL;
GError *error = NULL;
const char *raw = NULL;
gsize length = 0;
- bytes = g_input_stream_read_bytes_finish(stream->input, result, &error);
+ priv = dodo_input_stream_get_instance_private(stream);
+
+ bytes = g_input_stream_read_bytes_finish(priv->input, result, &error);
if(bytes == NULL) {
g_message("failed to read: %s",
error != NULL ? error->message : "unknown error");
@@ -70,7 +72,7 @@
}
raw = g_bytes_get_data(bytes, &length);
- if(!g_markup_parse_context_parse(stream->context, raw, length, &error)) {
+ if(!g_markup_parse_context_parse(priv->context, raw, length, &error)) {
g_warning("we hit an error: %s", error->message);
length = 0;
}
@@ -79,12 +81,12 @@
g_bytes_unref(bytes);
/* Make another asynchronous read call. */
- if(length > 0 && stream->running == TRUE) {
+ if(length > 0 && priv->running == TRUE) {
GCancellable *cancellable = NULL;
cancellable = dodo_stream_get_cancellable(DODO_STREAM(stream));
- g_input_stream_read_bytes_async(stream->input,
+ g_input_stream_read_bytes_async(priv->input,
DODO_INPUT_STREAM_BUFFER_LEN,
G_PRIORITY_DEFAULT, cancellable,
dodo_input_stream_read_bytes_async_cb,
@@ -206,11 +208,14 @@
*****************************************************************************/
static void
dodo_input_stream_init(DodoInputStream *stream) {
- stream->running = FALSE;
+ DodoInputStreamPrivate *priv = NULL;
- stream->context = g_markup_parse_context_new(&parser, 0,
- g_object_ref(stream),
- g_object_unref);
+ priv = dodo_input_stream_get_instance_private(stream);
+ priv->running = FALSE;
+
+ priv->context = g_markup_parse_context_new(&parser, 0,
+ g_object_ref(stream),
+ g_object_unref);
}
static void
@@ -246,13 +251,16 @@
dodo_input_stream_start(DodoInputStream *stream, GInputStream *input,
GError **error)
{
+ DodoInputStreamPrivate *priv = NULL;
GCancellable *cancellable = NULL;
g_return_val_if_fail(DODO_IS_INPUT_STREAM(stream), FALSE);
g_return_val_if_fail(G_IS_INPUT_STREAM(input), FALSE);
g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
- if(stream->running) {
+ priv = dodo_input_stream_get_instance_private(stream);
+
+ if(priv->running) {
g_set_error_literal(error, DODO_DOMAIN, 0,
"input stream has already been started");
@@ -262,14 +270,14 @@
cancellable = dodo_stream_get_cancellable(DODO_STREAM(stream));
/* Setup the read handler. */
- stream->input = g_object_ref(input);
- g_input_stream_read_bytes_async(stream->input,
+ priv->input = g_object_ref(input);
+ g_input_stream_read_bytes_async(priv->input,
DODO_INPUT_STREAM_BUFFER_LEN,
G_PRIORITY_DEFAULT, cancellable,
dodo_input_stream_read_bytes_async_cb,
stream);
- stream->running = TRUE;
+ priv->running = TRUE;
return TRUE;
}
--- a/dodo/dodoinputstream.h Mon Nov 27 23:52:48 2023 -0600
+++ b/dodo/dodoinputstream.h Tue Nov 28 00:08:10 2023 -0600
@@ -23,12 +23,21 @@
#include <gio/gio.h>
+#include <dodo/dodomessage.h>
#include <dodo/dodostream.h>
G_BEGIN_DECLS
#define DODO_TYPE_INPUT_STREAM (dodo_input_stream_get_type())
-G_DECLARE_FINAL_TYPE(DodoInputStream, dodo_input_stream, DODO, INPUT_STREAM, DodoStream)
+G_DECLARE_DERIVABLE_TYPE(DodoInputStream, dodo_input_stream, DODO, INPUT_STREAM, DodoStream)
+
+struct _DodoInputStreamClass {
+ /*< private >*/
+ DodoStreamClass parent;
+
+ /*< private >*/
+ gpointer reserved[8];
+};
/**
* dodo_input_stream_new: