summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <simon.mcvittie@collabora.co.uk>2014-02-04 12:51:58 +0000
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2014-02-04 12:52:07 +0000
commitbdba6fdf7804c050197db70d5840ae0f96cfe4be (patch)
treeeaa118be77ad165bd58ce97a8bc53c03fd1629eb
parent64e9a2cfc53c6786e0a1005f244fa7a8e635d8c7 (diff)
downloadtelepathy-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.txt1
-rw-r--r--telepathy-glib/connection-manager.c22
-rw-r--r--telepathy-glib/connection-manager.h3
-rw-r--r--telepathy-glib/protocol.c9
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 (&param->default_value,
G_VALUE_TYPE (tmp));
g_value_copy (tmp, &param->default_value);