diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2014-05-09 16:23:55 +0200 |
---|---|---|
committer | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2014-09-17 14:00:00 +0100 |
commit | 01c2d1fc7c7fa6924bf3b547944f8f9a89b675c1 (patch) | |
tree | f787b981fdb06254a927e4a85fcb5608a2a5b085 | |
parent | 800e05976ddc6d2124117aeb35ba9141219b7d8d (diff) | |
download | telepathy-glib-01c2d1fc7c7fa6924bf3b547944f8f9a89b675c1.tar.gz |
base-client: use gdbus-codegen's skeleton to implement Client
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=77882
Reviewed-by: Xavier Claessens
Reviewed-by: Simon McVittie
-rw-r--r-- | telepathy-glib/Makefile.am | 2 | ||||
-rw-r--r-- | telepathy-glib/base-client.c | 66 |
2 files changed, 36 insertions, 32 deletions
diff --git a/telepathy-glib/Makefile.am b/telepathy-glib/Makefile.am index 84ab59e8d..7c93ac23f 100644 --- a/telepathy-glib/Makefile.am +++ b/telepathy-glib/Makefile.am @@ -355,6 +355,8 @@ gdbus_codegen = \ _gdbus/Connection_Interface_Presence1.h \ _gdbus/Connection_Interface_Requests.c \ _gdbus/Connection_Interface_Requests.h \ + _gdbus/Client.c \ + _gdbus/Client.h \ $(NULL) _gdbus/%.c: _gdbus/%-stamp diff --git a/telepathy-glib/base-client.c b/telepathy-glib/base-client.c index 25c5e535d..01bf19f69 100644 --- a/telepathy-glib/base-client.c +++ b/telepathy-glib/base-client.c @@ -193,6 +193,8 @@ #include <telepathy-glib/util.h> #include <telepathy-glib/value-array.h> +#include <telepathy-glib/_gdbus/Client.h> + #define DEBUG_FLAG TP_DEBUG_CLIENT #include "telepathy-glib/connection-internal.h" #include "telepathy-glib/debug-internal.h" @@ -207,7 +209,6 @@ static void requests_iface_init (gpointer, gpointer); G_DEFINE_ABSTRACT_TYPE_WITH_CODE(TpBaseClient, tp_base_client, G_TYPE_DBUS_OBJECT_SKELETON, - G_IMPLEMENT_INTERFACE(TP_TYPE_SVC_CLIENT, NULL); G_IMPLEMENT_INTERFACE(TP_TYPE_SVC_CLIENT_OBSERVER, observer_iface_init); G_IMPLEMENT_INTERFACE(TP_TYPE_SVC_CLIENT_APPROVER, approver_iface_init); G_IMPLEMENT_INTERFACE(TP_TYPE_SVC_CLIENT_HANDLER, handler_iface_init); @@ -271,6 +272,8 @@ struct _TpBaseClientPrivate TpBaseClientDelegatedChannelsCb delegated_channels_cb; gpointer delegated_channels_data; GDestroyNotify delegated_channels_destroy; + + _TpGDBusClient *client_skeleton; }; /* @@ -471,6 +474,7 @@ tp_base_client_set_observer_recover (TpBaseClient *self, self->priv->flags |= CLIENT_IS_OBSERVER; self->priv->flags &= ~CLIENT_OBSERVER_RECOVER; } + } /** @@ -916,6 +920,26 @@ clients_quark (void) return q; } +static void +update_interfaces (TpBaseClient *self) +{ + GPtrArray *arr = g_ptr_array_new (); + + if (self->priv->flags & CLIENT_IS_OBSERVER) + g_ptr_array_add (arr, TP_IFACE_CLIENT_OBSERVER); + if (self->priv->flags & CLIENT_IS_APPROVER) + g_ptr_array_add (arr, TP_IFACE_CLIENT_APPROVER); + if (self->priv->flags & CLIENT_IS_HANDLER) + g_ptr_array_add (arr, TP_IFACE_CLIENT_HANDLER); + if (self->priv->flags & CLIENT_HANDLER_WANTS_REQUESTS) + g_ptr_array_add (arr, TP_IFACE_CLIENT_INTERFACE_REQUESTS); + + g_ptr_array_add (arr, NULL); + _tp_gdbus_client_set_interfaces (self->priv->client_skeleton, + (const gchar * const *) arr->pdata); + g_ptr_array_unref (arr); +} + /** * tp_base_client_register: * @self: a #TpBaseClient, which must not have been registered with @@ -946,6 +970,8 @@ tp_base_client_register (TpBaseClient *self, DEBUG ("request name %s", self->priv->bus_name); + update_interfaces (self); + if (!tp_dbus_connection_try_register_object (self->priv->dbus, self->priv->object_path, G_OBJECT (self), error)) { @@ -1067,6 +1093,8 @@ tp_base_client_init (TpBaseClient *self) self->priv->my_chans = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_object_unref); + + self->priv->client_skeleton = _tp_gdbus_client_skeleton_new (); } static void @@ -1099,6 +1127,8 @@ tp_base_client_dispose (GObject *object) self->priv->delegated_channels_destroy = NULL; } + g_clear_object (&self->priv->client_skeleton); + if (dispose != NULL) dispose (object); } @@ -1220,7 +1250,9 @@ tp_base_client_constructed (GObject *object) if (chain_up != NULL) chain_up (object); - object_skeleton_take_svc_interface (skel, TP_TYPE_SVC_CLIENT); + g_dbus_object_skeleton_add_interface (skel, + G_DBUS_INTERFACE_SKELETON (self->priv->client_skeleton)); + object_skeleton_take_svc_interface (skel, TP_TYPE_SVC_CLIENT_OBSERVER); object_skeleton_take_svc_interface (skel, TP_TYPE_SVC_CLIENT_APPROVER); object_skeleton_take_svc_interface (skel, TP_TYPE_SVC_CLIENT_HANDLER); @@ -1263,7 +1295,6 @@ tp_base_client_constructed (GObject *object) } typedef enum { - DP_INTERFACES, DP_APPROVER_CHANNEL_FILTER, DP_HANDLER_CHANNEL_FILTER, DP_BYPASS_APPROVAL, @@ -1286,28 +1317,6 @@ tp_base_client_get_dbus_properties (GObject *object, switch (which) { - case DP_INTERFACES: - { - GPtrArray *arr = g_ptr_array_sized_new (5); - - if (self->priv->flags & CLIENT_IS_OBSERVER) - g_ptr_array_add (arr, g_strdup (TP_IFACE_CLIENT_OBSERVER)); - - if (self->priv->flags & CLIENT_IS_APPROVER) - g_ptr_array_add (arr, g_strdup (TP_IFACE_CLIENT_APPROVER)); - - if (self->priv->flags & CLIENT_IS_HANDLER) - g_ptr_array_add (arr, g_strdup (TP_IFACE_CLIENT_HANDLER)); - - if (self->priv->flags & CLIENT_HANDLER_WANTS_REQUESTS) - g_ptr_array_add (arr, g_strdup ( - TP_IFACE_CLIENT_INTERFACE_REQUESTS)); - - g_ptr_array_add (arr, NULL); - g_value_take_boxed (value, g_ptr_array_free (arr, FALSE)); - } - break; - case DP_OBSERVER_CHANNEL_FILTER: g_value_set_boxed (value, self->priv->observer_filters); break; @@ -1364,10 +1373,6 @@ static void tp_base_client_class_init (TpBaseClientClass *cls) { GParamSpec *param_spec; - static TpDBusPropertiesMixinPropImpl client_properties[] = { - { "Interfaces", GINT_TO_POINTER (DP_INTERFACES) }, - { NULL } - }; static TpDBusPropertiesMixinPropImpl handler_properties[] = { { "HandlerChannelFilter", GINT_TO_POINTER (DP_HANDLER_CHANNEL_FILTER) }, @@ -1514,9 +1519,6 @@ tp_base_client_class_init (TpBaseClientClass *cls) TP_TYPE_CHANNEL_REQUEST, G_TYPE_STRING, G_TYPE_STRING); tp_dbus_properties_mixin_implement_interface (object_class, - TP_IFACE_QUARK_CLIENT, tp_base_client_get_dbus_properties, - NULL, client_properties); - tp_dbus_properties_mixin_implement_interface (object_class, TP_IFACE_QUARK_CLIENT_OBSERVER, tp_base_client_get_dbus_properties, NULL, observer_properties); tp_dbus_properties_mixin_implement_interface (object_class, |