[telepathy-mission-control/master] _mcd_client_proxy_dup_handler_capabilities: move main functionality of mcd_dispatcher_append_client_caps to McdClientProxy

Simon McVittie simon.mcvittie at collabora.co.uk
Tue Sep 22 07:03:44 PDT 2009


---
 src/mcd-client-priv.h |    3 ++
 src/mcd-client.c      |   91 +++++++++++++++++++++++++++++++++++++++++++++++++
 src/mcd-dispatcher.c  |   86 +---------------------------------------------
 3 files changed, 95 insertions(+), 85 deletions(-)

diff --git a/src/mcd-client-priv.h b/src/mcd-client-priv.h
index 8651a9b..74b6b3b 100644
--- a/src/mcd-client-priv.h
+++ b/src/mcd-client-priv.h
@@ -122,6 +122,9 @@ G_GNUC_INTERNAL void _mcd_client_proxy_clear_capability_tokens
 G_GNUC_INTERNAL TpHandleSet *_mcd_client_proxy_peek_capability_tokens
     (McdClientProxy *self);
 
+G_GNUC_INTERNAL GValueArray *_mcd_client_proxy_dup_handler_capabilities (
+    McdClientProxy *self);
+
 #define MC_CLIENT_BUS_NAME_BASE_LEN (sizeof (TP_CLIENT_BUS_NAME_BASE) - 1)
 
 G_END_DECLS
diff --git a/src/mcd-client.c b/src/mcd-client.c
index 5cabc9f..5b278bc 100644
--- a/src/mcd-client.c
+++ b/src/mcd-client.c
@@ -31,6 +31,7 @@
 #include <telepathy-glib/dbus.h>
 #include <telepathy-glib/defs.h>
 #include <telepathy-glib/errors.h>
+#include <telepathy-glib/gtypes.h>
 #include <telepathy-glib/interfaces.h>
 #include <telepathy-glib/proxy-subclass.h>
 #include <telepathy-glib/util.h>
@@ -885,3 +886,93 @@ _mcd_client_proxy_become_incapable (McdClientProxy *self)
     _mcd_client_proxy_take_handler_filters (self, NULL);
     _mcd_client_proxy_clear_capability_tokens (self);
 }
+
+typedef struct {
+    TpHandleRepoIface *repo;
+    GPtrArray *array;
+} TokenAppendContext;
+
+static void
+append_token_to_ptrs (TpHandleSet *unused G_GNUC_UNUSED,
+                      TpHandle handle,
+                      gpointer data)
+{
+    TokenAppendContext *context = data;
+
+    g_ptr_array_add (context->array,
+                     g_strdup (tp_handle_inspect (context->repo, handle)));
+}
+
+GValueArray *
+_mcd_client_proxy_dup_handler_capabilities (McdClientProxy *self)
+{
+    GPtrArray *filters;
+    GPtrArray *cap_tokens;
+    GValueArray *va;
+    const GList *list;
+
+    g_return_val_if_fail (MCD_IS_CLIENT_PROXY (self), NULL);
+
+    filters = g_ptr_array_sized_new (
+        g_list_length (self->priv->handler_filters));
+
+    for (list = self->priv->handler_filters; list != NULL; list = list->next)
+    {
+        GHashTable *copy = g_hash_table_new_full (g_str_hash, g_str_equal,
+            g_free, (GDestroyNotify) tp_g_value_slice_free);
+
+        tp_g_hash_table_update (copy, list->data,
+                                (GBoxedCopyFunc) g_strdup,
+                                (GBoxedCopyFunc) tp_g_value_slice_dup);
+        g_ptr_array_add (filters, copy);
+    }
+
+    if (self->priv->capability_tokens == NULL)
+    {
+        cap_tokens = g_ptr_array_sized_new (1);
+    }
+    else
+    {
+        TokenAppendContext context = { self->priv->string_pool, NULL };
+
+        cap_tokens = g_ptr_array_sized_new (
+            tp_handle_set_size (self->priv->capability_tokens) + 1);
+        context.array = cap_tokens;
+        tp_handle_set_foreach (self->priv->capability_tokens,
+                               append_token_to_ptrs, &context);
+    }
+
+    g_ptr_array_add (cap_tokens, NULL);
+
+    if (DEBUGGING)
+    {
+        guint i;
+
+        DEBUG ("%s:", tp_proxy_get_bus_name (self));
+
+        DEBUG ("- %u channel filters", filters->len);
+        DEBUG ("- %u capability tokens:", cap_tokens->len - 1);
+
+        for (i = 0; i < cap_tokens->len - 1; i++)
+        {
+            DEBUG ("    %s", (gchar *) g_ptr_array_index (cap_tokens, i));
+        }
+
+        DEBUG ("-end-");
+    }
+
+    va = g_value_array_new (3);
+    g_value_array_append (va, NULL);
+    g_value_array_append (va, NULL);
+    g_value_array_append (va, NULL);
+
+    g_value_init (va->values + 0, G_TYPE_STRING);
+    g_value_init (va->values + 1, TP_ARRAY_TYPE_CHANNEL_CLASS_LIST);
+    g_value_init (va->values + 2, G_TYPE_STRV);
+
+    g_value_set_string (va->values + 0, tp_proxy_get_bus_name (self));
+    g_value_take_boxed (va->values + 1, filters);
+    g_value_take_boxed (va->values + 2, g_ptr_array_free (cap_tokens, FALSE));
+
+    return va;
+}
diff --git a/src/mcd-dispatcher.c b/src/mcd-dispatcher.c
index 4ae2ebd..3d80db7 100644
--- a/src/mcd-dispatcher.c
+++ b/src/mcd-dispatcher.c
@@ -1836,96 +1836,12 @@ mcd_client_set_filters (McdClientProxy *client,
     }
 }
 
