[Telepathy-commits] [telepathy-salut/master] Caps: GetContactCapabilities calls every channel manager to get caps

Alban Crequy alban.crequy at collabora.co.uk
Thu Feb 26 11:20:06 PST 2009


---
 src/salut-connection.c |   47 ++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 46 insertions(+), 1 deletions(-)

diff --git a/src/salut-connection.c b/src/salut-connection.c
index eda637c..492bd33 100644
--- a/src/salut-connection.c
+++ b/src/salut-connection.c
@@ -1693,6 +1693,51 @@ salut_connection_get_handle_contact_capabilities (SalutConnection *self,
     }
 }
 
+/**
+ * salut_connection_get_contact_capabilities
+ *
+ * Implements D-Bus method GetContactCapabilities
+ * on interface
+ * org.freedesktop.Telepathy.Connection.Interface.ContactCapabilities
+ */
+static void
+salut_connection_get_contact_capabilities (
+    SalutSvcConnectionInterfaceContactCapabilities *iface,
+    const GArray *handles,
+    DBusGMethodInvocation *context)
+{
+  SalutConnection *self = SALUT_CONNECTION (iface);
+  TpBaseConnection *base = (TpBaseConnection *) self;
+  TpHandleRepoIface *contact_handles = tp_base_connection_get_handles (base,
+      TP_HANDLE_TYPE_CONTACT);
+  guint i;
+  GPtrArray *ret;
+  GError *error = NULL;
+
+  TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context);
+
+  if (!tp_handles_are_valid (contact_handles, handles, FALSE, &error))
+    {
+      dbus_g_method_return_error (context, error);
+      g_error_free (error);
+      return;
+    }
+
+  ret = g_ptr_array_new ();
+
+  for (i = 0; i < handles->len; i++)
+    {
+      TpHandle handle = g_array_index (handles, TpHandle, i);
+
+      salut_connection_get_handle_contact_capabilities (self, handle, ret);
+    }
+
+  salut_svc_connection_interface_contact_capabilities_return_from_get_contact_capabilities
+      (context, ret);
+
+  salut_free_enhanced_contact_capabilities (ret);
+}
+
 
 static void
 _emit_contact_capabilities_changed (SalutConnection *conn,
@@ -1827,7 +1872,7 @@ salut_conn_contact_caps_iface_init (gpointer g_iface, gpointer iface_data)
 #define IMPLEMENT(x) \
     salut_svc_connection_interface_contact_capabilities_implement_##x (\
     klass, salut_connection_##x)
-  //IMPLEMENT(get_contact_capabilities);
+  IMPLEMENT(get_contact_capabilities);
   IMPLEMENT(set_self_capabilities);
 #undef IMPLEMENT
 }
-- 
1.5.6.5




More information about the telepathy-commits mailing list