telepathy-glib: tp_account_channel_request_new_text, tp_account_channel_request_set_target_contact, tp_account_channel_request_set_target_id: add

Simon McVittie smcv at kemper.freedesktop.org
Mon Apr 30 11:57:28 PDT 2012


Module: telepathy-glib
Branch: master
Commit: f89c396996d914b1e54dee714276da85df0fcb5e
URL:    http://cgit.freedesktop.org/telepathy/telepathy-glib/commit/?id=f89c396996d914b1e54dee714276da85df0fcb5e

Author: Simon McVittie <simon.mcvittie at collabora.co.uk>
Date:   Mon Apr 16 16:33:46 2012 +0100

tp_account_channel_request_new_text, tp_account_channel_request_set_target_contact, tp_account_channel_request_set_target_id: add

Signed-off-by: Simon McVittie <simon.mcvittie at collabora.co.uk>
Reviewed-by: Jonny Lamb <jonny.lamb at collabora.co.uk>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=48780

---

 docs/reference/telepathy-glib-sections.txt |    3 +
 telepathy-glib/account-channel-request.c   |  113 ++++++++++++++++++++++++++++
 telepathy-glib/account-channel-request.h   |   15 ++++
 telepathy-glib/capabilities.c              |    8 ++-
 4 files changed, 137 insertions(+), 2 deletions(-)

diff --git a/docs/reference/telepathy-glib-sections.txt b/docs/reference/telepathy-glib-sections.txt
index 02f6c41..b7294c6 100644
--- a/docs/reference/telepathy-glib-sections.txt
+++ b/docs/reference/telepathy-glib-sections.txt
@@ -6030,6 +6030,9 @@ tp_account_channel_request_new
 tp_account_channel_request_get_request
 tp_account_channel_request_get_user_action_time
 tp_account_channel_request_get_account
+tp_account_channel_request_set_target_contact
+tp_account_channel_request_set_target_id
+tp_account_channel_request_new_text
 tp_account_channel_request_create_and_handle_channel_async
 tp_account_channel_request_create_and_handle_channel_finish
 tp_account_channel_request_ensure_and_handle_channel_async
diff --git a/telepathy-glib/account-channel-request.c b/telepathy-glib/account-channel-request.c
index 2c376ca..16174fa 100644
--- a/telepathy-glib/account-channel-request.c
+++ b/telepathy-glib/account-channel-request.c
@@ -79,6 +79,7 @@
 #include <telepathy-glib/channel-request.h>
 #include <telepathy-glib/channel.h>
 #include <telepathy-glib/gtypes.h>
+#include <telepathy-glib/interfaces.h>
 #include <telepathy-glib/simple-handler.h>
 #include <telepathy-glib/util.h>
 #include <telepathy-glib/util-internal.h>
@@ -1718,3 +1719,115 @@ _tp_account_channel_request_get_client (TpAccountChannelRequest *self)
 
   return self->priv->handler;
 }
