telepathy-mission-control: plugins: use a caller-supplied client factory

Simon McVittie smcv at kemper.freedesktop.org
Thu Sep 19 11:42:53 PDT 2013


Module: telepathy-mission-control
Branch: master
Commit: cd679e60ec3515ebaa24f19ab994087c5c328f64
URL:    http://cgit.freedesktop.org/telepathy/telepathy-mission-control/commit/?id=cd679e60ec3515ebaa24f19ab994087c5c328f64

Author: Simon McVittie <simon.mcvittie at collabora.co.uk>
Date:   Mon Sep  9 19:37:51 2013 +0100

plugins: use a caller-supplied client factory

https://bugs.freedesktop.org/show_bug.cgi?id=69176
Reviewed-by: Guillaume Desmottes <guillaume.desmottes at collabora.co.uk>

---

 mission-control-plugins/dispatch-operation.c |   53 +++++++++++++-------------
 mission-control-plugins/dispatch-operation.h |    4 +-
 2 files changed, 30 insertions(+), 27 deletions(-)

diff --git a/mission-control-plugins/dispatch-operation.c b/mission-control-plugins/dispatch-operation.c
index db14ffe..1fced1a 100644
--- a/mission-control-plugins/dispatch-operation.c
+++ b/mission-control-plugins/dispatch-operation.c
@@ -332,6 +332,9 @@ mcp_dispatch_operation_destroy_channels (McpDispatchOperation *self,
 /**
  * mcp_dispatch_operation_find_channel_by_type:
  * @self: a dispatch operation
+ * @client_factory: used to construct @ret_ref_channel. In high-level
+ *  language bindings using gobject-introspection, this must not be %NULL.
+ *  In C, this may be %NULL, but only if @ret_ref_channel is also %NULL.
  * @start_from: index at which to start searching, usually 0
  * @handle_type: the handle type to match
  * @channel_type: the channel type to match
@@ -358,6 +361,7 @@ mcp_dispatch_operation_destroy_channels (McpDispatchOperation *self,
  */
 gboolean
 mcp_dispatch_operation_find_channel_by_type (McpDispatchOperation *self,
+    TpSimpleClientFactory *client_factory,
     guint start_from,
     TpHandleType handle_type,
     GQuark channel_type,
@@ -372,6 +376,8 @@ mcp_dispatch_operation_find_channel_by_type (McpDispatchOperation *self,
 
   g_return_val_if_fail (MCP_IS_DISPATCH_OPERATION (self), FALSE);
   g_return_val_if_fail (channel_type != 0, FALSE);
+  g_return_val_if_fail (client_factory != NULL || ret_ref_channel == NULL,
+      FALSE);
 
   for (i = start_from; i < mcp_dispatch_operation_get_n_channels (self); i++)
     {
@@ -402,14 +408,11 @@ mcp_dispatch_operation_find_channel_by_type (McpDispatchOperation *self,
 
           if (ret_ref_channel != NULL)
             {
-              /* FIXME: in next, this method should take a TpClientFactory
-               * argument, and pass it on here */
               TpConnection *connection =
-                mcp_dispatch_operation_ref_connection (self);
+                mcp_dispatch_operation_ref_connection (self, client_factory);
 
               *ret_ref_channel = tp_simple_client_factory_ensure_channel (
-                  tp_proxy_get_factory (connection), connection,
-                  channel_path, properties, NULL);
+                  client_factory, connection, channel_path, properties, NULL);
 
               g_object_unref (connection);
             }
@@ -426,35 +429,31 @@ mcp_dispatch_operation_find_channel_by_type (McpDispatchOperation *self,
 /**
  * mcp_dispatch_operation_ref_connection:
  * @self: a dispatch operation
+ * @client_factory: the client factory to use to construct the #TpConnection
  *
- * Return a #TpConnection object. It is not guaranteed to be ready immediately;
- * use tp_connection_call_when_ready().
+ * Return a #TpConnection object. It is not guaranteed to be prepared;
+ * use tp_proxy_prepare_async().
  *
  * Returns: a reference to a #TpConnection, which must be released with
  *  g_object_unref() by the caller
  */
 TpConnection *
-mcp_dispatch_operation_ref_connection (McpDispatchOperation *self)
+mcp_dispatch_operation_ref_connection (McpDispatchOperation *self,
+    TpSimpleClientFactory *client_factory)
 {
-  TpDBusDaemon *dbus = tp_dbus_daemon_dup (NULL);
-  TpConnection *connection = NULL;
   const gchar *conn_path;
 
+  g_return_val_if_fail (client_factory != NULL, NULL);
+
   conn_path = mcp_dispatch_operation_get_connection_path (self);
 
-  if (conn_path != NULL && dbus != NULL)
+  if (conn_path != NULL)
     {
-      /* FIXME: in next, this method should take a TpClientFactory argument
-       * instead of making a new one here */
-      TpSimpleClientFactory *factory = tp_simple_client_factory_new (dbus);
-
-      connection = tp_simple_client_factory_ensure_connection (factory,
+      return tp_simple_client_factory_ensure_connection (client_factory,
           conn_path, NULL, NULL);
-      g_object_unref (factory);
     }
 
-  g_object_unref (dbus);
-  return connection;
+  return NULL;
 }
 
 /**
@@ -462,23 +461,26 @@ mcp_dispatch_operation_ref_connection (McpDispatchOperation *self)
  * @self: a dispatch operation
  * @n: index of the channel to inspect
  *
- * Return a #TpChannel object. It is not guaranteed to be ready immediately;
- * use tp_channel_call_when_ready().
+ * Return a #TpChannel object. It is not guaranteed to be prepared;
+ * use tp_proxy_prepare_async().
  *
  * Returns: a reference to a #TpChannel, which must be released with
  *  g_object_unref() by the caller, or %NULL if @n is too large
  */
 TpChannel *
 mcp_dispatch_operation_ref_nth_channel (McpDispatchOperation *self,
+    TpSimpleClientFactory *client_factory,
     guint n)
 {
-  /* FIXME: in next, this method should take a TpClientFactory argument,
-   * and pass it on here */
-  TpConnection *connection = mcp_dispatch_operation_ref_connection (self);
+  TpConnection *connection;
   GHashTable *channel_properties = NULL;
   const gchar *channel_path = NULL;
   TpChannel *channel = NULL;
 
+  g_return_val_if_fail (client_factory != NULL, NULL);
+
+  connection = mcp_dispatch_operation_ref_connection (self, client_factory);
+
   if (connection == NULL)
     goto finally;
 
@@ -493,8 +495,7 @@ mcp_dispatch_operation_ref_nth_channel (McpDispatchOperation *self,
   if (channel_properties == NULL)
     goto finally;
 
-  channel = tp_simple_client_factory_ensure_channel (
-      tp_proxy_get_factory (connection),
+  channel = tp_simple_client_factory_ensure_channel (client_factory,
       connection, channel_path, channel_properties, NULL);
 
 finally:
diff --git a/mission-control-plugins/dispatch-operation.h b/mission-control-plugins/dispatch-operation.h
index c7279aa..889f5fd 100644
--- a/mission-control-plugins/dispatch-operation.h
+++ b/mission-control-plugins/dispatch-operation.h
@@ -53,13 +53,15 @@ GType mcp_dispatch_operation_get_type (void) G_GNUC_CONST;
 
 gboolean mcp_dispatch_operation_find_channel_by_type (
     McpDispatchOperation *self,
+    TpSimpleClientFactory *client_factory,
     guint start_from, TpHandleType handle_type, GQuark channel_type,
     guint *ret_index, gchar **ret_dup_path,
     GHashTable **ret_ref_immutable_properties, TpChannel **ret_ref_channel);
 
 TpConnection *mcp_dispatch_operation_ref_connection (
-    McpDispatchOperation *self);
+    McpDispatchOperation *self, TpSimpleClientFactory *client_factory);
 TpChannel *mcp_dispatch_operation_ref_nth_channel (McpDispatchOperation *self,
+    TpSimpleClientFactory *client_factory,
     guint n);
 
 /* virtual methods */



More information about the telepathy-commits mailing list