[telepathy-mission-control/master] McdDispatcher: remove interfaces member from McdClient
Simon McVittie
simon.mcvittie at collabora.co.uk
Mon Sep 21 11:34:49 PDT 2009
---
src/mcd-dispatcher.c | 100 ++++++++++++++++++++++++++++----------------------
1 files changed, 56 insertions(+), 44 deletions(-)
diff --git a/src/mcd-dispatcher.c b/src/mcd-dispatcher.c
index c084214..ebb33bd 100644
--- a/src/mcd-dispatcher.c
+++ b/src/mcd-dispatcher.c
@@ -153,16 +153,14 @@ typedef struct
typedef enum
{
- MCD_CLIENT_APPROVER = 0x1,
- MCD_CLIENT_HANDLER = 0x2,
- MCD_CLIENT_OBSERVER = 0x4,
- MCD_CLIENT_INTERFACE_REQUESTS = 0x8,
+ MCD_CLIENT_APPROVER,
+ MCD_CLIENT_HANDLER,
+ MCD_CLIENT_OBSERVER
} McdClientInterface;
typedef struct _McdClient
{
McdClientProxy *proxy;
- McdClientInterface interfaces;
} McdClient;
struct _McdDispatcherPrivate
@@ -593,7 +591,8 @@ mcd_dispatcher_guess_request_handler (McdDispatcher *dispatcher,
while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &client))
{
if (!client->proxy ||
- !(client->interfaces & MCD_CLIENT_HANDLER))
+ !tp_proxy_has_interface_by_id (client->proxy,
+ TP_IFACE_QUARK_CLIENT_HANDLER))
continue;
if (match_filters (channel,
@@ -755,7 +754,8 @@ mcd_dispatcher_get_possible_handlers (McdDispatcher *self,
gsize total_quality = 0;
if (client->proxy == NULL ||
- !(client->interfaces & MCD_CLIENT_HANDLER))
+ !tp_proxy_has_interface_by_id (client->proxy,
+ TP_IFACE_QUARK_CLIENT_HANDLER))
{
/* not a handler at all */
continue;
@@ -1106,7 +1106,8 @@ mcd_dispatcher_run_observers (McdDispatcherContext *context)
GPtrArray *channels_array, *satisfied_requests;
if (!client->proxy ||
- !(client->interfaces & MCD_CLIENT_OBSERVER))
+ !tp_proxy_has_interface_by_id (client->proxy,
+ TP_IFACE_QUARK_CLIENT_OBSERVER))
continue;
for (cl = channels; cl != NULL; cl = cl->next)
@@ -1261,7 +1262,8 @@ mcd_dispatcher_run_approvers (McdDispatcherContext *context)
gboolean matched = FALSE;
if (!client->proxy ||
- !(client->interfaces & MCD_CLIENT_APPROVER))
+ !tp_proxy_has_interface_by_id (client->proxy,
+ TP_IFACE_QUARK_CLIENT_APPROVER))
continue;
for (cl = channels; cl != NULL; cl = cl->next)
@@ -2306,22 +2308,37 @@ finally:
}
static void
-client_add_interface_by_id (McdClient *client)
+maybe_add_client_interface (TpProxy *proxy,
+ const gchar *name)
{
- TpProxy *proxy = (TpProxy *) client->proxy;
+ if (strcmp (name, TP_IFACE_CLIENT_APPROVER) == 0)
+ {
+ DEBUG ("%s is an Approver", tp_proxy_get_bus_name (proxy));
- tp_proxy_add_interface_by_id (proxy, TP_IFACE_QUARK_CLIENT);
- if (client->interfaces & MCD_CLIENT_APPROVER)
tp_proxy_add_interface_by_id (proxy,
TP_IFACE_QUARK_CLIENT_APPROVER);
- if (client->interfaces & MCD_CLIENT_HANDLER)
+ }
+ else if (strcmp (name, TP_IFACE_CLIENT_HANDLER) == 0)
+ {
+ DEBUG ("%s is a Handler", tp_proxy_get_bus_name (proxy));
+
tp_proxy_add_interface_by_id (proxy,
TP_IFACE_QUARK_CLIENT_HANDLER);
- if (client->interfaces & MCD_CLIENT_INTERFACE_REQUESTS)
- tp_proxy_add_interface_by_id (proxy, TP_IFACE_QUARK_CLIENT_INTERFACE_REQUESTS);
- if (client->interfaces & MCD_CLIENT_OBSERVER)
+ }
+ else if (strcmp (name, TP_IFACE_CLIENT_INTERFACE_REQUESTS) == 0)
+ {
+ DEBUG ("%s supports Requests", tp_proxy_get_bus_name (proxy));
+
+ tp_proxy_add_interface_by_id (proxy,
+ TP_IFACE_QUARK_CLIENT_INTERFACE_REQUESTS);
+ }
+ else if (strcmp (name, TP_IFACE_CLIENT_OBSERVER) == 0)
+ {
+ DEBUG ("%s is an Observer", tp_proxy_get_bus_name (proxy));
+
tp_proxy_add_interface_by_id (proxy,
TP_IFACE_QUARK_CLIENT_OBSERVER);
+ }
}
static void
@@ -2365,21 +2382,13 @@ get_interfaces_cb (TpProxy *proxy,
while (arr != NULL && *arr != NULL)
{
- if (strcmp (*arr, TP_IFACE_CLIENT_APPROVER) == 0)
- client->interfaces |= MCD_CLIENT_APPROVER;
- if (strcmp (*arr, TP_IFACE_CLIENT_HANDLER) == 0)
- client->interfaces |= MCD_CLIENT_HANDLER;
- if (strcmp (*arr, TP_IFACE_CLIENT_INTERFACE_REQUESTS) == 0)
- client->interfaces |= MCD_CLIENT_INTERFACE_REQUESTS;
- if (strcmp (*arr, TP_IFACE_CLIENT_OBSERVER) == 0)
- client->interfaces |= MCD_CLIENT_OBSERVER;
+ maybe_add_client_interface (proxy, *arr);
arr++;
}
DEBUG ("Client %s", bus_name);
- client_add_interface_by_id (client);
- if (client->interfaces & MCD_CLIENT_APPROVER)
+ if (tp_proxy_has_interface_by_id (proxy, TP_IFACE_QUARK_CLIENT_APPROVER))
{
if (!self->priv->startup_completed)
self->priv->startup_lock++;
@@ -2391,7 +2400,8 @@ get_interfaces_cb (TpProxy *proxy,
"ApproverChannelFilter", get_channel_filter_cb,
GUINT_TO_POINTER (MCD_CLIENT_APPROVER), NULL, G_OBJECT (self));
}
- if (client->interfaces & MCD_CLIENT_HANDLER)
+
+ if (tp_proxy_has_interface_by_id (proxy, TP_IFACE_QUARK_CLIENT_HANDLER))
{
if (!self->priv->startup_completed)
self->priv->startup_lock++;
@@ -2402,7 +2412,8 @@ get_interfaces_cb (TpProxy *proxy,
(client->proxy, -1, TP_IFACE_CLIENT_HANDLER,
handler_get_all_cb, NULL, NULL, G_OBJECT (self));
}
- if (client->interfaces & MCD_CLIENT_OBSERVER)
+
+ if (tp_proxy_has_interface_by_id (proxy, TP_IFACE_QUARK_CLIENT_OBSERVER))
{
if (!self->priv->startup_completed)
self->priv->startup_lock++;
@@ -2427,6 +2438,7 @@ parse_client_file (McdClient *client,
gchar **iface_names, **groups, **cap_tokens;
guint i;
gsize len = 0;
+ gboolean is_approver, is_handler, is_observer;
GList *approver_filters = NULL;
GList *observer_filters = NULL;
GList *handler_filters = NULL;
@@ -2439,22 +2451,23 @@ parse_client_file (McdClient *client,
for (i = 0; iface_names[i] != NULL; i++)
{
- if (strcmp (iface_names[i], TP_IFACE_CLIENT_APPROVER) == 0)
- client->interfaces |= MCD_CLIENT_APPROVER;
- else if (strcmp (iface_names[i], TP_IFACE_CLIENT_HANDLER) == 0)
- client->interfaces |= MCD_CLIENT_HANDLER;
- else if (strcmp (iface_names[i], TP_IFACE_CLIENT_INTERFACE_REQUESTS) == 0)
- client->interfaces |= MCD_CLIENT_INTERFACE_REQUESTS;
- else if (strcmp (iface_names[i], TP_IFACE_CLIENT_OBSERVER) == 0)
- client->interfaces |= MCD_CLIENT_OBSERVER;
+ maybe_add_client_interface ((TpProxy *) client->proxy,
+ iface_names[i]);
}
g_strfreev (iface_names);
+ is_approver = tp_proxy_has_interface_by_id (client->proxy,
+ TP_IFACE_QUARK_CLIENT_APPROVER);
+ is_observer = tp_proxy_has_interface_by_id (client->proxy,
+ TP_IFACE_QUARK_CLIENT_OBSERVER);
+ is_handler = tp_proxy_has_interface_by_id (client->proxy,
+ TP_IFACE_QUARK_CLIENT_HANDLER);
+
/* parse filtering rules */
groups = g_key_file_get_groups (file, &len);
for (i = 0; i < len; i++)
{
- if (client->interfaces & MCD_CLIENT_APPROVER &&
+ if (is_approver &&
g_str_has_prefix (groups[i], TP_IFACE_CLIENT_APPROVER
".ApproverChannelFilter "))
{
@@ -2462,7 +2475,7 @@ parse_client_file (McdClient *client,
g_list_prepend (approver_filters,
parse_client_filter (file, groups[i]));
}
- else if (client->interfaces & MCD_CLIENT_HANDLER &&
+ else if (is_handler &&
g_str_has_prefix (groups[i], TP_IFACE_CLIENT_HANDLER
".HandlerChannelFilter "))
{
@@ -2470,7 +2483,7 @@ parse_client_file (McdClient *client,
g_list_prepend (handler_filters,
parse_client_filter (file, groups[i]));
}
- else if (client->interfaces & MCD_CLIENT_OBSERVER &&
+ else if (is_observer &&
g_str_has_prefix (groups[i], TP_IFACE_CLIENT_OBSERVER
".ObserverChannelFilter "))
{
@@ -2584,9 +2597,7 @@ mcd_client_start_introspection (McdClientProxy *proxy,
}
else
{
- client_add_interface_by_id (client);
-
- if ((client->interfaces & MCD_CLIENT_HANDLER) != 0)
+ if (tp_proxy_has_interface_by_id (proxy, TP_IFACE_QUARK_CLIENT_HANDLER))
{
if (_mcd_client_proxy_is_active (proxy))
{
@@ -3535,7 +3546,8 @@ _mcd_dispatcher_add_request (McdDispatcher *dispatcher, McdAccount *account,
return;
}
- if (!(handler->interfaces & MCD_CLIENT_INTERFACE_REQUESTS))
+ if (!tp_proxy_has_interface_by_id (handler->proxy,
+ TP_IFACE_QUARK_CLIENT_INTERFACE_REQUESTS))
{
DEBUG ("Default handler %s for request %s doesn't want AddRequest",
tp_proxy_get_bus_name (handler->proxy),
--
1.5.6.5
More information about the telepathy-commits
mailing list