[telepathy-mission-control/master] _mcd_client_proxy_set_filters: move mcd_client_set_filters to McdClientProxy

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


---
 src/mcd-client-priv.h |   10 +++++
 src/mcd-client.c      |   92 +++++++++++++++++++++++++++++++++++++++++++
 src/mcd-dispatcher.c  |  105 +-----------------------------------------------
 3 files changed, 105 insertions(+), 102 deletions(-)

diff --git a/src/mcd-client-priv.h b/src/mcd-client-priv.h
index 74b6b3b..b06a53e 100644
--- a/src/mcd-client-priv.h
+++ b/src/mcd-client-priv.h
@@ -125,6 +125,16 @@ G_GNUC_INTERNAL TpHandleSet *_mcd_client_proxy_peek_capability_tokens
 G_GNUC_INTERNAL GValueArray *_mcd_client_proxy_dup_handler_capabilities (
     McdClientProxy *self);
 
+typedef enum
+{
+    MCD_CLIENT_APPROVER,
+    MCD_CLIENT_HANDLER,
+    MCD_CLIENT_OBSERVER
+} McdClientInterface;
+
+G_GNUC_INTERNAL void _mcd_client_proxy_set_filters (McdClientProxy *client,
+    McdClientInterface interface, GPtrArray *filters);
+
 #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 5b278bc..022798a 100644
--- a/src/mcd-client.c
+++ b/src/mcd-client.c
@@ -345,6 +345,98 @@ parse_client_file (McdClientProxy *client,
     g_strfreev (cap_tokens);
 }
 
+void
+_mcd_client_proxy_set_filters (McdClientProxy *client,
+                               McdClientInterface interface,
+                               GPtrArray *filters)
+{
+    GList *client_filters = NULL;
+    guint i;
+
+    for (i = 0 ; i < filters->len ; i++)
+    {
+        GHashTable *channel_class = g_ptr_array_index (filters, i);
+        GHashTable *new_channel_class;
+        GHashTableIter iter;
+        gchar *property_name;
+        GValue *property_value;
+        gboolean valid_filter = TRUE;
+
+        new_channel_class = g_hash_table_new_full
+            (g_str_hash, g_str_equal, g_free,
+             (GDestroyNotify) tp_g_value_slice_free);
+
+        g_hash_table_iter_init (&iter, channel_class);
+        while (g_hash_table_iter_next (&iter, (gpointer *) &property_name,
+                                       (gpointer *) &property_value)) 
+        {
+            GValue *filter_value;
+            GType property_type = G_VALUE_TYPE (property_value);
+
+            if (property_type == G_TYPE_BOOLEAN ||
+                property_type == G_TYPE_STRING ||
+                property_type == DBUS_TYPE_G_OBJECT_PATH)
+            {
+                filter_value = tp_g_value_slice_new
+                    (G_VALUE_TYPE (property_value));
+                g_value_copy (property_value, filter_value);
+            }
+            else if (property_type == G_TYPE_UCHAR ||
+                     property_type == G_TYPE_UINT ||
+                     property_type == G_TYPE_UINT64)
+            {
+                filter_value = tp_g_value_slice_new (G_TYPE_UINT64);
+                g_value_transform (property_value, filter_value);
+            }
+            else if (property_type == G_TYPE_INT ||
+                     property_type == G_TYPE_INT64)
+            {
+                filter_value = tp_g_value_slice_new (G_TYPE_INT64);
+                g_value_transform (property_value, filter_value);
+            }
+            else
+            {
+                /* invalid type, do not add this filter */
+                g_warning ("%s: Property %s has an invalid type (%s)",
+                           G_STRFUNC, property_name,
+                           g_type_name (G_VALUE_TYPE (property_value)));
+                valid_filter = FALSE;
+                break;
+            }
+
+            g_hash_table_insert (new_channel_class, g_strdup (property_name),
+                                 filter_value);
+        }
+
+        if (valid_filter)
+            client_filters = g_list_prepend (client_filters,
+                                             new_channel_class);
+        else
+            g_hash_table_destroy (new_channel_class);
+    }
+
+    switch (interface)
+    {
+        case MCD_CLIENT_OBSERVER:
+            _mcd_client_proxy_take_observer_filters (client,
+                                                     client_filters);
+            break;
+
+        case MCD_CLIENT_APPROVER:
+            _mcd_client_proxy_take_approver_filters (client,
+                                                     client_filters);
+            break;
+
+        case MCD_CLIENT_HANDLER:
+            _mcd_client_proxy_take_handler_filters (client,
+                                                    client_filters);
+            break;
+
+        default:
+            g_assert_not_reached ();
+    }
+}
+
 /* This is NULL-safe for the last argument, for ease of use with
  * tp_asv_get_boxed */
 void
