summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSenko Rasic <senko.rasic@collabora.co.uk>2010-04-12 16:06:43 +0200
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2010-04-15 19:16:12 +0100
commit33a006b9204e6a3559c92837e4a6c89ff1f0d2f3 (patch)
tree9c5087901cd5888e43b8b7d0ee3596f8a6bf032f
parent375fab4d40d9324b4aeadf3321c33c347bd50d07 (diff)
downloadtelepathy-mission-control-33a006b9204e6a3559c92837e4a6c89ff1f0d2f3.tar.gz
added internal _mcd_channel_details_build_from_tp_chan method
-rw-r--r--src/mcd-channel-priv.h2
-rw-r--r--src/mcd-channel.c54
2 files changed, 41 insertions, 15 deletions
diff --git a/src/mcd-channel-priv.h b/src/mcd-channel-priv.h
index 97f682f9..01f11459 100644
--- a/src/mcd-channel-priv.h
+++ b/src/mcd-channel-priv.h
@@ -49,6 +49,8 @@ GHashTable *_mcd_channel_get_immutable_properties (McdChannel *channel);
G_GNUC_INTERNAL
GPtrArray *_mcd_channel_details_build_from_list (const GList *channels);
G_GNUC_INTERNAL
+GPtrArray *_mcd_channel_details_build_from_tp_chan (TpChannel *channel);
+G_GNUC_INTERNAL
void _mcd_channel_details_free (GPtrArray *channels);
G_GNUC_INTERNAL
diff --git a/src/mcd-channel.c b/src/mcd-channel.c
index 95c8eef4..bef0516b 100644
--- a/src/mcd-channel.c
+++ b/src/mcd-channel.c
@@ -1067,6 +1067,28 @@ _mcd_channel_get_immutable_properties (McdChannel *channel)
return ret;
}
+static void
+_channel_details_array_append (GPtrArray *channel_array, TpChannel *channel)
+{
+ GType type = TP_STRUCT_TYPE_CHANNEL_DETAILS;
+ GValue channel_val = { 0, };
+ GHashTable *properties;
+ const gchar *object_path;
+
+ properties = tp_channel_borrow_immutable_properties (channel);
+ object_path = tp_proxy_get_object_path (channel);
+
+ g_value_init (&channel_val, type);
+ g_value_take_boxed (&channel_val,
+ dbus_g_type_specialized_construct (type));
+ dbus_g_type_struct_set (&channel_val,
+ 0, object_path,
+ 1, properties,
+ G_MAXUINT);
+
+ g_ptr_array_add (channel_array, g_value_get_boxed (&channel_val));
+}
+
/*
* _mcd_channel_details_build_from_list:
* @channels: a #GList of #McdChannel elements.
@@ -1079,29 +1101,31 @@ _mcd_channel_details_build_from_list (const GList *channels)
{
GPtrArray *channel_array;
const GList *list;
- GType type = TP_STRUCT_TYPE_CHANNEL_DETAILS;
channel_array = g_ptr_array_sized_new (g_list_length ((GList *) channels));
for (list = channels; list != NULL; list = list->next)
{
- McdChannel *channel = MCD_CHANNEL (list->data);
- GHashTable *properties;
- GValue channel_val = { 0, };
-
- properties = _mcd_channel_get_immutable_properties (channel);
+ _channel_details_array_append (channel_array,
+ mcd_channel_get_tp_channel (MCD_CHANNEL (list->data)));
+ }
- g_value_init (&channel_val, type);
- g_value_take_boxed (&channel_val,
- dbus_g_type_specialized_construct (type));
- dbus_g_type_struct_set (&channel_val,
- 0, mcd_channel_get_object_path (channel),
- 1, properties,
- G_MAXUINT);
+ return channel_array;
+}
- g_ptr_array_add (channel_array, g_value_get_boxed (&channel_val));
- }
+/*
+ * _mcd_channel_details_build_from_tp_chan:
+ * @channel: a #TpChannel
+ *
+ * Returns: a #GPtrArray of Channel_Details, ready to be sent over D-Bus. Free
+ * with _mcd_channel_details_free().
+ */
+GPtrArray *
+_mcd_channel_details_build_from_tp_chan (TpChannel *channel)
+{
+ GPtrArray *channel_array = g_ptr_array_sized_new (1);
+ _channel_details_array_append (channel_array, channel);
return channel_array;
}