-typedef struct {
-    TpHandleRepoIface *repo;
-    GPtrArray *array;
-} TokenAppendContext;
-
-static void
-append_token_to_ptrs (TpHandleSet *unused G_GNUC_UNUSED,
-                      TpHandle handle,
-                      gpointer data)
-{
-    TokenAppendContext *context = data;
-
-    g_ptr_array_add (context->array,
-                     g_strdup (tp_handle_inspect (context->repo, handle)));
-}
-
 static void
 mcd_dispatcher_append_client_caps (McdDispatcher *self,
                                    McdClientProxy *client,
                                    GPtrArray *vas)
 {
-    const GList *handler_filters = _mcd_client_proxy_get_handler_filters (
-        client);
-    GPtrArray *filters = g_ptr_array_sized_new (
-        g_list_length ((GList *) handler_filters));
-    GPtrArray *cap_tokens;
-    GValueArray *va;
-    const GList *list;
-    TpHandleSet *capability_tokens =
-        _mcd_client_proxy_peek_capability_tokens (client);
-
-    for (list = handler_filters; list != NULL; list = list->next)
-    {
-        GHashTable *copy = g_hash_table_new_full (g_str_hash, g_str_equal,
-            g_free, (GDestroyNotify) tp_g_value_slice_free);
-
-        tp_g_hash_table_update (copy, list->data,
-                                (GBoxedCopyFunc) g_strdup,
-                                (GBoxedCopyFunc) tp_g_value_slice_dup);
-        g_ptr_array_add (filters, copy);
-    }
-
-    if (capability_tokens == NULL)
-    {
-        cap_tokens = g_ptr_array_sized_new (1);
-    }
-    else
-    {
-        TokenAppendContext context = { self->priv->string_pool, NULL };
-
-        cap_tokens = g_ptr_array_sized_new (
-            tp_handle_set_size (capability_tokens) + 1);
-        context.array = cap_tokens;
-        tp_handle_set_foreach (capability_tokens, append_token_to_ptrs,
-                               &context);
-    }
-
-    g_ptr_array_add (cap_tokens, NULL);
-
-    if (DEBUGGING)
-    {
-        guint i;
-
-        DEBUG ("%s:", tp_proxy_get_bus_name (client));
-
-        DEBUG ("- %u channel filters", filters->len);
-        DEBUG ("- %u capability tokens:", cap_tokens->len - 1);
-
-        for (i = 0; i < cap_tokens->len - 1; i++)
-        {
-            DEBUG ("    %s", (gchar *) g_ptr_array_index (cap_tokens, i));
-        }
-
-        DEBUG ("-end-");
-    }
-
-    va = g_value_array_new (3);
-    g_value_array_append (va, NULL);
-    g_value_array_append (va, NULL);
-    g_value_array_append (va, NULL);
-
-    g_value_init (va->values + 0, G_TYPE_STRING);
-    g_value_init (va->values + 1, TP_ARRAY_TYPE_CHANNEL_CLASS_LIST);
-    g_value_init (va->values + 2, G_TYPE_STRV);
-
-    g_value_set_string (va->values + 0, tp_proxy_get_bus_name (client));
-    g_value_take_boxed (va->values + 1, filters);
-    g_value_take_boxed (va->values + 2, g_ptr_array_free (cap_tokens, FALSE));
-
-    g_ptr_array_add (vas, va);
+    g_ptr_array_add (vas, _mcd_client_proxy_dup_handler_capabilities (client));
 }
 
 static void
-- 
1.5.6.5




More information about the telepathy-commits mailing list