diff options
author | Xavier Claessens <xavier.claessens@collabora.co.uk> | 2013-09-20 17:19:43 -0400 |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2013-10-15 15:42:31 -0400 |
commit | 82162a775b73ec8fc6bac7ff2c3efa7592554916 (patch) | |
tree | e0a8852722e3976b8b99743bc227cc2889ceca03 /src/muc-channel.c | |
parent | 822ddd064c266345ab4fe19c4b574a4cd29d7159 (diff) | |
download | telepathy-salut-82162a775b73ec8fc6bac7ff2c3efa7592554916.tar.gz |
Port to telepathy-glib-1
Diffstat (limited to 'src/muc-channel.c')
-rw-r--r-- | src/muc-channel.c | 120 |
1 files changed, 67 insertions, 53 deletions
diff --git a/src/muc-channel.c b/src/muc-channel.c index 091e60a2..73d7bf96 100644 --- a/src/muc-channel.c +++ b/src/muc-channel.c @@ -54,14 +54,13 @@ #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_text_iface_init); - G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_INTERFACE_MESSAGES, - tp_message_mixin_messages_iface_init); + tp_message_mixin_iface_init); ) /* signal enum */ @@ -123,7 +122,7 @@ static void salut_muc_channel_close (TpBaseChannel *base); static void update_tube_info (SalutMucChannel *self); static SalutTubeIface * create_new_tube (SalutMucChannel *self, - TpTubeType type, + SalutTubeType type, TpHandle initiator, const gchar *service, GHashTable *parameters, @@ -183,6 +182,34 @@ 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) { @@ -206,7 +233,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)); - tp_group_mixin_change_members (G_OBJECT (self), + change_members (G_OBJECT (self), "", add, empty, empty, empty, tp_base_connection_get_self_handle (base_conn), TP_CHANNEL_GROUP_CHANGE_REASON_NONE); @@ -304,7 +331,6 @@ 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); @@ -430,7 +456,7 @@ send_invite_cb (GObject *source_object, removed = tp_intset_new (); tp_intset_add (removed, handle); - tp_group_mixin_change_members (G_OBJECT (data->self), "", empty, removed, empty, + change_members (G_OBJECT (data->self), "", empty, removed, empty, empty, tp_base_connection_get_self_handle (base_connection), TP_CHANNEL_GROUP_CHANGE_REASON_ERROR); @@ -522,7 +548,7 @@ salut_muc_channel_add_member (GObject *iface, { /* We are considered as remote-pending while the muc connection * is not connected */ - tp_group_mixin_change_members (G_OBJECT (self), + change_members (G_OBJECT (self), message, empty_, empty_, empty_, add, tp_base_connection_get_self_handle (base_connection), TP_CHANNEL_GROUP_CHANGE_REASON_NONE); @@ -551,7 +577,7 @@ salut_muc_channel_add_member (GObject *iface, empty = tp_intset_new (); remote_pending = tp_intset_new (); tp_intset_add (remote_pending, handle); - tp_group_mixin_change_members (G_OBJECT(self), "", empty, empty, empty, + 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); @@ -618,10 +644,10 @@ salut_muc_channel_fill_immutable_properties (TpBaseChannel *chan, tp_dbus_properties_mixin_fill_properties_hash ( G_OBJECT (chan), properties, - TP_IFACE_CHANNEL_INTERFACE_MESSAGES, "MessagePartSupportFlags", - TP_IFACE_CHANNEL_INTERFACE_MESSAGES, "DeliveryReportingSupport", - TP_IFACE_CHANNEL_INTERFACE_MESSAGES, "SupportedContentTypes", - TP_IFACE_CHANNEL_INTERFACE_MESSAGES, "MessageTypes", + TP_IFACE_CHANNEL_TYPE_TEXT, "MessagePartSupportFlags", + TP_IFACE_CHANNEL_TYPE_TEXT, "DeliveryReportingSupport", + TP_IFACE_CHANNEL_TYPE_TEXT, "SupportedContentTypes", + TP_IFACE_CHANNEL_TYPE_TEXT, "MessageTypes", NULL); } @@ -632,7 +658,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; } @@ -828,11 +854,9 @@ salut_muc_channel_invited (SalutMucChannel *self, TpHandle inviter, g_assert (stanza != NULL); tp_intset_add (local_pending, self_handle); - tp_group_mixin_change_members (G_OBJECT(self), stanza, - empty, empty, - local_pending, empty, - inviter, - TP_CHANNEL_GROUP_CHANGE_REASON_INVITED); + 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); } @@ -889,13 +913,8 @@ salut_muc_channel_add_members (SalutMucChannel *self, tp_intset_add (changes, contact->handle); } - tp_group_mixin_change_members (G_OBJECT(self), - "", - changes, - empty, - empty, empty, - 0, - TP_CHANNEL_GROUP_CHANGE_REASON_NONE); + 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); @@ -934,13 +953,8 @@ salut_muc_channel_remove_members (SalutMucChannel *self, tp_intset_add (changes, handle); } - tp_group_mixin_change_members (G_OBJECT(self), - "", - empty, - changes, - empty, empty, - 0, - TP_CHANNEL_GROUP_CHANGE_REASON_NONE); + change_members (G_OBJECT(self), "", empty, changes, empty, empty, + 0, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_destroy (changes); tp_intset_destroy (empty); } @@ -949,7 +963,7 @@ salut_muc_channel_remove_members (SalutMucChannel *self, static gboolean extract_tube_information (SalutMucChannel *self, WockyNode *tube_node, - TpTubeType *type, + SalutTubeType *type, TpHandle *initiator_handle, const gchar **service, GHashTable **parameters, @@ -969,11 +983,11 @@ extract_tube_information (SalutMucChannel *self, if (!tp_strdiff (_type, "stream")) { - *type = TP_TUBE_TYPE_STREAM; + *type = SALUT_TUBE_TYPE_STREAM; } else if (!tp_strdiff (_type, "dbus")) { - *type = TP_TUBE_TYPE_DBUS; + *type = SALUT_TUBE_TYPE_DBUS; } else { @@ -1088,13 +1102,13 @@ muc_channel_handle_tubes (SalutMucChannel *self, { guint tube_id = GPOINTER_TO_UINT (key); SalutTubeIface *tube = value; - TpTubeType type; + SalutTubeType type; g_object_get (tube, "type", &type, NULL); - if (type != TP_TUBE_TYPE_DBUS) + if (type != SALUT_TUBE_TYPE_DBUS) return; if (salut_tube_dbus_handle_in_names (SALUT_TUBE_DBUS (tube), @@ -1110,7 +1124,7 @@ muc_channel_handle_tubes (SalutMucChannel *self, const gchar *stream_id; SalutTubeIface *tube; guint tube_id; - TpTubeType type; + SalutTubeType type; GibberBytestreamIface *bytestream; stream_id = wocky_node_get_attribute (tube_node, "stream-id"); @@ -1134,7 +1148,7 @@ muc_channel_handle_tubes (SalutMucChannel *self, { switch (type) { - case TP_TUBE_TYPE_DBUS: + case SALUT_TUBE_TYPE_DBUS: { if (initiator_handle == 0) { @@ -1143,7 +1157,7 @@ muc_channel_handle_tubes (SalutMucChannel *self, } } break; - case TP_TUBE_TYPE_STREAM: + case SALUT_TUBE_TYPE_STREAM: initiator_handle = contact; break; default: @@ -1172,7 +1186,7 @@ muc_channel_handle_tubes (SalutMucChannel *self, "type", &type, NULL); - if (type == TP_TUBE_TYPE_DBUS + if (type == SALUT_TUBE_TYPE_DBUS && !salut_tube_dbus_handle_in_names (SALUT_TUBE_DBUS (tube), contact)) { @@ -1479,7 +1493,7 @@ publish_tube_in_node (SalutMucChannel *self, base_conn, TP_HANDLE_TYPE_CONTACT); WockyNode *parameters_node; GHashTable *parameters; - TpTubeType type; + SalutTubeType type; gchar *service, *id_str; guint64 tube_id; TpHandle initiator_handle; @@ -1501,7 +1515,7 @@ publish_tube_in_node (SalutMucChannel *self, switch (type) { - case TP_TUBE_TYPE_DBUS: + case SALUT_TUBE_TYPE_DBUS: { gchar *name, *stream_id; @@ -1523,7 +1537,7 @@ publish_tube_in_node (SalutMucChannel *self, } break; - case TP_TUBE_TYPE_STREAM: + case SALUT_TUBE_TYPE_STREAM: wocky_node_set_attribute (node, "type", "stream"); break; default: @@ -1577,7 +1591,7 @@ update_tube_info (SalutMucChannel *self) while (g_hash_table_iter_next (&iter, NULL, &value)) { TpTubeChannelState state; - TpTubeType type; + SalutTubeType type; TpHandle initiator; WockyNode *tube_node; @@ -1590,7 +1604,7 @@ update_tube_info (SalutMucChannel *self) if (state != TP_TUBE_CHANNEL_STATE_OPEN) continue; - if (type == TP_TUBE_TYPE_STREAM + if (type == SALUT_TUBE_TYPE_STREAM && initiator != TP_GROUP_MIXIN (self)->self_handle) /* We only announce stream tubes we initiated */ return; @@ -1674,7 +1688,7 @@ generate_tube_id (SalutMucChannel *self) static SalutTubeIface * create_new_tube (SalutMucChannel *self, - TpTubeType type, + SalutTubeType type, TpHandle initiator, const gchar *service, GHashTable *parameters, @@ -1693,12 +1707,12 @@ create_new_tube (SalutMucChannel *self, switch (type) { - case TP_TUBE_TYPE_DBUS: + case SALUT_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 TP_TUBE_TYPE_STREAM: + case SALUT_TUBE_TYPE_STREAM: tube = SALUT_TUBE_IFACE (salut_tube_stream_new (conn, handle, TP_HANDLE_TYPE_ROOM, self_handle, initiator, FALSE, service, @@ -1729,7 +1743,7 @@ salut_muc_channel_tube_request (SalutMucChannel *self, const gchar *service; GHashTable *parameters = NULL; guint64 tube_id; - TpTubeType type; + SalutTubeType type; tube_id = generate_tube_id (self); @@ -1738,14 +1752,14 @@ salut_muc_channel_tube_request (SalutMucChannel *self, if (!tp_strdiff (channel_type, TP_IFACE_CHANNEL_TYPE_STREAM_TUBE)) { - type = TP_TUBE_TYPE_STREAM; + type = SALUT_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 = TP_TUBE_TYPE_DBUS; + type = SALUT_TUBE_TYPE_DBUS; service = tp_asv_get_string (request_properties, TP_PROP_CHANNEL_TYPE_DBUS_TUBE_SERVICE_NAME); } |