diff options
author | Senko Rasic <senko.rasic@collabora.co.uk> | 2010-04-12 16:06:43 +0200 |
---|---|---|
committer | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2010-04-15 19:16:12 +0100 |
commit | 33a006b9204e6a3559c92837e4a6c89ff1f0d2f3 (patch) | |
tree | 9c5087901cd5888e43b8b7d0ee3596f8a6bf032f | |
parent | 375fab4d40d9324b4aeadf3321c33c347bd50d07 (diff) | |
download | telepathy-mission-control-33a006b9204e6a3559c92837e4a6c89ff1f0d2f3.tar.gz |
added internal _mcd_channel_details_build_from_tp_chan method
-rw-r--r-- | src/mcd-channel-priv.h | 2 | ||||
-rw-r--r-- | src/mcd-channel.c | 54 |
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; } |