diff options
author | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2012-09-19 13:08:32 +0100 |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2012-09-26 13:42:49 +0200 |
commit | c3ac127197aec474dd8533ad8943262bdd26aac8 (patch) | |
tree | a4bc73c073e978845052646d02f30b95a922351f | |
parent | 6d3c8df3cd918cf76abae7d5c43f84bfca6ed59d (diff) | |
download | telepathy-glib-c3ac127197aec474dd8533ad8943262bdd26aac8.tar.gz |
tp_base_client_add_observer_filter_vardict etc.: add
https://bugs.freedesktop.org/show_bug.cgi?id=55100
-rw-r--r-- | docs/reference/telepathy-glib-sections.txt | 3 | ||||
-rw-r--r-- | telepathy-glib/base-client.c | 98 | ||||
-rw-r--r-- | telepathy-glib/base-client.h | 10 | ||||
-rw-r--r-- | tests/dbus/simple-approver.c | 28 | ||||
-rw-r--r-- | tests/dbus/simple-handler.c | 28 | ||||
-rw-r--r-- | tests/dbus/simple-observer.c | 28 |
6 files changed, 149 insertions, 46 deletions
diff --git a/docs/reference/telepathy-glib-sections.txt b/docs/reference/telepathy-glib-sections.txt index b482fe30f..825697d9a 100644 --- a/docs/reference/telepathy-glib-sections.txt +++ b/docs/reference/telepathy-glib-sections.txt @@ -5737,12 +5737,14 @@ TpDebugSenderPrivate TpBaseClient TpBaseClientClass tp_base_client_add_observer_filter +tp_base_client_add_observer_filter_vardict tp_base_client_take_observer_filter tp_base_client_set_observer_recover tp_base_client_set_observer_delay_approvers TpBaseClientClassObserveChannelsImpl tp_base_client_implement_observe_channels tp_base_client_add_approver_filter +tp_base_client_add_approver_filter_vardict tp_base_client_take_approver_filter TpBaseClientClassAddDispatchOperationImpl tp_base_client_implement_add_dispatch_operation @@ -5750,6 +5752,7 @@ tp_base_client_add_handler_capabilities tp_base_client_add_handler_capabilities_varargs tp_base_client_add_handler_capability tp_base_client_add_handler_filter +tp_base_client_add_handler_filter_vardict tp_base_client_take_handler_filter tp_base_client_be_a_handler TpBaseClientClassHandleChannelsImpl diff --git a/telepathy-glib/base-client.c b/telepathy-glib/base-client.c index 5ebaee89d..ef71b2bb8 100644 --- a/telepathy-glib/base-client.c +++ b/telepathy-glib/base-client.c @@ -205,6 +205,7 @@ #include "telepathy-glib/deprecated-internal.h" #include "telepathy-glib/simple-client-factory-internal.h" #include "telepathy-glib/util-internal.h" +#include "telepathy-glib/variant-util-internal.h" static void observer_iface_init (gpointer, gpointer); static void approver_iface_init (gpointer, gpointer); @@ -409,6 +410,43 @@ tp_base_client_take_observer_filter (TpBaseClient *self, } /** + * tp_base_client_add_observer_filter_vardict: + * @self: a client + * @filter: (transfer none): a variant of type %G_VARIANT_TYPE_VARDICT + * + * Register a new channel class as Observer.ObserverChannelFilter. + * The #TpBaseClientClass.observe_channels virtual method will be called + * whenever a new channel's properties match the ones in @filter. + * + * This method may only be called before tp_base_client_register() is + * called, and may only be called on objects whose class implements + * #TpBaseClientClass.observe_channels. + * + * If the variant is floating (see g_variant_ref_sink()), ownership + * will be taken, allowing for uses like this: + * + * |[ + * tp_base_client_add_observer_filter_vardict (client, + * g_variant_new_parsed ("{ %s: <%s>, %s: <%u>, ... }", + * TP_PROP_CHANNEL_CHANNEL_TYPE, TP_IFACE_CHANNEL_TYPE_TEXT, + * TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, (guint32) TP_HANDLE_TYPE_CONTACT, + * ...)); + * ]| + * + * Since: 0.UNRELEASED + */ +void +tp_base_client_add_observer_filter_vardict (TpBaseClient *self, + GVariant *filter) +{ + g_return_if_fail (g_variant_is_of_type (filter, G_VARIANT_TYPE_VARDICT)); + + g_variant_ref_sink (filter); + tp_base_client_take_observer_filter (self, _tp_asv_from_vardict (filter)); + g_variant_unref (filter); +} + +/** * tp_base_client_set_observer_recover: * @self: a #TpBaseClient * @recover: the value of the Observer.Recover property @@ -555,6 +593,36 @@ tp_base_client_take_approver_filter (TpBaseClient *self, } /** + * tp_base_client_add_approver_filter_vardict: + * @self: a client + * @filter: (transfer none): a variant of type %G_VARIANT_TYPE_VARDICT + * + * Register a new channel class as Approver.ApproverChannelFilter. + * The #TpBaseClientClass.add_dispatch_operation virtual method will be called + * whenever a new channel's properties match the ones in @filter. + * + * This method may only be called before tp_base_client_register() is + * called, and may only be called on objects whose class implements + * #TpBaseClientClass.add_dispatch_operation. + * + * If the variant is floating (see g_variant_ref_sink()), ownership + * will be taken. See tp_base_client_add_observer_filter_vardict() for + * more details. + * + * Since: 0.UNRELEASED + */ +void +tp_base_client_add_approver_filter_vardict (TpBaseClient *self, + GVariant *filter) +{ + g_return_if_fail (g_variant_is_of_type (filter, G_VARIANT_TYPE_VARDICT)); + + g_variant_ref_sink (filter); + tp_base_client_take_approver_filter (self, _tp_asv_from_vardict (filter)); + g_variant_unref (filter); +} + +/** * tp_base_client_be_a_handler: * @self: a #TpBaseClient * @@ -642,6 +710,36 @@ tp_base_client_take_handler_filter (TpBaseClient *self, } /** + * tp_base_client_add_handler_filter_vardict: + * @self: a client + * @filter: (transfer none): a variant of type %G_VARIANT_TYPE_VARDICT + * + * Register a new channel class as Handler.HandlerChannelFilter. + * The #TpBaseClientClass.handle_channels virtual method will be called + * whenever a new channel's properties match the ones in @filter. + * + * This method may only be called before tp_base_client_register() is + * called, and may only be called on objects whose class implements + * #TpBaseClientClass.handle_channels. + * + * If the variant is floating (see g_variant_ref_sink()), ownership + * will be taken. See tp_base_client_add_observer_filter_vardict() for + * more details. + * + * Since: 0.UNRELEASED + */ +void +tp_base_client_add_handler_filter_vardict (TpBaseClient *self, + GVariant *filter) +{ + g_return_if_fail (g_variant_is_of_type (filter, G_VARIANT_TYPE_VARDICT)); + + g_variant_ref_sink (filter); + tp_base_client_take_handler_filter (self, _tp_asv_from_vardict (filter)); + g_variant_unref (filter); +} + +/** * tp_base_client_set_handler_bypass_approval: * @self: a #TpBaseClient * @bypass_approval: the value of the Handler.BypassApproval property diff --git a/telepathy-glib/base-client.h b/telepathy-glib/base-client.h index ae5ba3db1..a3cffffc1 100644 --- a/telepathy-glib/base-client.h +++ b/telepathy-glib/base-client.h @@ -111,7 +111,9 @@ void tp_base_client_implement_handle_channels (TpBaseClientClass *klass, void tp_base_client_add_observer_filter (TpBaseClient *self, GHashTable *filter); - +_TP_AVAILABLE_IN_UNRELEASED +void tp_base_client_add_observer_filter_vardict (TpBaseClient *self, + GVariant *filter); void tp_base_client_take_observer_filter (TpBaseClient *self, GHashTable *filter); @@ -124,6 +126,9 @@ void tp_base_client_add_approver_filter (TpBaseClient *self, GHashTable *filter); void tp_base_client_take_approver_filter (TpBaseClient *self, GHashTable *filter); +_TP_AVAILABLE_IN_UNRELEASED +void tp_base_client_add_approver_filter_vardict (TpBaseClient *self, + GVariant *filter); void tp_base_client_be_a_handler (TpBaseClient *self); @@ -131,6 +136,9 @@ void tp_base_client_add_handler_filter (TpBaseClient *self, GHashTable *filter); void tp_base_client_take_handler_filter (TpBaseClient *self, GHashTable *filter); +_TP_AVAILABLE_IN_UNRELEASED +void tp_base_client_add_handler_filter_vardict (TpBaseClient *self, + GVariant *filter); void tp_base_client_set_handler_bypass_approval (TpBaseClient *self, gboolean bypass_approval); diff --git a/tests/dbus/simple-approver.c b/tests/dbus/simple-approver.c index 62d50f565..9995d9db6 100644 --- a/tests/dbus/simple-approver.c +++ b/tests/dbus/simple-approver.c @@ -277,16 +277,14 @@ test_properties (Test *test, { create_simple_approver (test, add_dispatch_success); - tp_base_client_take_approver_filter (test->simple_approver, tp_asv_new ( - TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, TP_IFACE_CHANNEL_TYPE_TEXT, - NULL)); + tp_base_client_add_approver_filter_vardict (test->simple_approver, + g_variant_new_parsed ("{ %s: <%s> }", + TP_PROP_CHANNEL_CHANNEL_TYPE, TP_IFACE_CHANNEL_TYPE_TEXT)); - tp_base_client_take_approver_filter (test->simple_approver, tp_asv_new ( - TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, - TP_IFACE_CHANNEL_TYPE_STREAM_TUBE, - TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, - TP_HANDLE_TYPE_CONTACT, - NULL)); + tp_base_client_add_approver_filter_vardict (test->simple_approver, + g_variant_new_parsed ("{ %s: <%s>, %s: <%u> }", + TP_PROP_CHANNEL_CHANNEL_TYPE, TP_IFACE_CHANNEL_TYPE_STREAM_TUBE, + TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, (guint32) TP_HANDLE_TYPE_CONTACT)); tp_base_client_register (test->simple_approver, &test->error); g_assert_no_error (test->error); @@ -394,8 +392,8 @@ test_success (Test *test, { create_simple_approver (test, add_dispatch_success); - tp_base_client_take_approver_filter (test->simple_approver, - g_hash_table_new (NULL, NULL)); + tp_base_client_add_approver_filter_vardict (test->simple_approver, + g_variant_new_parsed ("@a{sv} {}")); tp_base_client_register (test->simple_approver, &test->error); g_assert_no_error (test->error); @@ -440,8 +438,8 @@ test_delayed (Test *test, { create_simple_approver (test, add_dispatch_async); - tp_base_client_take_approver_filter (test->simple_approver, - g_hash_table_new (NULL, NULL)); + tp_base_client_add_approver_filter_vardict (test->simple_approver, + g_variant_new_parsed ("@a{sv} {}")); tp_base_client_register (test->simple_approver, &test->error); g_assert_no_error (test->error); @@ -473,8 +471,8 @@ test_fail (Test *test, { create_simple_approver (test, add_dispatch_fail); - tp_base_client_take_approver_filter (test->simple_approver, - g_hash_table_new (NULL, NULL)); + tp_base_client_add_approver_filter_vardict (test->simple_approver, + g_variant_new_parsed ("@a{sv} {}")); tp_base_client_register (test->simple_approver, &test->error); g_assert_no_error (test->error); diff --git a/tests/dbus/simple-handler.c b/tests/dbus/simple-handler.c index 69a69baf5..691a8d997 100644 --- a/tests/dbus/simple-handler.c +++ b/tests/dbus/simple-handler.c @@ -298,16 +298,14 @@ test_properties (Test *test, { create_simple_handler (test, FALSE, TRUE, handle_channels_success); - tp_base_client_take_handler_filter (test->simple_handler, tp_asv_new ( - TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, TP_IFACE_CHANNEL_TYPE_TEXT, - NULL)); + tp_base_client_add_handler_filter_vardict (test->simple_handler, + g_variant_new_parsed ("{ %s: <%s> }", + TP_PROP_CHANNEL_CHANNEL_TYPE, TP_IFACE_CHANNEL_TYPE_TEXT)); - tp_base_client_take_handler_filter (test->simple_handler, tp_asv_new ( - TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, - TP_IFACE_CHANNEL_TYPE_STREAM_TUBE, - TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, - TP_HANDLE_TYPE_CONTACT, - NULL)); + tp_base_client_add_handler_filter_vardict (test->simple_handler, + g_variant_new_parsed ("{ %s: <%s>, %s: <%u> }", + TP_PROP_CHANNEL_CHANNEL_TYPE, TP_IFACE_CHANNEL_TYPE_STREAM_TUBE, + TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, (guint32) TP_HANDLE_TYPE_CONTACT)); tp_base_client_register (test->simple_handler, &test->error); g_assert_no_error (test->error); @@ -412,8 +410,8 @@ test_success (Test *test, { create_simple_handler (test, FALSE, FALSE, handle_channels_success); - tp_base_client_take_handler_filter (test->simple_handler, - g_hash_table_new (NULL, NULL)); + tp_base_client_add_handler_filter_vardict (test->simple_handler, + g_variant_new_parsed ("@a{sv} {}")); tp_base_client_register (test->simple_handler, &test->error); g_assert_no_error (test->error); @@ -455,8 +453,8 @@ test_delayed (Test *test, { create_simple_handler (test, FALSE, FALSE, handle_channels_async); - tp_base_client_take_handler_filter (test->simple_handler, - g_hash_table_new (NULL, NULL)); + tp_base_client_add_handler_filter_vardict (test->simple_handler, + g_variant_new_parsed ("@a{sv} {}")); tp_base_client_register (test->simple_handler, &test->error); g_assert_no_error (test->error); @@ -489,8 +487,8 @@ test_fail (Test *test, { create_simple_handler (test, FALSE, FALSE, handle_channels_fail); - tp_base_client_take_handler_filter (test->simple_handler, - g_hash_table_new (NULL, NULL)); + tp_base_client_add_handler_filter_vardict (test->simple_handler, + g_variant_new_parsed ("@a{sv} {}")); tp_base_client_register (test->simple_handler, &test->error); g_assert_no_error (test->error); diff --git a/tests/dbus/simple-observer.c b/tests/dbus/simple-observer.c index 522667603..099efbc36 100644 --- a/tests/dbus/simple-observer.c +++ b/tests/dbus/simple-observer.c @@ -266,16 +266,14 @@ test_properties (Test *test, { create_simple_observer (test, TRUE, observe_channels_success); - tp_base_client_take_observer_filter (test->simple_observer, tp_asv_new ( - TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, TP_IFACE_CHANNEL_TYPE_TEXT, - NULL)); + tp_base_client_add_observer_filter_vardict (test->simple_observer, + g_variant_new_parsed ("{ %s: <%s> }", + TP_PROP_CHANNEL_CHANNEL_TYPE, TP_IFACE_CHANNEL_TYPE_TEXT)); - tp_base_client_take_observer_filter (test->simple_observer, tp_asv_new ( - TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, - TP_IFACE_CHANNEL_TYPE_STREAM_TUBE, - TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, - TP_HANDLE_TYPE_CONTACT, - NULL)); + tp_base_client_add_observer_filter_vardict (test->simple_observer, + g_variant_new_parsed ("{ %s: <%s>, %s: <%u> }", + TP_PROP_CHANNEL_CHANNEL_TYPE, TP_IFACE_CHANNEL_TYPE_STREAM_TUBE, + TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, (guint32) TP_HANDLE_TYPE_CONTACT)); tp_base_client_register (test->simple_observer, &test->error); g_assert_no_error (test->error); @@ -378,8 +376,8 @@ test_success (Test *test, { create_simple_observer (test, TRUE, observe_channels_success); - tp_base_client_take_observer_filter (test->simple_observer, - g_hash_table_new (NULL, NULL)); + tp_base_client_add_observer_filter_vardict (test->simple_observer, + g_variant_new_parsed ("@a{sv} {}")); tp_base_client_register (test->simple_observer, &test->error); g_assert_no_error (test->error); @@ -421,8 +419,8 @@ test_delayed (Test *test, { create_simple_observer (test, TRUE, observe_channels_async); - tp_base_client_take_observer_filter (test->simple_observer, - g_hash_table_new (NULL, NULL)); + tp_base_client_add_observer_filter_vardict (test->simple_observer, + g_variant_new_parsed ("@a{sv} {}")); tp_base_client_register (test->simple_observer, &test->error); g_assert_no_error (test->error); @@ -455,8 +453,8 @@ test_fail (Test *test, { create_simple_observer (test, TRUE, observe_channels_fail); - tp_base_client_take_observer_filter (test->simple_observer, - g_hash_table_new (NULL, NULL)); + tp_base_client_add_observer_filter_vardict (test->simple_observer, + g_variant_new_parsed ("@a{sv} {}")); tp_base_client_register (test->simple_observer, &test->error); g_assert_no_error (test->error); |