[Telepathy-commits] [telepathy-mission-control/master] Add the Account and PreferredHandler props to AddRequest

Alberto Mardegan alberto.mardegan at nokia.com
Tue Nov 4 00:33:37 PST 2008


---
 src/mcd-account-compat.c   |    2 +-
 src/mcd-account-requests.c |    2 +-
 src/mcd-channel.c          |   18 ++++++++++++++++++
 src/mcd-channel.h          |    1 +
 src/mcd-dispatcher.c       |   18 +++++++++++++++++-
 src/mcd-dispatcher.h       |    2 +-
 6 files changed, 39 insertions(+), 4 deletions(-)

diff --git a/src/mcd-account-compat.c b/src/mcd-account-compat.c
index 056182f..ab52c1a 100644
--- a/src/mcd-account-compat.c
+++ b/src/mcd-account-compat.c
@@ -338,7 +338,7 @@ _mcd_account_compat_request_channel_nmc4 (McdAccount *account,
     g_hash_table_unref (properties);
 
     dispatcher = mcd_master_get_dispatcher (mcd_master_get_default ());
-    _mcd_dispatcher_add_request (dispatcher, channel);
+    _mcd_dispatcher_add_request (dispatcher, account, channel);
 
     req_data = g_slice_new0 (McdAccountCompatReq);
     req_data->requestor_serial = req->requestor_serial;
diff --git a/src/mcd-account-requests.c b/src/mcd-account-requests.c
index c52ec19..4932f06 100644
--- a/src/mcd-account-requests.c
+++ b/src/mcd-account-requests.c
@@ -148,7 +148,7 @@ create_request (McdAccount *account, GHashTable *properties,
                       G_CALLBACK (on_channel_status_changed), account);
 
     dispatcher = mcd_master_get_dispatcher (mcd_master_get_default ());
-    _mcd_dispatcher_add_request (dispatcher, channel);
+    _mcd_dispatcher_add_request (dispatcher, account, channel);
 
     _mcd_account_online_request (account, online_request_cb, channel, &error);
     if (error)
diff --git a/src/mcd-channel.c b/src/mcd-channel.c
index cee1214..1caf81f 100644
--- a/src/mcd-channel.c
+++ b/src/mcd-channel.c
@@ -1330,3 +1330,21 @@ _mcd_channel_get_request_user_action_time (McdChannel *channel)
     return crd->user_time;
 }
 
+/*
+ * _mcd_channel_get_request_preferred_handler:
+ * @channel: the #McdChannel.
+ *
+ * Returns: the preferred handler specified when requesting the channel, if the
+ * channel is in MCD_CHANNEL_REQUEST status.
+ */
+const gchar *
+_mcd_channel_get_request_preferred_handler (McdChannel *channel)
+{
+    McdChannelRequestData *crd;
+
+    g_return_val_if_fail (MCD_IS_CHANNEL (channel), NULL);
+    crd = g_object_get_data ((GObject *)channel, CD_REQUEST);
+    if (G_UNLIKELY (!crd)) return NULL;
+    return crd->preferred_handler;
+}
+
diff --git a/src/mcd-channel.h b/src/mcd-channel.h
index f38057b..e13e78f 100644
--- a/src/mcd-channel.h
+++ b/src/mcd-channel.h
@@ -124,6 +124,7 @@ const gchar *_mcd_channel_get_target_id (McdChannel *channel);
 GHashTable *_mcd_channel_get_requested_properties (McdChannel *channel);
 const gchar *_mcd_channel_get_request_path (McdChannel *channel);
 guint64 _mcd_channel_get_request_user_action_time (McdChannel *channel);
+const gchar *_mcd_channel_get_request_preferred_handler (McdChannel *channel);
 
 void _mcd_channel_set_error (McdChannel *channel, GError *error);
 const GError *_mcd_channel_get_error (McdChannel *channel);
diff --git a/src/mcd-dispatcher.c b/src/mcd-dispatcher.c
index 7ca4ab3..6bea4f0 100644
--- a/src/mcd-dispatcher.c
+++ b/src/mcd-dispatcher.c
@@ -2031,19 +2031,23 @@ add_request_cb (TpProxy *proxy, const GError *error, gpointer user_data,
 /*
  * _mcd_dispatcher_add_request:
  * @context: the #McdDispatcherContext.
+ * @account: the #McdAccount.
  * @channels: a #McdChannel in MCD_CHANNEL_REQUEST state.
  *
  * Add a request; this basically means invoking AddRequest (and maybe
  * RemoveRequest) on the channel handler.
  */
 void
-_mcd_dispatcher_add_request (McdDispatcher *dispatcher, McdChannel *channel)
+_mcd_dispatcher_add_request (McdDispatcher *dispatcher, McdAccount *account,
+                             McdChannel *channel)
 {
     McdDispatcherPrivate *priv;
     McdClient *handler = NULL;
     GHashTable *properties;
     GValue v_user_time = { 0, };
     GValue v_requests = { 0, };
+    GValue v_account = { 0, };
+    GValue v_preferred_handler = { 0, };
     GPtrArray *requests;
     GList *list;
 
@@ -2095,6 +2099,18 @@ _mcd_dispatcher_add_request (McdDispatcher *dispatcher, McdChannel *channel)
     g_hash_table_insert (properties, "org.freedesktop.Telepathy.ChannelRequest"
                          ".Requests", &v_requests);
 
+    g_value_init (&v_account, DBUS_TYPE_G_OBJECT_PATH);
+    g_value_set_static_boxed (&v_account,
+                              mcd_account_get_object_path (account));
+    g_hash_table_insert (properties, "org.freedesktop.Telepathy.ChannelRequest"
+                         ".Account", &v_account);
+
+    g_value_init (&v_preferred_handler, G_TYPE_STRING);
+    g_value_set_static_string (&v_preferred_handler,
+        _mcd_channel_get_request_preferred_handler (channel));
+    g_hash_table_insert (properties, "org.freedesktop.Telepathy.ChannelRequest"
+                         ".PreferredHandler", &v_preferred_handler);
+
     g_object_ref (channel);
     mc_cli_client_handler_call_add_request (handler->proxy, -1,
         _mcd_channel_get_request_path (channel), properties,
diff --git a/src/mcd-dispatcher.h b/src/mcd-dispatcher.h
index 9bf0de5..35505c7 100644
--- a/src/mcd-dispatcher.h
+++ b/src/mcd-dispatcher.h
@@ -88,7 +88,7 @@ GPtrArray *mcd_dispatcher_get_channel_capabilities (McdDispatcher * dispatcher,
 
 /* not exported */
 void _mcd_dispatcher_add_request (McdDispatcher *dispatcher,
-                                  McdChannel *channel);
+                                  McdAccount *account, McdChannel *channel);
 
 G_END_DECLS
 
-- 
1.5.6.5




More information about the Telepathy-commits mailing list