diff options
author | Philip Withnall <philip.withnall@collabora.co.uk> | 2015-05-12 20:11:20 +0100 |
---|---|---|
committer | Philip Withnall <philip.withnall@collabora.co.uk> | 2015-05-12 20:11:20 +0100 |
commit | 746739fab55dbc0493ea4a29d68cf545e3f151dc (patch) | |
tree | ba3c2075a22e9f3c6893b933ac413b5049a565f9 | |
parent | 62163529e974304933208a73bca98fe9f6a4484b (diff) | |
download | libgdata-746739fab55dbc0493ea4a29d68cf545e3f151dc.tar.gz |
core: Virtualise gdata_access_handler_get_rules()
Add new API:
• GDataAccessHandlerIface.get_rules
as a virtual method backing gdata_access_handler_get_rules().
This does not break ABI as it uses one of the reserved slots in
GDataAccessHandlerIface.
https://bugzilla.gnome.org/show_bug.cgi?id=664353
-rw-r--r-- | gdata/gdata-access-handler.c | 53 | ||||
-rw-r--r-- | gdata/gdata-access-handler.h | 13 |
2 files changed, 47 insertions, 19 deletions
diff --git a/gdata/gdata-access-handler.c b/gdata/gdata-access-handler.c index a802914e..df0304fb 100644 --- a/gdata/gdata-access-handler.c +++ b/gdata/gdata-access-handler.c @@ -1,7 +1,7 @@ /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ /* * GData Client - * Copyright (C) Philip Withnall 2009–2010 <philip@tecnocode.co.uk> + * Copyright (C) Philip Withnall 2009–2010, 2015 <philip@tecnocode.co.uk> * Copyright (C) Red Hat, Inc. 2015 * * GData Client is free software; you can redistribute it and/or @@ -46,19 +46,22 @@ #include "gdata-private.h" #include "gdata-access-rule.h" -GType -gdata_access_handler_get_type (void) -{ - static GType access_handler_type = 0; +static GDataFeed * +gdata_access_handler_real_get_rules (GDataAccessHandler *self, + GDataService *service, + GCancellable *cancellable, + GDataQueryProgressCallback progress_callback, + gpointer progress_user_data, + GError **error); - if (!access_handler_type) { - access_handler_type = g_type_register_static_simple (G_TYPE_INTERFACE, "GDataAccessHandler", - sizeof (GDataAccessHandlerIface), - NULL, 0, NULL, 0); - g_type_interface_add_prerequisite (access_handler_type, GDATA_TYPE_ENTRY); - } +typedef GDataAccessHandlerIface GDataAccessHandlerInterface; +G_DEFINE_INTERFACE (GDataAccessHandler, gdata_access_handler, + GDATA_TYPE_ENTRY); - return access_handler_type; +static void +gdata_access_handler_default_init (GDataAccessHandlerInterface *iface) +{ + iface->get_rules = gdata_access_handler_real_get_rules; } typedef struct { @@ -81,8 +84,12 @@ get_rules_async_data_free (GetRulesAsyncData *self) } static GDataFeed * -_gdata_access_handler_get_rules (GDataAccessHandler *self, GDataService *service, GCancellable *cancellable, - GDataQueryProgressCallback progress_callback, gpointer progress_user_data, GError **error) +gdata_access_handler_real_get_rules (GDataAccessHandler *self, + GDataService *service, + GCancellable *cancellable, + GDataQueryProgressCallback progress_callback, + gpointer progress_user_data, + GError **error) { GDataAccessHandlerIface *iface; GDataAuthorizationDomain *domain = NULL; @@ -131,12 +138,18 @@ _gdata_access_handler_get_rules (GDataAccessHandler *self, GDataService *service static void get_rules_thread (GSimpleAsyncResult *result, GDataAccessHandler *access_handler, GCancellable *cancellable) { + GDataAccessHandlerIface *iface; GError *error = NULL; GetRulesAsyncData *data = g_simple_async_result_get_op_res_gpointer (result); /* Execute the query and return */ - data->feed = _gdata_access_handler_get_rules (access_handler, data->service, cancellable, data->progress_callback, data->progress_user_data, - &error); + iface = GDATA_ACCESS_HANDLER_GET_IFACE (access_handler); + g_assert (iface->get_rules != NULL); + + data->feed = iface->get_rules (access_handler, data->service, + cancellable, data->progress_callback, + data->progress_user_data, &error); + if (data->feed == NULL && error != NULL) { g_simple_async_result_set_from_error (result, error); g_error_free (error); @@ -224,10 +237,16 @@ GDataFeed * gdata_access_handler_get_rules (GDataAccessHandler *self, GDataService *service, GCancellable *cancellable, GDataQueryProgressCallback progress_callback, gpointer progress_user_data, GError **error) { + GDataAccessHandlerIface *iface; + g_return_val_if_fail (GDATA_IS_ACCESS_HANDLER (self), NULL); g_return_val_if_fail (GDATA_IS_SERVICE (service), NULL); g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); - return _gdata_access_handler_get_rules (self, service, cancellable, progress_callback, progress_user_data, error); + iface = GDATA_ACCESS_HANDLER_GET_IFACE (self); + g_assert (iface->get_rules != NULL); + + return iface->get_rules (self, service, cancellable, progress_callback, + progress_user_data, error); } diff --git a/gdata/gdata-access-handler.h b/gdata/gdata-access-handler.h index 9700746c..2b45c4ae 100644 --- a/gdata/gdata-access-handler.h +++ b/gdata/gdata-access-handler.h @@ -1,7 +1,7 @@ /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ /* * GData Client - * Copyright (C) Philip Withnall 2009 <philip@tecnocode.co.uk> + * Copyright (C) Philip Withnall 2009, 2015 <philip@tecnocode.co.uk> * * GData Client is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -64,6 +64,9 @@ typedef struct _GDataAccessHandler GDataAccessHandler; /* dummy typedef */ * @get_authorization_domain: (allow-none): a function to return the #GDataAuthorizationDomain to be used for all operations on the access rules * belonging to this access handler; not implementing this function is equivalent to returning %NULL from it, which signifies that operations on the * access rules don't require authorization; new in version 0.9.0 + * @get_rules: (nullable): a function to query, parse and return a #GDataFeed of + * #GDataAccessRules for a given entry — the virtual function for + * gdata_access_handler_get_rules(); new in version UNRELEASED * * The class structure for the #GDataAccessHandler interface. * @@ -75,9 +78,15 @@ typedef struct { gboolean (*is_owner_rule) (GDataAccessRule *rule); GDataAuthorizationDomain *(*get_authorization_domain) (GDataAccessHandler *self); + GDataFeed *(*get_rules) (GDataAccessHandler *self, + GDataService *service, + GCancellable *cancellable, + GDataQueryProgressCallback progress_callback, + gpointer progress_user_data, + GError **error); + /*< private >*/ /* Padding for future expansion */ - void (*_g_reserved0) (void); void (*_g_reserved1) (void); void (*_g_reserved2) (void); void (*_g_reserved3) (void); |