[Pkg-telepathy-commits] [telepathy-glib] 49/111: tp_protocol_identify_account_async: add and test

Simon McVittie smcv at debian.org
Wed Mar 19 18:07:25 UTC 2014


This is an automated email from the git hooks/post-receive script.

smcv pushed a commit to branch debian
in repository telepathy-glib.

commit a48cf1a835d94ea6220d67883eca4071e686a4a7
Author: Simon McVittie <simon.mcvittie at collabora.co.uk>
Date:   Mon Oct 28 13:17:22 2013 +0000

    tp_protocol_identify_account_async: add and test
    
    To make the test a little more interesting and a little more realistic,
    we normalize the 'account' parameter to lower-case.
    
    Bug: https://bugs.freedesktop.org/show_bug.cgi?id=71048
    Reviewed-by: Guillaume Desmottes <guillaume.desmottes at collabora.co.uk>
---
 docs/reference/telepathy-glib-sections.txt |  2 +
 examples/cm/echo-message-parts/protocol.c  |  2 +-
 telepathy-glib/protocol.c                  | 70 ++++++++++++++++++++++++++++++
 telepathy-glib/protocol.h                  | 12 +++++
 tests/dbus/protocol-objects.c              | 58 +++++++++++++++++++++++++
 5 files changed, 143 insertions(+), 1 deletion(-)

diff --git a/docs/reference/telepathy-glib-sections.txt b/docs/reference/telepathy-glib-sections.txt
index 4c6679d..df10421 100644
--- a/docs/reference/telepathy-glib-sections.txt
+++ b/docs/reference/telepathy-glib-sections.txt
@@ -6173,6 +6173,8 @@ tp_protocol_get_english_name
 tp_protocol_get_icon_name
 tp_protocol_get_vcard_field
 tp_protocol_get_authentication_types
+tp_protocol_identify_account_async
+tp_protocol_identify_account_finish
 tp_protocol_normalize_contact_async
 tp_protocol_normalize_contact_finish
 <SUBSECTION>
