[Telepathy-commits] [telepathy-salut/master] SalutImManager implements salut_im_factory_get_contact_caps()

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


---
 src/salut-im-manager.c |   63 +++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 62 insertions(+), 1 deletions(-)

diff --git a/src/salut-im-manager.c b/src/salut-im-manager.c
index 66d0a97..057c32f 100644
--- a/src/salut-im-manager.c
+++ b/src/salut-im-manager.c
@@ -21,6 +21,7 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include "extensions/extensions.h"
 #include "salut-caps-channel-manager.h"
 #include "salut-im-channel.h"
 #include "salut-im-manager.h"
@@ -41,6 +42,7 @@
 
 static void salut_im_manager_channel_manager_iface_init (gpointer g_iface,
     gpointer iface_data);
+static void caps_channel_manager_iface_init (gpointer, gpointer);
 
 static SalutImChannel *
 salut_im_manager_new_channel (SalutImManager *mgr, TpHandle handle,
@@ -50,7 +52,7 @@ G_DEFINE_TYPE_WITH_CODE (SalutImManager, salut_im_manager, G_TYPE_OBJECT,
     G_IMPLEMENT_INTERFACE (TP_TYPE_CHANNEL_MANAGER,
       salut_im_manager_channel_manager_iface_init);
     G_IMPLEMENT_INTERFACE (SALUT_TYPE_CAPS_CHANNEL_MANAGER,
-      NULL));
+      caps_channel_manager_iface_init));
 
 /* properties */
 enum
@@ -649,3 +651,62 @@ salut_im_manager_new (SalutConnection *connection,
       "xmpp-connection-manager", xmpp_connection_manager,
       NULL);
 }
+
+static void
+salut_im_factory_get_contact_caps (SalutCapsChannelManager *manager,
+                                    SalutConnection *conn,
+                                    TpHandle handle,
+                                    GPtrArray *arr)
+{
+  /* We don't need to check this contact's capabilities, we assume every
+   * contact support text channels. */
+
+  GValue monster = {0, };
+  GHashTable *fixed_properties;
+  GValue *channel_type_value;
+  GValue *target_handle_type_value;
+  gchar *text_allowed_properties[] =
+      {
+        TP_IFACE_CHANNEL ".TargetHandle",
+        NULL
+      };
+
+  g_assert (handle != 0);
+
+  g_value_init (&monster, SALUT_STRUCT_TYPE_ENHANCED_CONTACT_CAPABILITY);
+  g_value_take_boxed (&monster,
+      dbus_g_type_specialized_construct (
+        SALUT_STRUCT_TYPE_ENHANCED_CONTACT_CAPABILITY));
+
+  fixed_properties = g_hash_table_new_full (g_str_hash, g_str_equal, NULL,
+      (GDestroyNotify) tp_g_value_slice_free);
+
+  channel_type_value = tp_g_value_slice_new (G_TYPE_STRING);
+  g_value_set_static_string (channel_type_value, TP_IFACE_CHANNEL_TYPE_TEXT);
+  g_hash_table_insert (fixed_properties, TP_IFACE_CHANNEL ".ChannelType",
+      channel_type_value);
+
+  target_handle_type_value = tp_g_value_slice_new (G_TYPE_UINT);
+  g_value_set_uint (target_handle_type_value, TP_HANDLE_TYPE_CONTACT);
+  g_hash_table_insert (fixed_properties, TP_IFACE_CHANNEL ".TargetHandleType",
+      target_handle_type_value);
+
+  dbus_g_type_struct_set (&monster,
+      0, handle,
+      1, fixed_properties,
+      2, text_allowed_properties,
+      G_MAXUINT);
+
+  g_hash_table_destroy (fixed_properties);
+
+  g_ptr_array_add (arr, g_value_get_boxed (&monster));
+}
+
+static void
+caps_channel_manager_iface_init (gpointer g_iface,
+                                 gpointer iface_data)
+{
+  SalutCapsChannelManagerIface *iface = g_iface;
+
+  iface->get_contact_caps = salut_im_factory_get_contact_caps;
+}
-- 
1.5.6.5




More information about the telepathy-commits mailing list