[telepathy-mission-control/master] mcd_dispatcher_dup_possible_handlers: factor out mcd_dispatcher_list_possible_handlers
Simon McVittie
simon.mcvittie at collabora.co.uk
Tue Oct 20 13:51:28 PDT 2009
---
src/mcd-dispatcher.c | 68 +++++++++++++++++++++++++++++++++++--------------
1 files changed, 48 insertions(+), 20 deletions(-)
diff --git a/src/mcd-dispatcher.c b/src/mcd-dispatcher.c
index 599d6d9..1e43a38 100644
--- a/src/mcd-dispatcher.c
+++ b/src/mcd-dispatcher.c
@@ -342,18 +342,16 @@ possible_handler_cmp (gconstpointer a_,
return 0;
}
-static GStrv
-mcd_dispatcher_dup_possible_handlers (McdDispatcher *self,
- const GList *channels,
- const gchar *must_have_unique_name)
+static GList *
+mcd_dispatcher_list_possible_handlers (McdDispatcher *self,
+ const GList *channels,
+ const gchar *must_have_unique_name)
{
GList *handlers = NULL;
const GList *iter;
+ GList *handlers_iter;
GHashTableIter client_iter;
gpointer client_p;
- guint n_handlers = 0;
- guint i;
- GStrv ret;
_mcd_client_registry_init_hash_iter (self->priv->clients, &client_iter);
@@ -419,7 +417,6 @@ mcd_dispatcher_dup_possible_handlers (McdDispatcher *self,
ph->quality = total_quality;
handlers = g_list_prepend (handlers, ph);
- n_handlers++;
}
}
@@ -428,6 +425,7 @@ mcd_dispatcher_dup_possible_handlers (McdDispatcher *self,
* it's suitable */
if (handlers == NULL)
{
+ McdClientProxy *client;
const gchar *preferred_handler = NULL;
if (channels->data != NULL)
@@ -436,17 +434,20 @@ mcd_dispatcher_dup_possible_handlers (McdDispatcher *self,
_mcd_channel_get_request_preferred_handler (channels->data);
}
- if (preferred_handler != NULL && preferred_handler[0] != '\0' &&
- _mcd_client_registry_lookup (self->priv->clients,
- preferred_handler) != NULL)
+ if (preferred_handler == NULL || preferred_handler[0] == '\0')
{
- ret = g_new0 (gchar *, 2);
- ret[0] = g_strdup (preferred_handler);
- ret[1] = NULL;
- return ret;
+ return NULL;
}
- return NULL;
+ client = _mcd_client_registry_lookup (self->priv->clients,
+ preferred_handler);
+
+ if (client == NULL)
+ {
+ return NULL;
+ }
+
+ return g_list_append (NULL, client);
}
/* We have at least one handler that can take the whole batch. Sort
@@ -455,14 +456,41 @@ mcd_dispatcher_dup_possible_handlers (McdDispatcher *self,
handlers = g_list_sort (handlers, possible_handler_cmp);
handlers = g_list_reverse (handlers);
+ /* convert in-place from a list of PossibleHandler to a list of
+ * McdClientProxy */
+ for (handlers_iter = handlers;
+ handlers_iter != NULL;
+ handlers_iter = handlers_iter->next)
+ {
+ PossibleHandler *ph = handlers_iter->data;
+
+ handlers_iter->data = ph->client;
+ g_slice_free (PossibleHandler, ph);
+ }
+
+ return handlers;
+}
+
+static GStrv
+mcd_dispatcher_dup_possible_handlers (McdDispatcher *self,
+ const GList *channels,
+ const gchar *must_have_unique_name)
+{
+ GList *handlers = mcd_dispatcher_list_possible_handlers (self,
+ channels, must_have_unique_name);
+ guint n_handlers = g_list_length (handlers);
+ guint i;
+ GStrv ret;
+ const GList *iter;
+
+ if (handlers == NULL)
+ return NULL;
+
ret = g_new0 (gchar *, n_handlers + 1);
for (iter = handlers, i = 0; iter != NULL; iter = iter->next, i++)
{
- PossibleHandler *ph = iter->data;
-
- ret[i] = g_strdup (tp_proxy_get_bus_name (ph->client));
- g_slice_free (PossibleHandler, ph);
+ ret[i] = g_strdup (tp_proxy_get_bus_name (iter->data));
}
ret[n_handlers] = NULL;
--
1.5.6.5
More information about the telepathy-commits
mailing list