[telepathy-gabble/master] create a WockyPubsub object
Guillaume Desmottes
guillaume.desmottes at collabora.co.uk
Fri Sep 25 02:29:43 PDT 2009
---
src/pubsub.c | 148 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
src/pubsub.h | 43 ++++++++++++++--
src/types.h | 1 +
3 files changed, 186 insertions(+), 6 deletions(-)
diff --git a/src/pubsub.c b/src/pubsub.c
index beefd54..c128dba 100644
--- a/src/pubsub.c
+++ b/src/pubsub.c
@@ -31,6 +31,146 @@
#include "conn-olpc.h"
#include "conn-location.h"
+G_DEFINE_TYPE (WockyPubsub, wocky_pubsub, G_TYPE_OBJECT)
+
+/* properties */
+enum
+{
+ PROP_SESSION = 1,
+};
+
+/* signal enum */
+enum
+{
+ LAST_SIGNAL,
+};
+
+/*
+static guint signals[LAST_SIGNAL] = {0};
+*/
+
+/* private structure */
+typedef struct _WockyPubsubPrivate WockyPubsubPrivate;
+
+struct _WockyPubsubPrivate
+{
+ WockySession *session;
+
+ gboolean dispose_has_run;
+};
+
+#define WOCKY_PUBSUB_GET_PRIVATE(o) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((o), WOCKY_TYPE_PUBSUB, \
+ WockyPubsubPrivate))
+
+
+static void
+wocky_pubsub_init (WockyPubsub *obj)
+{
+ /*
+ WockyPubsub *self = WOCKY_PUBSUB (obj);
+ WockyPubsubPrivate *priv = WOCKY_PUBSUB_GET_PRIVATE (self);
+ */
+}
+
+static void
+wocky_pubsub_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ WockyPubsubPrivate *priv =
+ WOCKY_PUBSUB_GET_PRIVATE (object);
+
+ switch (property_id)
+ {
+ case PROP_SESSION:
+ priv->session = g_value_get_object (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+wocky_pubsub_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ WockyPubsubPrivate *priv =
+ WOCKY_PUBSUB_GET_PRIVATE (object);
+
+ switch (property_id)
+ {
+ case PROP_SESSION:
+ g_value_set_object (value, priv->session);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+wocky_pubsub_constructed (GObject *object)
+{
+ WockyPubsub *self = WOCKY_PUBSUB (object);
+ WockyPubsubPrivate *priv = WOCKY_PUBSUB_GET_PRIVATE (self);
+
+ g_assert (priv->session != NULL);
+}
+
+static void
+wocky_pubsub_dispose (GObject *object)
+{
+ WockyPubsub *self = WOCKY_PUBSUB (object);
+ WockyPubsubPrivate *priv = WOCKY_PUBSUB_GET_PRIVATE (self);
+
+ if (priv->dispose_has_run)
+ return;
+
+ priv->dispose_has_run = TRUE;
+
+ if (G_OBJECT_CLASS (wocky_pubsub_parent_class)->dispose)
+ G_OBJECT_CLASS (wocky_pubsub_parent_class)->dispose (object);
+}
+
+static void
+wocky_pubsub_finalize (GObject *object)
+{
+ /*
+ WockyPubsub *self = WOCKY_PUBSUB (object);
+ WockyPubsubPrivate *priv = WOCKY_PUBSUB_GET_PRIVATE (self);
+ */
+
+ G_OBJECT_CLASS (wocky_pubsub_parent_class)->finalize (object);
+}
+
+static void
+wocky_pubsub_class_init (WockyPubsubClass *wocky_pubsub_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (wocky_pubsub_class);
+ GParamSpec *spec;
+
+ g_type_class_add_private (wocky_pubsub_class,
+ sizeof (WockyPubsubPrivate));
+
+ object_class->constructed = wocky_pubsub_constructed;
+ object_class->set_property = wocky_pubsub_set_property;
+ object_class->get_property = wocky_pubsub_get_property;
+ object_class->dispose = wocky_pubsub_dispose;
+ object_class->finalize = wocky_pubsub_finalize;
+
+ spec = g_param_spec_object ("session", "Session",
+ "Wocky Session",
+ WOCKY_TYPE_SESSION,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
+ g_object_class_install_property (object_class, PROP_SESSION, spec);
+}
+
typedef struct
{
const gchar *ns;
@@ -190,3 +330,11 @@ pubsub_msg_event_cb (LmMessageHandler *handler,
return LM_HANDLER_RESULT_REMOVE_MESSAGE;
}
+
+WockyPubsub *
+wocky_pubsub_new (WockySession *session)
+{
+ return g_object_new (WOCKY_TYPE_PUBSUB,
+ "session", session,
+ NULL);
+}
diff --git a/src/pubsub.h b/src/pubsub.h
index 8345d5c..99a32be 100644
--- a/src/pubsub.h
+++ b/src/pubsub.h
@@ -17,15 +17,47 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#ifndef __PUBSUB_H__
-#define __PUBSUB_H__
-
-#include "connection.h"
+#ifndef __WOCKY_PUBSUB_H__
+#define __WOCKY_PUBSUB_H__
+#include <glib-object.h>
#include <wocky/wocky-xmpp-stanza.h>
+#include "connection.h"
+
G_BEGIN_DECLS
+typedef struct _WockyPubsubClass WockyPubsubClass;
+
+struct _WockyPubsubClass {
+ GObjectClass parent_class;
+};
+
+struct _WockyPubsub {
+ GObject parent;
+};
+
+GType wocky_pubsub_get_type (void);
+
+#define WOCKY_TYPE_PUBSUB \
+ (wocky_pubsub_get_type ())
+#define WOCKY_PUBSUB(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj), WOCKY_TYPE_PUBSUB, \
+ WockyPubsub))
+#define WOCKY_PUBSUB_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass), WOCKY_TYPE_PUBSUB, \
+ WockyPubsubClass))
+#define WOCKY_IS_PUBSUB(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj), WOCKY_TYPE_PUBSUB))
+#define WOCKY_IS_PUBSUB_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass), WOCKY_TYPE_PUBSUB))
+#define WOCKY_PUBSUB_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), WOCKY_TYPE_PUBSUB, \
+ WockyPubsubClass))
+
+WockyPubsub * wocky_pubsub_new (WockySession *session);
+
+/* not methods */
typedef gboolean (* GabblePubsubEventHandlerFunction) (GabbleConnection *conn,
WockyXmppStanza *msg,
const gchar *from);
@@ -49,5 +81,4 @@ LmHandlerResult pubsub_msg_event_cb (LmMessageHandler *handler,
G_END_DECLS
-#endif /* __PUBSUB_H__ */
-
+#endif /* __WOCKY_PUBSUB_H__ */
diff --git a/src/types.h b/src/types.h
index 01d8a4d..f874321 100644
--- a/src/types.h
+++ b/src/types.h
@@ -52,6 +52,7 @@ typedef struct _GabbleJingleTransportIceUdp GabbleJingleTransportIceUdp;
typedef struct _GabbleJingleMediaRtp GabbleJingleMediaRtp;
typedef struct _JingleCandidate JingleCandidate;
+typedef struct _WockyPubsub WockyPubsub;
typedef enum {
INITIATOR_INVALID = -1,
--
1.5.6.5
More information about the telepathy-commits
mailing list