diff --git a/src/mcd-dispatcher.c b/src/mcd-dispatcher.c
index 0e9997a..21b7880 100644
--- a/src/mcd-dispatcher.c
+++ b/src/mcd-dispatcher.c
@@ -150,13 +150,6 @@ typedef struct
     gboolean handled;
 } McdChannelRecover;
 
-typedef enum
-{
-    MCD_CLIENT_APPROVER,
-    MCD_CLIENT_HANDLER,
-    MCD_CLIENT_OBSERVER
-} McdClientInterface;
-
 struct _McdDispatcherPrivate
 {
     /* Dispatching contexts */
@@ -1745,98 +1738,6 @@ _mcd_dispatcher_dispose (GObject * object)
 }
 
 static void
-mcd_client_set_filters (McdClientProxy *client,
-                        McdClientInterface interface,
-                        GPtrArray *filters)
-{
-    GList *client_filters = NULL;
-    guint i;
-
-    for (i = 0 ; i < filters->len ; i++)
-    {
-        GHashTable *channel_class = g_ptr_array_index (filters, i);
-        GHashTable *new_channel_class;
-        GHashTableIter iter;
-        gchar *property_name;
-        GValue *property_value;
-        gboolean valid_filter = TRUE;
-
-        new_channel_class = g_hash_table_new_full
-            (g_str_hash, g_str_equal, g_free,
-             (GDestroyNotify) tp_g_value_slice_free);
-
-        g_hash_table_iter_init (&iter, channel_class);
-        while (g_hash_table_iter_next (&iter, (gpointer *) &property_name,
-                                       (gpointer *) &property_value)) 
-        {
-            GValue *filter_value;
-            GType property_type = G_VALUE_TYPE (property_value);
-
-            if (property_type == G_TYPE_BOOLEAN ||
-                property_type == G_TYPE_STRING ||
-                property_type == DBUS_TYPE_G_OBJECT_PATH)
-            {
-                filter_value = tp_g_value_slice_new
-                    (G_VALUE_TYPE (property_value));
-                g_value_copy (property_value, filter_value);
-            }
-            else if (property_type == G_TYPE_UCHAR ||
-                     property_type == G_TYPE_UINT ||
-                     property_type == G_TYPE_UINT64)
-            {
-                filter_value = tp_g_value_slice_new (G_TYPE_UINT64);
-                g_value_transform (property_value, filter_value);
-            }
-            else if (property_type == G_TYPE_INT ||
-                     property_type == G_TYPE_INT64)
-            {
-                filter_value = tp_g_value_slice_new (G_TYPE_INT64);
-                g_value_transform (property_value, filter_value);
-            }
-            else
-            {
-                /* invalid type, do not add this filter */
-                g_warning ("%s: Property %s has an invalid type (%s)",
-                           G_STRFUNC, property_name,
-                           g_type_name (G_VALUE_TYPE (property_value)));
-                valid_filter = FALSE;
-                break;
-            }
-
-            g_hash_table_insert (new_channel_class, g_strdup (property_name),
-                                 filter_value);
-        }
-
-        if (valid_filter)
-            client_filters = g_list_prepend (client_filters,
-                                             new_channel_class);
-        else
-            g_hash_table_destroy (new_channel_class);
-    }
-
-    switch (interface)
-    {
-        case MCD_CLIENT_OBSERVER:
-            _mcd_client_proxy_take_observer_filters (client,
-                                                     client_filters);
-            break;
-
-        case MCD_CLIENT_APPROVER:
-            _mcd_client_proxy_take_approver_filters (client,
-                                                     client_filters);
-            break;
-
-        case MCD_CLIENT_HANDLER:
-            _mcd_client_proxy_take_handler_filters (client,
-                                                    client_filters);
-            break;
-
-        default:
-            g_assert_not_reached ();
-    }
-}
-
-static void
 mcd_dispatcher_release_startup_lock (McdDispatcher *self)
 {
     if (self->priv->startup_completed)
@@ -1907,8 +1808,8 @@ get_channel_filter_cb (TpProxy *proxy,
         goto finally;
     }
 
-    mcd_client_set_filters (client, GPOINTER_TO_UINT (user_data),
-                            g_value_get_boxed (value));
+    _mcd_client_proxy_set_filters (client, GPOINTER_TO_UINT (user_data),
+                                   g_value_get_boxed (value));
 finally:
     mcd_dispatcher_release_startup_lock (self);
 }
@@ -1985,7 +1886,7 @@ handler_get_all_cb (TpProxy *proxy,
     {
         DEBUG ("%s has %u HandlerChannelFilter entries", bus_name,
                filters->len);
-        mcd_client_set_filters (client, MCD_CLIENT_HANDLER, filters);
+        _mcd_client_proxy_set_filters (client, MCD_CLIENT_HANDLER, filters);
     }
     else
     {
-- 
1.5.6.5




More information about the telepathy-commits mailing list