summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Withnall <philip.withnall@collabora.co.uk>2015-05-12 20:11:20 +0100
committerPhilip Withnall <philip.withnall@collabora.co.uk>2015-05-12 20:11:20 +0100
commit746739fab55dbc0493ea4a29d68cf545e3f151dc (patch)
treeba3c2075a22e9f3c6893b933ac413b5049a565f9
parent62163529e974304933208a73bca98fe9f6a4484b (diff)
downloadlibgdata-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.c53
-rw-r--r--gdata/gdata-access-handler.h13
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);