[next] telepathy-glib: handle-set: add GVariant API
Guillaume Desmottes
gdesmott at kemper.freedesktop.org
Fri May 16 06:04:55 PDT 2014
Module: telepathy-glib
Branch: next
Commit: d400732392fcc75b13bbe7c0e5ce73b3c54f7ad6
URL: http://cgit.freedesktop.org/telepathy/telepathy-glib/commit/?id=d400732392fcc75b13bbe7c0e5ce73b3c54f7ad6
Author: Guillaume Desmottes <guillaume.desmottes at collabora.co.uk>
Date: Thu May 15 10:29:20 2014 +0200
handle-set: add GVariant API
Fix https://bugs.freedesktop.org/show_bug.cgi?id=77773
---
.../telepathy-glib/telepathy-glib-sections.txt | 2 +
telepathy-glib/handle-repo.h | 5 +++
telepathy-glib/handle-set.c | 43 ++++++++++++++++++++
tests/dbus/handle-set.c | 8 ++++
4 files changed, 58 insertions(+)
diff --git a/docs/reference/telepathy-glib/telepathy-glib-sections.txt b/docs/reference/telepathy-glib/telepathy-glib-sections.txt
index 93f6f3f..44fbdf5 100644
--- a/docs/reference/telepathy-glib/telepathy-glib-sections.txt
+++ b/docs/reference/telepathy-glib/telepathy-glib-sections.txt
@@ -208,6 +208,7 @@ tp_handle_set_new
tp_handle_set_new_containing
tp_handle_set_new_from_array
tp_handle_set_new_from_intset
+tp_handle_set_new_from_variant
tp_handle_set_copy
tp_handle_set_clear
tp_handle_set_destroy
@@ -219,6 +220,7 @@ tp_handle_set_foreach
tp_handle_set_is_empty
tp_handle_set_size
tp_handle_set_to_array
+tp_handle_set_to_variant
tp_handle_set_to_identifier_map
tp_handle_set_update
tp_handle_set_difference_update
diff --git a/telepathy-glib/handle-repo.h b/telepathy-glib/handle-repo.h
index ac63995..3d41f25 100644
--- a/telepathy-glib/handle-repo.h
+++ b/telepathy-glib/handle-repo.h
@@ -143,6 +143,11 @@ GVariant *tp_handle_set_to_identifier_map (TpHandleSet *self)
TpHandleSet *tp_handle_set_new_from_array (TpHandleRepoIface *repo,
const GArray *array) G_GNUC_WARN_UNUSED_RESULT;
+GVariant *tp_handle_set_to_variant (const TpHandleSet *set)
+ G_GNUC_WARN_UNUSED_RESULT;
+TpHandleSet *tp_handle_set_new_from_variant (TpHandleRepoIface *repo,
+ GVariant *variant) G_GNUC_WARN_UNUSED_RESULT;
+
TpIntset *tp_handle_set_update (TpHandleSet *set, const TpIntset *add)
G_GNUC_WARN_UNUSED_RESULT;
TpIntset *tp_handle_set_difference_update (TpHandleSet *set,
diff --git a/telepathy-glib/handle-set.c b/telepathy-glib/handle-set.c
index 7d61895..c6c9102 100644
--- a/telepathy-glib/handle-set.c
+++ b/telepathy-glib/handle-set.c
@@ -294,6 +294,49 @@ tp_handle_set_to_array (const TpHandleSet *set)
}
/**
+ * tp_handle_set_to_variant:
+ * @set: A handle set
+ *
+ * <!--Returns: says it all, this comment is just to keep gtkdoc happy-->
+ *
+ * Returns: (transfer none): a new floating #GVariant of type
+ * 'au' (array of uint32) representing the handles in the set
+ *
+ * Since: UNRELEASED
+ */
+GVariant *
+tp_handle_set_to_variant (const TpHandleSet *set)
+{
+ g_return_val_if_fail (set != NULL, NULL);
+
+ return tp_intset_to_variant (set->intset);
+}
+
+/**
+ * tp_handle_set_new_from_variant:
+ * @repo: #TpHandleRepoIface that holds the handles to be reffed by this set
+ * @variant: a #GVariant of type 'au' containing the handles to be referenced
+ * by this set, consumed if floating
+ *
+ * Creates a new #TpHandleSet
+ *
+ * Returns: (transfer full): A new #TpHandleSet
+ *
+ * Since: UNRELEASED
+ */
+TpHandleSet *
+tp_handle_set_new_from_variant (TpHandleRepoIface *repo,
+ GVariant *v)
+{
+ TpHandleSet *set = tp_handle_set_new (repo);
+ TpIntset *tmp = tp_intset_from_variant (v);
+
+ tp_intset_destroy (tp_handle_set_update (set, tmp));
+ tp_intset_destroy (tmp);
+ return set;
+}
+
+/**
* tp_handle_set_to_identifier_map:
* @self: a handle set
*
diff --git a/tests/dbus/handle-set.c b/tests/dbus/handle-set.c
index b2d4c6d..55cccee 100644
--- a/tests/dbus/handle-set.c
+++ b/tests/dbus/handle-set.c
@@ -34,6 +34,7 @@ test (Fixture *f,
GError *error = NULL;
gchar *s;
GTestDBus *test_dbus;
+ GVariant *v;
TpHandle h1, h2, h3, h4;
@@ -132,6 +133,13 @@ test (Fixture *f,
s = tp_handle_set_dump (set);
g_free (s);
+ v = tp_handle_set_to_variant (set);
+ g_assert (g_variant_is_of_type (v, G_VARIANT_TYPE ("au")));
+ other = tp_handle_set_new_from_variant (repo, v);
+ g_assert (tp_intset_is_equal (tp_handle_set_peek (set),
+ tp_handle_set_peek (other)));
+ tp_clear_pointer (&other, tp_handle_set_destroy);
+
MYASSERT (tp_handle_set_remove (set, h3) == TRUE, "");
tp_handle_set_destroy (set);
More information about the telepathy-commits
mailing list