diff --git a/examples/cm/echo-message-parts/protocol.c b/examples/cm/echo-message-parts/protocol.c
index 4512216..ae8894a 100644
--- a/examples/cm/echo-message-parts/protocol.c
+++ b/examples/cm/echo-message-parts/protocol.c
@@ -115,7 +115,7 @@ identify_account (TpBaseProtocol *self G_GNUC_UNUSED,
   const gchar *account = tp_asv_get_string (asv, "account");
 
   if (account != NULL)
-    return g_strdup (account);
+    return g_utf8_strdown (account, -1);
 
   g_set_error (error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT,
       "'account' parameter not given");
diff --git a/telepathy-glib/protocol.c b/telepathy-glib/protocol.c
index fc5adfa..7296db8 100644
--- a/telepathy-glib/protocol.c
+++ b/telepathy-glib/protocol.c
@@ -45,6 +45,7 @@
 #include "telepathy-glib/debug-internal.h"
 #include "telepathy-glib/proxy-internal.h"
 #include "telepathy-glib/util-internal.h"
+#include "telepathy-glib/variant-util-internal.h"
 
 #include "telepathy-glib/_gen/tp-cli-protocol-body.h"
 
@@ -1862,3 +1863,72 @@ tp_protocol_normalize_contact_finish (TpProtocol *self,
 
   return g_task_propagate_pointer (G_TASK (result), error);
 }
+
+/**
+ * tp_protocol_identify_account_async:
+ * @self: a protocol
+ * @vardict: the account parameters as a #GVariant of
+ *  type %G_VARIANT_TYPE_VARDICT. If it is floating, ownership will
+ *  be taken, as if via g_variant_ref_sink().
+ * @cancellable: (allow-none): may be used to cancel the async request
+ * @callback: (scope async): a callback to call when
+ *  the request is satisfied
+ * @user_data: (closure) (allow-none): data to pass to @callback
+ *
+ * Return a string that could identify the account with the given
+ * parameters. In most protocols that string is a normalized 'account'
+ * parameter, but some protocols have more complex requirements;
+ * for instance, on IRC, the 'account' (nickname) is insufficient,
+ * and must be combined with a server or network name.
+ *
+ * Since: 0.UNRELEASED
+ */
+void
+tp_protocol_identify_account_async (TpProtocol *self,
+    GVariant *vardict,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  GTask *task;
+  GHashTable *asv;
+
+  g_return_if_fail (TP_IS_PROTOCOL (self));
+  g_return_if_fail (vardict != NULL);
+  g_return_if_fail (g_variant_is_of_type (vardict, G_VARIANT_TYPE_VARDICT));
+  /* this makes no sense to call for its side-effects */
+  g_return_if_fail (callback != NULL);
+
+  task = g_task_new (self, cancellable, callback, user_data);
+  g_task_set_source_tag (task, tp_protocol_identify_account_async);
+  g_variant_ref_sink (vardict);
+  asv = _tp_asv_from_vardict (vardict);
+  tp_cli_protocol_call_identify_account (self, -1, asv,
+      tp_protocol_async_string_cb, task, g_object_unref, NULL);
+  g_hash_table_unref (asv);
+  g_variant_unref (vardict);
+}
+
+/**
+ * tp_protocol_identify_account_finish:
+ * @self: a protocol
+ * @result: a #GAsyncResult
+ * @error: a #GError to fill
+ *
+ * Interpret the result of tp_protocol_identify_account_async().
+ *
+ * Returns: (transfer full): a string identifying the account,
+ *  or %NULL on error
+ * Since: 0.UNRELEASED
+ */
+gchar *
+tp_protocol_identify_account_finish (TpProtocol *self,
+    GAsyncResult *result,
+    GError **error)
+{
+  g_return_val_if_fail (g_task_is_valid (result, self), NULL);
+  g_return_val_if_fail (g_async_result_is_tagged (result,
+        tp_protocol_identify_account_async), NULL);
+
+  return g_task_propagate_pointer (G_TASK (result), error);
+}
diff --git a/telepathy-glib/protocol.h b/telepathy-glib/protocol.h
index 1623907..05f7781 100644
--- a/telepathy-glib/protocol.h
+++ b/telepathy-glib/protocol.h
@@ -137,6 +137,18 @@ gchar *tp_protocol_normalize_contact_finish (TpProtocol *self,
     GAsyncResult *result,
     GError **error);
 
+_TP_AVAILABLE_IN_UNRELEASED
+void tp_protocol_identify_account_async (TpProtocol *self,
+    GVariant *vardict,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+_TP_AVAILABLE_IN_UNRELEASED
+gchar *tp_protocol_identify_account_finish (TpProtocol *self,
+    GAsyncResult *result,
+    GError **error);
+
 G_END_DECLS
 
 #include <telepathy-glib/_gen/tp-cli-protocol.h>
diff --git a/tests/dbus/protocol-objects.c b/tests/dbus/protocol-objects.c
index 2488057..fee4afe 100644
--- a/tests/dbus/protocol-objects.c
+++ b/tests/dbus/protocol-objects.c
@@ -567,6 +567,62 @@ test_normalize (Test *test,
   g_clear_error (&test->error);
 }
 
+static void
+test_id (Test *test,
+    gconstpointer data G_GNUC_UNUSED)
+{
+  GAsyncResult *result = NULL;
+  gchar *s;
+
+  tp_tests_proxy_run_until_prepared (test->cm, NULL);
+  test->protocol = g_object_ref (
+      tp_connection_manager_get_protocol_object (test->cm, "example"));
+
+  tp_protocol_identify_account_async (test->protocol,
+      g_variant_new_parsed ("{ 'account': <'Hello'> }"),
+      NULL, tp_tests_result_ready_cb, &result);
+  tp_tests_run_until_result (&result);
+  s = tp_protocol_identify_account_finish (test->protocol, result,
+      &test->error);
+  g_assert_no_error (test->error);
+  g_assert_cmpstr (s, ==, "hello");
+  g_clear_object (&result);
+  g_free (s);
+
+  tp_protocol_identify_account_async (test->protocol,
+      g_variant_new_parsed ("{ 'account': <'Hello'>, 'unknown-param': <42> }"),
+      NULL, tp_tests_result_ready_cb, &result);
+  tp_tests_run_until_result (&result);
+  s = tp_protocol_identify_account_finish (test->protocol, result,
+      &test->error);
+  g_assert_error (test->error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT);
+  g_assert_cmpstr (s, ==, NULL);
+  g_clear_object (&result);
+  g_clear_error (&test->error);
+
+  tp_protocol_identify_account_async (test->protocol,
+      g_variant_new_parsed ("@a{sv} {}"),
+      NULL, tp_tests_result_ready_cb, &result);
+  tp_tests_run_until_result (&result);
+  s = tp_protocol_identify_account_finish (test->protocol, result,
+      &test->error);
+  g_assert_error (test->error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT);
+  g_assert_cmpstr (s, ==, NULL);
+  g_clear_object (&result);
+  g_clear_error (&test->error);
+
+  tp_protocol_identify_account_async (test->protocol,
+      g_variant_new_parsed ("@a{sv} { 'account': <''> }"),
+      NULL, tp_tests_result_ready_cb, &result);
+  tp_tests_run_until_result (&result);
+  s = tp_protocol_identify_account_finish (test->protocol, result,
+      &test->error);
+  g_assert_error (test->error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT);
+  g_assert_cmpstr (s, ==, NULL);
+  g_clear_object (&result);
+  g_clear_error (&test->error);
+}
+
 int
 main (int argc,
       char **argv)
@@ -592,6 +648,8 @@ main (int argc,
       test_protocol_object_from_file, teardown);
   g_test_add ("/protocol-objects/normalize", Test, NULL, setup,
       test_normalize, teardown);
+  g_test_add ("/protocol-objects/id", Test, NULL, setup,
+      test_id, teardown);
 
   return tp_tests_run_with_bus ();
 }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-telepathy/telepathy-glib.git



More information about the Pkg-telepathy-commits mailing list