From d4fc19e4f0bd67b3e46e376dd5c12f827a62f21b Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Mon, 8 Oct 2012 15:46:44 +0100 Subject: [PATCH] _mcd_client_match_property: take channel properties as GVariant --- src/mcd-client-priv.h | 4 ---- src/mcd-client.c | 29 +++++++++++++---------------- 2 files changed, 13 insertions(+), 20 deletions(-) diff --git a/src/mcd-client-priv.h b/src/mcd-client-priv.h index 8b300a6..c00ce13 100644 --- a/src/mcd-client-priv.h +++ b/src/mcd-client-priv.h @@ -110,10 +110,6 @@ G_GNUC_INTERNAL void _mcd_client_proxy_dec_ready_lock (McdClientProxy *self); #define MC_CLIENT_BUS_NAME_BASE_LEN (sizeof (TP_CLIENT_BUS_NAME_BASE) - 1) -G_GNUC_INTERNAL gboolean _mcd_client_match_property ( - GHashTable *channel_properties, gchar *property_name, - GValue *filter_value); - G_GNUC_INTERNAL guint _mcd_client_match_filters ( GVariant *channel_properties, const GList *filters, gboolean assume_requested); diff --git a/src/mcd-client.c b/src/mcd-client.c index efdcf56..455cfd7 100644 --- a/src/mcd-client.c +++ b/src/mcd-client.c @@ -1471,20 +1471,23 @@ _mcd_client_proxy_dup_handler_capabilities (McdClientProxy *self) /* returns TRUE if the channel matches one property criteria */ -gboolean -_mcd_client_match_property (GHashTable *channel_properties, +static gboolean +_mcd_client_match_property (GVariant *channel_properties, gchar *property_name, GValue *filter_value) { GType filter_type = G_VALUE_TYPE (filter_value); + g_return_val_if_fail (g_variant_is_of_type (channel_properties, + G_VARIANT_TYPE_VARDICT), FALSE); + g_assert (G_IS_VALUE (filter_value)); if (filter_type == G_TYPE_STRING) { const gchar *string; - string = tp_asv_get_string (channel_properties, property_name); + string = tp_vardict_get_string (channel_properties, property_name); if (!string) return FALSE; @@ -1495,7 +1498,7 @@ _mcd_client_match_property (GHashTable *channel_properties, { const gchar *path; - path = tp_asv_get_object_path (channel_properties, property_name); + path = tp_vardict_get_object_path (channel_properties, property_name); if (!path) return FALSE; @@ -1507,7 +1510,7 @@ _mcd_client_match_property (GHashTable *channel_properties, gboolean valid; gboolean b; - b = tp_asv_get_boolean (channel_properties, property_name, &valid); + b = tp_vardict_get_boolean (channel_properties, property_name, &valid); if (!valid) return FALSE; @@ -1520,7 +1523,7 @@ _mcd_client_match_property (GHashTable *channel_properties, gboolean valid; guint64 i; - i = tp_asv_get_uint64 (channel_properties, property_name, &valid); + i = tp_vardict_get_uint64 (channel_properties, property_name, &valid); if (!valid) return FALSE; @@ -1537,7 +1540,7 @@ _mcd_client_match_property (GHashTable *channel_properties, gboolean valid; gint64 i; - i = tp_asv_get_int64 (channel_properties, property_name, &valid); + i = tp_vardict_get_int64 (channel_properties, property_name, &valid); if (!valid) return FALSE; @@ -1565,13 +1568,9 @@ _mcd_client_match_filters (GVariant *channel_properties, { const GList *list; guint best_quality = 0; - GValue value = G_VALUE_INIT; - /* FIXME: when Xavier's tp_vardict_get_*() functions have landed, - * make _mcd_client_match_property use those on variant_properties - * rather than doing this. But for now... */ - dbus_g_value_parse_g_variant (channel_properties, &value); - g_assert (G_VALUE_HOLDS (&value, TP_HASH_TYPE_STRING_VARIANT_MAP)); + g_return_val_if_fail (g_variant_is_of_type (channel_properties, + G_VARIANT_TYPE_VARDICT), 0); for (list = filters; list != NULL; list = list->next) { @@ -1607,7 +1606,7 @@ _mcd_client_match_filters (GVariant *channel_properties, break; } } - else if (! _mcd_client_match_property (g_value_get_boxed (&value), + else if (! _mcd_client_match_property (channel_properties, property_name, filter_value)) { @@ -1622,8 +1621,6 @@ _mcd_client_match_filters (GVariant *channel_properties, } } - g_value_unset (&value); - return best_quality; } -- 1.7.10.4