+
+/**
+ * tp_account_channel_request_set_target_contact:
+ * @self: a #TpAccountChannelRequest
+ * @contact: the contact to be contacted
+ *
+ * Configure this request to create a peer-to-peer channel with @contact as
+ * the other peer.
+ *
+ * This function can't be called once @self has been used to request a
+ * channel.
+ *
+ * Since: 0.19.UNRELEASED
+ */
+void
+tp_account_channel_request_set_target_contact (
+    TpAccountChannelRequest *self,
+    TpContact *contact)
+{
+  g_return_if_fail (TP_IS_ACCOUNT_CHANNEL_REQUEST (self));
+  g_return_if_fail (TP_IS_CONTACT (contact));
+  g_return_if_fail (!self->priv->requested);
+
+  /* Do not use tp_asv_set_uint32 or similar - the key is dup'd */
+  g_hash_table_insert (self->priv->request,
+      g_strdup (TP_PROP_CHANNEL_TARGET_HANDLE_TYPE),
+      tp_g_value_slice_new_uint (TP_HANDLE_TYPE_CONTACT));
+  /* We use the ID because it persists across a disconnect/reconnect */
+  g_hash_table_insert (self->priv->request,
+      g_strdup (TP_PROP_CHANNEL_TARGET_ID),
+      tp_g_value_slice_new_string (tp_contact_get_identifier (contact)));
+}
+
+/**
+ * tp_account_channel_request_set_target_id:
+ * @self: a #TpAccountChannelRequest
+ * @handle_type: the type of @identifier, typically %TP_HANDLE_TYPE_CONTACT
+ *  or %TP_HANDLE_TYPE_ROOM
+ * @identifier: the unique identifier of the contact, room etc. to be
+ *  contacted
+ *
+ * Configure this request to create a channel with @identifier,
+ * an identifier of type @handle_type.
+ *
+ * This function can't be called once @self has been used to request a
+ * channel.
+ *
+ * Since: 0.19.UNRELEASED
+ */
+void
+tp_account_channel_request_set_target_id (
+    TpAccountChannelRequest *self,
+    TpHandleType handle_type,
+    const gchar *identifier)
+{
+  g_return_if_fail (TP_IS_ACCOUNT_CHANNEL_REQUEST (self));
+  g_return_if_fail (identifier != NULL);
+  g_return_if_fail (handle_type != TP_HANDLE_TYPE_NONE);
+  g_return_if_fail (!self->priv->requested);
+
+  /* Do not use tp_asv_set_uint32 or similar - the key is dup'd */
+  g_hash_table_insert (self->priv->request,
+      g_strdup (TP_PROP_CHANNEL_TARGET_HANDLE_TYPE),
+      tp_g_value_slice_new_uint (handle_type));
+  g_hash_table_insert (self->priv->request,
+      g_strdup (TP_PROP_CHANNEL_TARGET_ID),
+      tp_g_value_slice_new_string (identifier));
+}
+
+/**
+ * tp_account_channel_request_new_text:
+ * @account: a #TpAccount
+ * @user_action_time: the time of the user action that caused this request,
+ *  or one of the special values %TP_USER_ACTION_TIME_NOT_USER_ACTION or
+ *  %TP_USER_ACTION_TIME_CURRENT_TIME (see
+ *  #TpAccountChannelRequest:user-action-time)
+ *
+ * Convenience function to create a new #TpAccountChannelRequest object
+ * which will yield a Text channel.
+ *
+ * After creating the request, you will also need to set the "target"
+ * of the channel by calling one of the following functions:
+ *
+ * * tp_account_channel_request_set_target_contact()
+ * * tp_account_channel_request_set_target_id()
+ *
+ * Returns: a new #TpAccountChannelRequest object
+ *
+ * Since: 0.19.UNRELEASED
+ */
+TpAccountChannelRequest *
+tp_account_channel_request_new_text (
+    TpAccount *account,
+    gint64 user_action_time)
+{
+  TpAccountChannelRequest *self;
+  GHashTable *request;
+
+  g_return_val_if_fail (TP_IS_ACCOUNT (account), NULL);
+
+  request = tp_asv_new (
+      TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, TP_IFACE_CHANNEL_TYPE_TEXT,
+      NULL);
+
+  self = g_object_new (TP_TYPE_ACCOUNT_CHANNEL_REQUEST,
+      "account", account,
+      "request", request,
+      "user-action-time", user_action_time,
+      NULL);
+  g_hash_table_unref (request);
+  return self;
+}
diff --git a/telepathy-glib/account-channel-request.h b/telepathy-glib/account-channel-request.h
index b09679f..022c282 100644
--- a/telepathy-glib/account-channel-request.h
+++ b/telepathy-glib/account-channel-request.h
@@ -87,6 +87,21 @@ void tp_account_channel_request_set_delegate_to_preferred_handler (
     TpAccountChannelRequest *self,
     gboolean delegate);
 
+/* Text */
+
+TpAccountChannelRequest *tp_account_channel_request_new_text (
+    TpAccount *account,
+    gint64 user_action_time) G_GNUC_WARN_UNUSED_RESULT;
+
+/* Channel target (shared between all channel types) */
+
+void tp_account_channel_request_set_target_contact (
+    TpAccountChannelRequest *self,
+    TpContact *contact);
+void tp_account_channel_request_set_target_id (TpAccountChannelRequest *self,
+    TpHandleType handle_type,
+    const gchar *identifier);
+
 /* Request and handle API */
 
 void tp_account_channel_request_create_and_handle_channel_async (
diff --git a/telepathy-glib/capabilities.c b/telepathy-glib/capabilities.c
index 34c7972..e6a36e9 100644
--- a/telepathy-glib/capabilities.c
+++ b/telepathy-glib/capabilities.c
@@ -312,7 +312,9 @@ supports_simple_channel (TpCapabilities *self,
  * @self: a #TpCapabilities object
  *
  * Return whether private text channels can be established by providing
- * a contact identifier.
+ * a contact identifier, for instance by calling
+ * tp_account_channel_request_new_text() followed by
+ * tp_account_channel_request_set_target_contact().
  *
  * If the protocol is such that text chats can be established, but only via a
  * more elaborate D-Bus API than normal (because more information is needed),
@@ -337,7 +339,9 @@ tp_capabilities_supports_text_chats (TpCapabilities *self)
  *
  * If the #TpCapabilities:contact-specific property is %FALSE, this function
  * checks if named text chatrooms can be joined by providing a chatroom
- * identifier.
+ * identifier, for instance by calling
+ * tp_account_channel_request_new_text() followed by
+ * tp_account_channel_request_set_target_id() with %TP_HANDLE_TYPE_ROOM.
  *
  * If the #TpCapabilities:contact-specific property is %TRUE, this function
  * checks if the contact associated with this #TpCapabilities can be invited



More information about the telepathy-commits mailing list