[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