summaryrefslogtreecommitdiff
path: root/telepathy-glib/room-info.c
diff options
context:
space:
mode:
Diffstat (limited to 'telepathy-glib/room-info.c')
-rw-r--r--telepathy-glib/room-info.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/telepathy-glib/room-info.c b/telepathy-glib/room-info.c
index 1843b1d0f..10942dcf6 100644
--- a/telepathy-glib/room-info.c
+++ b/telepathy-glib/room-info.c
@@ -25,6 +25,7 @@
#include <telepathy-glib/gtypes.h>
#include <telepathy-glib/dbus.h>
+#include <telepathy-glib/util.h>
/**
* SECTION: room-info
@@ -97,7 +98,8 @@ TpRoomInfo *
_tp_room_info_new (GValueArray *dbus_struct)
{
TpRoomInfo *room;
- GValue *v;
+ const gchar *channel_type;
+ GHashTable *info;
g_return_val_if_fail (dbus_struct != NULL, NULL);
g_return_val_if_fail (dbus_struct->n_values == 3, NULL);
@@ -107,14 +109,16 @@ _tp_room_info_new (GValueArray *dbus_struct)
room = g_object_new (TP_TYPE_ROOM_INFO,
NULL);
- v = g_value_array_get_nth (dbus_struct, 0);
- room->priv->handle = g_value_get_uint (v);
-
- v = g_value_array_get_nth (dbus_struct, 1);
- room->priv->channel_type = g_value_dup_string (v);
-
- v = g_value_array_get_nth (dbus_struct, 2);
- room->priv->info = g_value_dup_boxed (v);
+ tp_value_array_unpack (dbus_struct, 3,
+ &room->priv->handle,
+ &channel_type,
+ &info);
+ room->priv->channel_type = g_strdup (channel_type);
+ room->priv->info = g_hash_table_new_full (g_str_hash, g_str_equal,
+ g_free, (GDestroyNotify) tp_g_value_slice_free);
+ tp_g_hash_table_update (room->priv->info, info,
+ (GBoxedCopyFunc) g_strdup,
+ (GBoxedCopyFunc) tp_g_value_slice_dup);
return room;
}