[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