From 5fd2fb86a32ae2f0a8f81d0090ec662cf2fc61c8 Mon Sep 17 00:00:00 2001 From: Guillaume Desmottes Date: Fri, 4 Oct 2013 16:10:55 +0200 Subject: [PATCH] client-types: implement RequestClientTypes() There is no reason to no implement it. Furthermore, that's the only remaining method on this interface in Telepathy 1.0. https://bugs.freedesktop.org/show_bug.cgi?id=70134 --- src/conn-client-types.c | 39 +++++++++++++++++++++++++++++++++++++++ tests/twisted/client-types.py | 9 ++++++++- tests/twisted/servicetest.py | 1 + 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/src/conn-client-types.c b/src/conn-client-types.c index 1a5ff1e..2947534 100644 --- a/src/conn-client-types.c +++ b/src/conn-client-types.c @@ -132,6 +132,44 @@ client_types_get_client_types (TpSvcConnectionInterfaceClientTypes *iface, g_hash_table_unref (client_types); } +static void +client_types_request_client_types (TpSvcConnectionInterfaceClientTypes *iface, + TpHandle contact, + DBusGMethodInvocation *context) +{ + GabbleConnection *conn = GABBLE_CONNECTION (iface); + TpBaseConnection *base = (TpBaseConnection *) conn; + TpHandleRepoIface *contact_handles; + GError *error = NULL; + gchar **types; + + /* Validate contact */ + contact_handles = tp_base_connection_get_handles (base, + TP_HANDLE_TYPE_CONTACT); + + if (!tp_handle_is_valid (contact_handles, contact, &error)) + { + dbus_g_method_return_error (context, error); + g_error_free (error); + return; + } + + DEBUG ("RequestClientTypes called on the following handle: %u", contact); + + if (!get_client_types_from_handle (conn, contact, &types)) + { + /* FIXME fdo#70140 : we should wait for the disco reply before + * returning. */ + static gchar *empty[] = { NULL }; + types = g_strdupv (empty); + } + + tp_svc_connection_interface_client_types_return_from_request_client_types ( + context, (const gchar **) types); + + g_strfreev (types); +} + void conn_client_types_iface_init (gpointer g_iface, gpointer iface_data) @@ -141,6 +179,7 @@ conn_client_types_iface_init (gpointer g_iface, #define IMPLEMENT(x) tp_svc_connection_interface_client_types_implement_##x \ (klass, client_types_##x) IMPLEMENT (get_client_types); + IMPLEMENT (request_client_types); #undef IMPLEMENT } diff --git a/tests/twisted/client-types.py b/tests/twisted/client-types.py index 9c7ba7a..aee1064 100644 --- a/tests/twisted/client-types.py +++ b/tests/twisted/client-types.py @@ -3,7 +3,8 @@ Test Conn.I.ClientTypes """ from functools import partial -from servicetest import EventPattern, assertEquals, assertLength, assertContains, assertSameSets +from servicetest import (EventPattern, assertEquals, assertLength, + assertContains, assertSameSets, call_async) from gabbletest import exec_test, make_presence, sync_stream import constants as cs import ns @@ -98,6 +99,12 @@ def test(q, bus, conn, stream): assertLength(1, types[meredith_handle]) assertEquals('pc', types[meredith_handle][0]) + types = conn.RequestClientTypes(meredith_handle, + dbus_interface=cs.CONN_IFACE_CLIENT_TYPES) + + assertLength(1, types) + assertEquals('pc', types[0]) + # Two now becomes more available stream.send(make_presence(meredith_two, show='chat')) diff --git a/tests/twisted/servicetest.py b/tests/twisted/servicetest.py index dafdb64..c98bc70 100644 --- a/tests/twisted/servicetest.py +++ b/tests/twisted/servicetest.py @@ -632,6 +632,7 @@ def wrap_connection(conn): ('ContactGroups', cs.CONN_IFACE_CONTACT_GROUPS), ('PowerSaving', cs.CONN_IFACE_POWER_SAVING), ('Addressing', cs.CONN_IFACE_ADDRESSING), + ('ClientTypes', cs.CONN_IFACE_CLIENT_TYPES), ])) def wrap_channel(chan, type_, extra=None): -- 1.8.3.1