diff options
Diffstat (limited to 'src/muc-channel.c')
-rw-r--r-- | src/muc-channel.c | 134 |
1 files changed, 67 insertions, 67 deletions
diff --git a/src/muc-channel.c b/src/muc-channel.c index c0eb63e6..091e60a2 100644 --- a/src/muc-channel.c +++ b/src/muc-channel.c @@ -54,13 +54,14 @@ #include "text-helper.h" #include "tube-stream.h" #include "tube-dbus.h" -#include "util.h" G_DEFINE_TYPE_WITH_CODE(SalutMucChannel, salut_muc_channel, TP_TYPE_BASE_CHANNEL, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_INTERFACE_GROUP, tp_group_mixin_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_TYPE_TEXT, - tp_message_mixin_iface_init); + tp_message_mixin_text_iface_init); + G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_INTERFACE_MESSAGES, + tp_message_mixin_messages_iface_init); ) /* signal enum */ @@ -122,7 +123,7 @@ static void salut_muc_channel_close (TpBaseChannel *base); static void update_tube_info (SalutMucChannel *self); static SalutTubeIface * create_new_tube (SalutMucChannel *self, - SalutTubeType type, + TpTubeType type, TpHandle initiator, const gchar *service, GHashTable *parameters, @@ -182,34 +183,6 @@ salut_muc_channel_set_property (GObject *object, } } -/* This is helper function with the signature of tp_group_mixin_change_members() - * from tp-glib 0.x */ -static void -change_members (GObject *obj, - const gchar *message, - const TpIntset *add, - const TpIntset *del, - const TpIntset *add_local_pending, - const TpIntset *add_remote_pending, - TpHandle actor, - TpChannelGroupChangeReason reason) -{ - GHashTable *details; - - details = tp_asv_new ( - "actor", G_TYPE_UINT, actor, - "change-reason", G_TYPE_UINT, reason, - NULL); - - if (message != NULL) - tp_asv_set_string (details, "message", message); - - tp_group_mixin_change_members (obj, - add, del, add_local_pending, add_remote_pending, details); - - g_hash_table_unref (details); -} - static void salut_muc_channel_add_self_to_members (SalutMucChannel *self) { @@ -233,7 +206,7 @@ salut_muc_channel_add_self_to_members (SalutMucChannel *self) add = tp_intset_new (); tp_intset_add (add, tp_base_connection_get_self_handle (base_conn)); - change_members (G_OBJECT (self), + tp_group_mixin_change_members (G_OBJECT (self), "", add, empty, empty, empty, tp_base_connection_get_self_handle (base_conn), TP_CHANNEL_GROUP_CHANGE_REASON_NONE); @@ -331,6 +304,7 @@ salut_muc_channel_constructed (GObject *obj) contact_repo, tp_base_connection_get_self_handle (base_conn)); tp_group_mixin_change_flags (obj, + TP_CHANNEL_GROUP_FLAG_PROPERTIES | TP_CHANNEL_GROUP_FLAG_CAN_ADD | TP_CHANNEL_GROUP_FLAG_MESSAGE_ADD, 0); @@ -405,6 +379,12 @@ create_invitation (SalutMucChannel *self, priv->muc_connection), invitation_append_parameter, invite_node); +#ifdef ENABLE_OLPC + salut_self_olpc_augment_invitation (priv->self, + tp_base_channel_get_target_handle (base_chan), contact->handle, + invite_node); +#endif + return msg; } @@ -450,7 +430,7 @@ send_invite_cb (GObject *source_object, removed = tp_intset_new (); tp_intset_add (removed, handle); - change_members (G_OBJECT (data->self), "", empty, removed, empty, + tp_group_mixin_change_members (G_OBJECT (data->self), "", empty, removed, empty, empty, tp_base_connection_get_self_handle (base_connection), TP_CHANNEL_GROUP_CHANGE_REASON_ERROR); @@ -542,7 +522,7 @@ salut_muc_channel_add_member (GObject *iface, { /* We are considered as remote-pending while the muc connection * is not connected */ - change_members (G_OBJECT (self), + tp_group_mixin_change_members (G_OBJECT (self), message, empty_, empty_, empty_, add, tp_base_connection_get_self_handle (base_connection), TP_CHANNEL_GROUP_CHANGE_REASON_NONE); @@ -571,7 +551,7 @@ salut_muc_channel_add_member (GObject *iface, empty = tp_intset_new (); remote_pending = tp_intset_new (); tp_intset_add (remote_pending, handle); - change_members (G_OBJECT(self), "", empty, empty, empty, + tp_group_mixin_change_members (G_OBJECT(self), "", empty, empty, empty, remote_pending, tp_base_connection_get_self_handle (base_connection), TP_CHANNEL_GROUP_CHANGE_REASON_INVITED); tp_intset_destroy (empty); @@ -638,10 +618,10 @@ salut_muc_channel_fill_immutable_properties (TpBaseChannel *chan, tp_dbus_properties_mixin_fill_properties_hash ( G_OBJECT (chan), properties, - TP_IFACE_CHANNEL_TYPE_TEXT, "MessagePartSupportFlags", - TP_IFACE_CHANNEL_TYPE_TEXT, "DeliveryReportingSupport", - TP_IFACE_CHANNEL_TYPE_TEXT, "SupportedContentTypes", - TP_IFACE_CHANNEL_TYPE_TEXT, "MessageTypes", + TP_IFACE_CHANNEL_INTERFACE_MESSAGES, "MessagePartSupportFlags", + TP_IFACE_CHANNEL_INTERFACE_MESSAGES, "DeliveryReportingSupport", + TP_IFACE_CHANNEL_INTERFACE_MESSAGES, "SupportedContentTypes", + TP_IFACE_CHANNEL_INTERFACE_MESSAGES, "MessageTypes", NULL); } @@ -652,7 +632,7 @@ salut_muc_channel_get_interfaces (TpBaseChannel *chan) ->get_interfaces (chan); g_ptr_array_add (interfaces, TP_IFACE_CHANNEL_INTERFACE_GROUP); - + g_ptr_array_add (interfaces, TP_IFACE_CHANNEL_INTERFACE_MESSAGES); return interfaces; } @@ -848,9 +828,11 @@ salut_muc_channel_invited (SalutMucChannel *self, TpHandle inviter, g_assert (stanza != NULL); tp_intset_add (local_pending, self_handle); - change_members (G_OBJECT(self), stanza, - empty, empty, local_pending, empty, - inviter, TP_CHANNEL_GROUP_CHANGE_REASON_INVITED); + tp_group_mixin_change_members (G_OBJECT(self), stanza, + empty, empty, + local_pending, empty, + inviter, + TP_CHANNEL_GROUP_CHANGE_REASON_INVITED); tp_intset_destroy (local_pending); tp_intset_destroy (empty); } @@ -907,8 +889,13 @@ salut_muc_channel_add_members (SalutMucChannel *self, tp_intset_add (changes, contact->handle); } - change_members (G_OBJECT(self), "", changes, empty, empty, empty, - 0, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); + tp_group_mixin_change_members (G_OBJECT(self), + "", + changes, + empty, + empty, empty, + 0, + TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_destroy (changes); tp_intset_destroy (empty); g_object_unref (contact_mgr); @@ -947,8 +934,13 @@ salut_muc_channel_remove_members (SalutMucChannel *self, tp_intset_add (changes, handle); } - change_members (G_OBJECT(self), "", empty, changes, empty, empty, - 0, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); + tp_group_mixin_change_members (G_OBJECT(self), + "", + empty, + changes, + empty, empty, + 0, + TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_destroy (changes); tp_intset_destroy (empty); } @@ -957,7 +949,7 @@ salut_muc_channel_remove_members (SalutMucChannel *self, static gboolean extract_tube_information (SalutMucChannel *self, WockyNode *tube_node, - SalutTubeType *type, + TpTubeType *type, TpHandle *initiator_handle, const gchar **service, GHashTable **parameters, @@ -977,11 +969,11 @@ extract_tube_information (SalutMucChannel *self, if (!tp_strdiff (_type, "stream")) { - *type = SALUT_TUBE_TYPE_STREAM; + *type = TP_TUBE_TYPE_STREAM; } else if (!tp_strdiff (_type, "dbus")) { - *type = SALUT_TUBE_TYPE_DBUS; + *type = TP_TUBE_TYPE_DBUS; } else { @@ -1096,13 +1088,13 @@ muc_channel_handle_tubes (SalutMucChannel *self, { guint tube_id = GPOINTER_TO_UINT (key); SalutTubeIface *tube = value; - SalutTubeType type; + TpTubeType type; g_object_get (tube, "type", &type, NULL); - if (type != SALUT_TUBE_TYPE_DBUS) + if (type != TP_TUBE_TYPE_DBUS) return; if (salut_tube_dbus_handle_in_names (SALUT_TUBE_DBUS (tube), @@ -1118,7 +1110,7 @@ muc_channel_handle_tubes (SalutMucChannel *self, const gchar *stream_id; SalutTubeIface *tube; guint tube_id; - SalutTubeType type; + TpTubeType type; GibberBytestreamIface *bytestream; stream_id = wocky_node_get_attribute (tube_node, "stream-id"); @@ -1142,7 +1134,7 @@ muc_channel_handle_tubes (SalutMucChannel *self, { switch (type) { - case SALUT_TUBE_TYPE_DBUS: + case TP_TUBE_TYPE_DBUS: { if (initiator_handle == 0) { @@ -1151,7 +1143,7 @@ muc_channel_handle_tubes (SalutMucChannel *self, } } break; - case SALUT_TUBE_TYPE_STREAM: + case TP_TUBE_TYPE_STREAM: initiator_handle = contact; break; default: @@ -1180,7 +1172,7 @@ muc_channel_handle_tubes (SalutMucChannel *self, "type", &type, NULL); - if (type == SALUT_TUBE_TYPE_DBUS + if (type == TP_TUBE_TYPE_DBUS && !salut_tube_dbus_handle_in_names (SALUT_TUBE_DBUS (tube), contact)) { @@ -1283,6 +1275,14 @@ salut_muc_channel_received_stanza (GibberMucConnection *conn, /* let's not autoclose now */ priv->autoclose = FALSE; +#ifdef ENABLE_OLPC + if (salut_connection_olpc_observe_muc_stanza ( + SALUT_CONNECTION (base_connection), + tp_base_channel_get_target_handle (base_chan), + from_handle, stanza)) + return; +#endif + tubes_node = wocky_node_get_child_ns (node, "tubes", WOCKY_TELEPATHY_NS_TUBES); if (tubes_node != NULL) @@ -1479,7 +1479,7 @@ publish_tube_in_node (SalutMucChannel *self, base_conn, TP_HANDLE_TYPE_CONTACT); WockyNode *parameters_node; GHashTable *parameters; - SalutTubeType type; + TpTubeType type; gchar *service, *id_str; guint64 tube_id; TpHandle initiator_handle; @@ -1501,7 +1501,7 @@ publish_tube_in_node (SalutMucChannel *self, switch (type) { - case SALUT_TUBE_TYPE_DBUS: + case TP_TUBE_TYPE_DBUS: { gchar *name, *stream_id; @@ -1523,7 +1523,7 @@ publish_tube_in_node (SalutMucChannel *self, } break; - case SALUT_TUBE_TYPE_STREAM: + case TP_TUBE_TYPE_STREAM: wocky_node_set_attribute (node, "type", "stream"); break; default: @@ -1577,7 +1577,7 @@ update_tube_info (SalutMucChannel *self) while (g_hash_table_iter_next (&iter, NULL, &value)) { TpTubeChannelState state; - SalutTubeType type; + TpTubeType type; TpHandle initiator; WockyNode *tube_node; @@ -1590,7 +1590,7 @@ update_tube_info (SalutMucChannel *self) if (state != TP_TUBE_CHANNEL_STATE_OPEN) continue; - if (type == SALUT_TUBE_TYPE_STREAM + if (type == TP_TUBE_TYPE_STREAM && initiator != TP_GROUP_MIXIN (self)->self_handle) /* We only announce stream tubes we initiated */ return; @@ -1674,7 +1674,7 @@ generate_tube_id (SalutMucChannel *self) static SalutTubeIface * create_new_tube (SalutMucChannel *self, - SalutTubeType type, + TpTubeType type, TpHandle initiator, const gchar *service, GHashTable *parameters, @@ -1693,12 +1693,12 @@ create_new_tube (SalutMucChannel *self, switch (type) { - case SALUT_TUBE_TYPE_DBUS: + case TP_TUBE_TYPE_DBUS: tube = SALUT_TUBE_IFACE (salut_tube_dbus_new (conn, handle, TP_HANDLE_TYPE_ROOM, self_handle, priv->muc_connection, initiator, service, parameters, tube_id, requested)); break; - case SALUT_TUBE_TYPE_STREAM: + case TP_TUBE_TYPE_STREAM: tube = SALUT_TUBE_IFACE (salut_tube_stream_new (conn, handle, TP_HANDLE_TYPE_ROOM, self_handle, initiator, FALSE, service, @@ -1729,7 +1729,7 @@ salut_muc_channel_tube_request (SalutMucChannel *self, const gchar *service; GHashTable *parameters = NULL; guint64 tube_id; - SalutTubeType type; + TpTubeType type; tube_id = generate_tube_id (self); @@ -1738,14 +1738,14 @@ salut_muc_channel_tube_request (SalutMucChannel *self, if (!tp_strdiff (channel_type, TP_IFACE_CHANNEL_TYPE_STREAM_TUBE)) { - type = SALUT_TUBE_TYPE_STREAM; + type = TP_TUBE_TYPE_STREAM; service = tp_asv_get_string (request_properties, TP_PROP_CHANNEL_TYPE_STREAM_TUBE_SERVICE); } else if (! tp_strdiff (channel_type, TP_IFACE_CHANNEL_TYPE_DBUS_TUBE)) { - type = SALUT_TUBE_TYPE_DBUS; + type = TP_TUBE_TYPE_DBUS; service = tp_asv_get_string (request_properties, TP_PROP_CHANNEL_TYPE_DBUS_TUBE_SERVICE_NAME); } |