diff options
author | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2014-02-04 12:51:58 +0000 |
---|---|---|
committer | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2014-02-04 12:52:07 +0000 |
commit | bdba6fdf7804c050197db70d5840ae0f96cfe4be (patch) | |
tree | eaa118be77ad165bd58ce97a8bc53c03fd1629eb | |
parent | 64e9a2cfc53c6786e0a1005f244fa7a8e635d8c7 (diff) | |
download | telepathy-glib-bdba6fdf7804c050197db70d5840ae0f96cfe4be.tar.gz |
tp_connection_manager_param_dup_variant_type: add
In order for this to work, TpProtocol now ignores parameters whose
D-Bus signatures are not a syntactically valid single complete type.
This is helpful for Mission Control to be able to migrate parameters
from untyped to typed storage - it stores parameters in terms of
GVariant.
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=71093
Reviewed-by: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
[added (transfer full) as requested in review -smcv]
-rw-r--r-- | docs/reference/telepathy-glib-sections.txt | 1 | ||||
-rw-r--r-- | telepathy-glib/connection-manager.c | 22 | ||||
-rw-r--r-- | telepathy-glib/connection-manager.h | 3 | ||||
-rw-r--r-- | telepathy-glib/protocol.c | 9 |
4 files changed, 35 insertions, 0 deletions
diff --git a/docs/reference/telepathy-glib-sections.txt b/docs/reference/telepathy-glib-sections.txt index 2e9d5eb3d..3940cba44 100644 --- a/docs/reference/telepathy-glib-sections.txt +++ b/docs/reference/telepathy-glib-sections.txt @@ -4849,6 +4849,7 @@ tp_connection_manager_protocol_get_param TpConnectionManagerParam tp_connection_manager_param_get_name tp_connection_manager_param_get_dbus_signature +tp_connection_manager_param_dup_variant_type tp_connection_manager_param_is_required tp_connection_manager_param_is_required_for_registration tp_connection_manager_param_is_secret diff --git a/telepathy-glib/connection-manager.c b/telepathy-glib/connection-manager.c index 406467159..c93d43a57 100644 --- a/telepathy-glib/connection-manager.c +++ b/telepathy-glib/connection-manager.c @@ -2601,6 +2601,28 @@ tp_connection_manager_param_get_dbus_signature ( } /** + * tp_connection_manager_param_dup_variant_type: + * @param: a parameter supported by a #TpConnectionManager + * + * <!-- --> + * + * Returns: (transfer full): the #GVariantType of the parameter + * Since: 0.UNRELEASED + */ +GVariantType * +tp_connection_manager_param_dup_variant_type ( + const TpConnectionManagerParam *param) +{ + g_return_val_if_fail (param != NULL, NULL); + + /* this should have been checked when we created it */ + g_return_val_if_fail (g_variant_type_string_is_valid (param->dbus_signature), + NULL); + + return g_variant_type_new (param->dbus_signature); +} + +/** * tp_connection_manager_param_is_required: * @param: a parameter supported by a #TpConnectionManager * diff --git a/telepathy-glib/connection-manager.h b/telepathy-glib/connection-manager.h index ac89341c3..6dd467ef3 100644 --- a/telepathy-glib/connection-manager.h +++ b/telepathy-glib/connection-manager.h @@ -204,6 +204,9 @@ gboolean tp_connection_manager_param_get_default ( _TP_AVAILABLE_IN_0_20 GVariant *tp_connection_manager_param_dup_default_variant ( const TpConnectionManagerParam *param); +_TP_AVAILABLE_IN_UNRELEASED +GVariantType *tp_connection_manager_param_dup_variant_type ( + const TpConnectionManagerParam *param); void tp_connection_manager_init_known_interfaces (void); diff --git a/telepathy-glib/protocol.c b/telepathy-glib/protocol.c index 867db25f1..ee9b7e282 100644 --- a/telepathy-glib/protocol.c +++ b/telepathy-glib/protocol.c @@ -215,6 +215,15 @@ tp_protocol_params_from_param_specs (const GPtrArray *parameters, continue; } + if (!g_variant_type_string_is_valid (param->dbus_signature)) + { + DEBUG ("Parameter #%d for %s has type '%s' which is not a " + "single complete type, ignoring", i, protocol, + param->dbus_signature); + g_array_set_size (output, output->len - 1); + continue; + } + g_value_init (¶m->default_value, G_VALUE_TYPE (tmp)); g_value_copy (tmp, ¶m->default_value); |