summaryrefslogtreecommitdiff
path: root/src/muc-channel.c
diff options
context:
space:
mode:
authorXavier Claessens <xavier.claessens@collabora.co.uk>2013-09-20 17:19:43 -0400
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2013-10-15 15:42:31 -0400
commit82162a775b73ec8fc6bac7ff2c3efa7592554916 (patch)
treee0a8852722e3976b8b99743bc227cc2889ceca03 /src/muc-channel.c
parent822ddd064c266345ab4fe19c4b574a4cd29d7159 (diff)
downloadtelepathy-salut-82162a775b73ec8fc6bac7ff2c3efa7592554916.tar.gz
Port to telepathy-glib-1
Diffstat (limited to 'src/muc-channel.c')
-rw-r--r--src/muc-channel.c120
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);
}