[Telepathy-commits] [telepathy-gabble/master] tube-stream: add a muc property and use it to delegate our group interface
Guillaume Desmottes
guillaume.desmottes at collabora.co.uk
Thu Feb 5 04:46:42 PST 2009
---
src/tube-stream.c | 36 +++++++++++++++++++++++++++++++++++-
src/tube-stream.h | 3 ++-
src/tubes-channel.c | 2 +-
3 files changed, 38 insertions(+), 3 deletions(-)
diff --git a/src/tube-stream.c b/src/tube-stream.c
index 0cf6e58..aba32ca 100644
--- a/src/tube-stream.c
+++ b/src/tube-stream.c
@@ -138,6 +138,7 @@ enum
PROP_INITIATOR_HANDLE,
PROP_INITIATOR_ID,
PROP_SUPPORTED_SOCKET_TYPES,
+ PROP_MUC,
LAST_PROPERTY
};
@@ -183,6 +184,7 @@ struct _GabbleTubeStreamPrivate
/* listen for connections from local applications */
GibberListener *local_listener;
+ GabbleMucChannel *muc;
gboolean closed;
@@ -829,6 +831,11 @@ gabble_tube_stream_dispose (GObject *object)
priv->local_listener = NULL;
}
+ if (priv->muc != NULL)
+ {
+ tp_external_group_mixin_finalize (object);
+ }
+
priv->dispose_has_run = TRUE;
if (G_OBJECT_CLASS (gabble_tube_stream_parent_class)->dispose)
@@ -981,6 +988,9 @@ gabble_tube_stream_get_property (GObject *object,
g_value_take_boxed (value,
gabble_tube_stream_get_supported_socket_types ());
break;
+ case PROP_MUC:
+ g_value_set_object (value, priv->muc);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -1055,6 +1065,9 @@ gabble_tube_stream_set_property (GObject *object,
g_value_get_pointer (value));
}
break;
+ case PROP_MUC:
+ priv->muc = g_value_get_object (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -1094,6 +1107,16 @@ gabble_tube_stream_constructor (GType type,
priv->state = GABBLE_TUBE_CHANNEL_STATE_LOCAL_PENDING;
}
+ if (priv->handle_type == TP_HANDLE_TYPE_CONTACT)
+ {
+ g_assert (priv->muc == NULL);
+ }
+ else
+ {
+ g_assert (priv->muc != NULL);
+ tp_external_group_mixin_init (obj, (GObject *) priv->muc);
+ }
+
bus = tp_get_bus ();
dbus_g_connection_register_g_object (bus, priv->object_path, obj);
@@ -1297,6 +1320,15 @@ gabble_tube_stream_class_init (GabbleTubeStreamClass *gabble_tube_stream_class)
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
g_object_class_install_property (object_class, PROP_REQUESTED, param_spec);
+ param_spec = g_param_spec_object (
+ "muc",
+ "GabbleMucChannel object",
+ "Gabble text MUC channel corresponding to this Tube channel object, "
+ "if the handle type is ROOM.",
+ GABBLE_TYPE_MUC_CHANNEL,
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+ g_object_class_install_property (object_class, PROP_MUC, param_spec);
+
signals[OPENED] =
g_signal_new ("tube-opened",
G_OBJECT_CLASS_TYPE (gabble_tube_stream_class),
@@ -1389,7 +1421,8 @@ gabble_tube_stream_new (GabbleConnection *conn,
TpHandle initiator,
const gchar *service,
GHashTable *parameters,
- guint id)
+ guint id,
+ GabbleMucChannel *muc)
{
GabbleTubeStream *obj;
char *object_path;
@@ -1407,6 +1440,7 @@ gabble_tube_stream_new (GabbleConnection *conn,
"service", service,
"parameters", parameters,
"id", id,
+ "muc", muc,
NULL);
g_free (object_path);
diff --git a/src/tube-stream.h b/src/tube-stream.h
index 8790864..673ee95 100644
--- a/src/tube-stream.h
+++ b/src/tube-stream.h
@@ -27,6 +27,7 @@
#include "connection.h"
#include "extensions/extensions.h"
+#include "muc-channel.h"
G_BEGIN_DECLS
@@ -75,7 +76,7 @@ static const gchar * const gabble_tube_stream_channel_allowed_properties[] = {
GabbleTubeStream *gabble_tube_stream_new (GabbleConnection *conn,
TpHandle handle, TpHandleType handle_type, TpHandle self_handle,
TpHandle initiator, const gchar *service, GHashTable *parameters,
- guint id);
+ guint id, GabbleMucChannel *muc);
gboolean gabble_tube_stream_check_params (TpSocketAddressType address_type,
const GValue *address, TpSocketAccessControl access_control,
diff --git a/src/tubes-channel.c b/src/tubes-channel.c
index c6a8a21..cab33ca 100644
--- a/src/tubes-channel.c
+++ b/src/tubes-channel.c
@@ -544,7 +544,7 @@ create_new_tube (GabbleTubesChannel *self,
case TP_TUBE_TYPE_STREAM:
tube = GABBLE_TUBE_IFACE (gabble_tube_stream_new (priv->conn,
priv->handle, priv->handle_type, priv->self_handle, initiator,
- service, parameters, tube_id));
+ service, parameters, tube_id, self->muc));
break;
default:
g_return_val_if_reached (NULL);
--
1.5.6.5
More information about the telepathy-commits
mailing list