[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