summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDebarshi Ray <debarshir@gnome.org>2015-06-05 11:54:41 +0200
committerDebarshi Ray <debarshir@gnome.org>2015-06-10 18:22:52 +0200
commite2ab462d63e81a32dcca842bccfdd753bd5dd55f (patch)
treeded673ad09b9368e078271c0307a4c6afad196f9
parentf2459b4beb654cd6a789b594bb3c4e79de7aae2e (diff)
downloadlibgdata-e2ab462d63e81a32dcca842bccfdd753bd5dd55f.tar.gz
documents: Add support for editing ACLs using Drive v2
A new sub-class was introduced to set JSON as the content-type for Drive v2. It was a good opportunity to move the Drive-specific JSON parsing code from the base class. New API added: • GDataDocumentsAccessRule This new class must be used in place of GDataAccessRule for any interactions with the Drive API. This is essentially a soft API break, but it’s unavoidable. https://bugzilla.gnome.org/show_bug.cgi?id=684920
-rw-r--r--Makefile.am4
-rw-r--r--docs/reference/gdata-docs.xml1
-rw-r--r--docs/reference/gdata-sections.txt18
-rw-r--r--gdata/gdata-access-rule.c69
-rw-r--r--gdata/gdata.h1
-rw-r--r--gdata/gdata.symbols2
-rw-r--r--gdata/services/documents/gdata-documents-access-rule.c230
-rw-r--r--gdata/services/documents/gdata-documents-access-rule.h74
-rw-r--r--gdata/services/documents/gdata-documents-entry.c39
-rw-r--r--po/POTFILES.in2
10 files changed, 369 insertions, 71 deletions
diff --git a/Makefile.am b/Makefile.am
index 7b4982b7..1944ddd5 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -292,7 +292,8 @@ gdata_documents_headers = \
gdata/services/documents/gdata-documents-drawing.h \
gdata/services/documents/gdata-documents-pdf.h \
gdata/services/documents/gdata-documents-spreadsheet.h \
- gdata/services/documents/gdata-documents-upload-query.h
+ gdata/services/documents/gdata-documents-upload-query.h \
+ gdata/services/documents/gdata-documents-access-rule.h
gdatadocumentsinclude_HEADERS = \
$(gdata_documents_headers) \
gdata/services/documents/gdata-documents-enums.h
@@ -431,6 +432,7 @@ gdata_sources = \
gdata/services/documents/gdata-documents-pdf.c \
gdata/services/documents/gdata-documents-query.c \
gdata/services/documents/gdata-documents-upload-query.c \
+ gdata/services/documents/gdata-documents-access-rule.c \
\
gdata/services/picasaweb/gdata-picasaweb-album.c \
gdata/services/picasaweb/gdata-picasaweb-query.c \
diff --git a/docs/reference/gdata-docs.xml b/docs/reference/gdata-docs.xml
index 4f7ede08..3db99d32 100644
--- a/docs/reference/gdata-docs.xml
+++ b/docs/reference/gdata-docs.xml
@@ -166,6 +166,7 @@
<xi:include href="xml/gdata-documents-presentation.xml"/>
<xi:include href="xml/gdata-documents-spreadsheet.xml"/>
<xi:include href="xml/gdata-documents-text.xml"/>
+ <xi:include href="xml/gdata-documents-access-rule.xml"/>
</chapter>
<chapter>
diff --git a/docs/reference/gdata-sections.txt b/docs/reference/gdata-sections.txt
index 92e68b2b..d841848a 100644
--- a/docs/reference/gdata-sections.txt
+++ b/docs/reference/gdata-sections.txt
@@ -2833,3 +2833,21 @@ GDATA_TYPE_CALENDAR_ACCESS_RULE
<SUBSECTION Private>
GDataCalendarAccessRulePrivate
</SECTION>
+
+<SECTION>
+<FILE>gdata-documents-access-rule</FILE>
+<TITLE>GDataDocumentsAccessRule</TITLE>
+GDataDocumentsAccessRule
+GDataDocumentsAccessRuleClass
+gdata_documents_access_rule_new
+<SUBSECTION Standard>
+gdata_documents_access_rule_get_type
+GDATA_DOCUMENTS_ACCESS_RULE
+GDATA_DOCUMENTS_ACCESS_RULE_CLASS
+GDATA_DOCUMENTS_ACCESS_RULE_GET_CLASS
+GDATA_IS_DOCUMENTS_ACCESS_RULE
+GDATA_IS_DOCUMENTS_ACCESS_RULE_CLASS
+GDATA_TYPE_DOCUMENTS_ACCESS_RULE
+<SUBSECTION Private>
+GDataDocumentsAccessRulePrivate
+</SECTION>
diff --git a/gdata/gdata-access-rule.c b/gdata/gdata-access-rule.c
index 6506b388..e75aa085 100644
--- a/gdata/gdata-access-rule.c
+++ b/gdata/gdata-access-rule.c
@@ -80,7 +80,6 @@
#include <config.h>
#include <glib.h>
-#include <glib/gi18n-lib.h>
#include <libxml/parser.h>
#include <string.h>
@@ -96,12 +95,8 @@ static void get_xml (GDataParsable *parsable, GString *xml_string);
static void gdata_access_rule_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec);
static void gdata_access_rule_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec);
static gboolean parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *node, gpointer user_data, GError **error);
-static gboolean parse_json (GDataParsable *parsable, JsonReader *reader, gpointer user_data, GError **error);
-static gboolean post_parse_json (GDataParsable *parsable, gpointer user_data, GError **error);
struct _GDataAccessRulePrivate {
- gchar *domain;
- gchar *email;
gchar *role;
gchar *scope_type;
gchar *scope_value;
@@ -138,9 +133,6 @@ gdata_access_rule_class_init (GDataAccessRuleClass *klass)
parsable_class->get_xml = get_xml;
parsable_class->get_namespaces = get_namespaces;
- parsable_class->parse_json = parse_json;
- parsable_class->post_parse_json = post_parse_json;
-
entry_class->kind_term = "http://schemas.google.com/acl/2007#accessRule";
/**
@@ -285,8 +277,6 @@ gdata_access_rule_finalize (GObject *object)
{
GDataAccessRulePrivate *priv = GDATA_ACCESS_RULE (object)->priv;
- g_free (priv->domain);
- g_free (priv->email);
g_free (priv->role);
g_free (priv->scope_type);
g_free (priv->scope_value);
@@ -493,65 +483,6 @@ get_namespaces (GDataParsable *parsable, GHashTable *namespaces)
g_hash_table_insert (namespaces, (gchar*) "gAcl", (gchar*) "http://schemas.google.com/acl/2007");
}
-static gboolean
-parse_json (GDataParsable *parsable, JsonReader *reader, gpointer user_data, GError **error)
-{
- GDataAccessRulePrivate *priv = GDATA_ACCESS_RULE (parsable)->priv;
- gboolean success;
- gchar *scope_type = NULL;
-
- if (gdata_parser_string_from_json_member (reader, "authKey", P_REQUIRED | P_NON_EMPTY, &(priv->key), &success, error) == TRUE ||
- gdata_parser_string_from_json_member (reader, "emailAddress", P_REQUIRED | P_NON_EMPTY, &(priv->email), &success, error) == TRUE ||
- gdata_parser_string_from_json_member (reader, "domain", P_REQUIRED | P_NON_EMPTY, &(priv->domain), &success, error) == TRUE ||
- gdata_parser_string_from_json_member (reader, "role", P_REQUIRED | P_NON_EMPTY, &(priv->role), &success, error) == TRUE) {
- return success;
- } else if (gdata_parser_string_from_json_member (reader, "type", P_REQUIRED | P_NON_EMPTY, &scope_type, &success, error) == TRUE) {
- if (g_strcmp0 (scope_type, "anyone") == 0) {
- priv->scope_type = g_strdup (GDATA_ACCESS_SCOPE_DEFAULT);
- } else {
- priv->scope_type = scope_type;
- scope_type = NULL;
- }
-
- g_free (scope_type);
- return success;
- }
-
- return GDATA_PARSABLE_CLASS (gdata_access_rule_parent_class)->parse_json (parsable, reader, user_data, error);
-}
-
-static gboolean
-post_parse_json (GDataParsable *parsable, gpointer user_data, GError **error)
-{
- GDataAccessRulePrivate *priv = GDATA_ACCESS_RULE (parsable)->priv;
-
- if (g_strcmp0 (priv->scope_type, "group") == 0 || g_strcmp0 (priv->scope_type, "user") == 0) {
- if (priv->email == NULL || priv->email[0] == '\0') {
- g_set_error (error, GDATA_PARSER_ERROR, GDATA_PARSER_ERROR_PARSING_STRING,
- /* Translators: the parameter is an error message */
- _("Error parsing JSON: %s"),
- "Permission type ‘group’ or ‘user’ needs an ‘emailAddress’ property.");
- return FALSE;
- } else {
- priv->scope_value = priv->email;
- priv->email = NULL;
- }
- } else if (g_strcmp0 (priv->scope_type, "domain") == 0) {
- if (priv->domain == NULL || priv->domain[0] == '\0') {
- g_set_error (error, GDATA_PARSER_ERROR, GDATA_PARSER_ERROR_PARSING_STRING,
- /* Translators: the parameter is an error message */
- _("Error parsing JSON: %s"),
- "Permission type ‘domain’ needs a ‘domain’ property.");
- return FALSE;
- } else {
- priv->scope_value = priv->domain;
- priv->domain = NULL;
- }
- }
-
- return TRUE;
-}
-
/**
* gdata_access_rule_new:
* @id: the access rule's ID, or %NULL
diff --git a/gdata/gdata.h b/gdata/gdata.h
index f259b26f..3231219f 100644
--- a/gdata/gdata.h
+++ b/gdata/gdata.h
@@ -139,6 +139,7 @@
#include <gdata/services/documents/gdata-documents-pdf.h>
#include <gdata/services/documents/gdata-documents-enums.h>
#include <gdata/services/documents/gdata-documents-upload-query.h>
+#include <gdata/services/documents/gdata-documents-access-rule.h>
/* Google Tasks */
#include <gdata/services/tasks/gdata-tasks-service.h>
diff --git a/gdata/gdata.symbols b/gdata/gdata.symbols
index 30c4a300..ae4cfb7e 100644
--- a/gdata/gdata.symbols
+++ b/gdata/gdata.symbols
@@ -659,6 +659,8 @@ gdata_documents_query_add_reader
gdata_documents_query_add_collaborator
gdata_documents_service_error_get_type
gdata_documents_service_error_quark
+gdata_documents_access_rule_get_type
+gdata_documents_access_rule_new
gdata_download_stream_get_type
gdata_download_stream_new
gdata_download_stream_get_service
diff --git a/gdata/services/documents/gdata-documents-access-rule.c b/gdata/services/documents/gdata-documents-access-rule.c
new file mode 100644
index 00000000..60413921
--- /dev/null
+++ b/gdata/services/documents/gdata-documents-access-rule.c
@@ -0,0 +1,230 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+/*
+ * GData Client
+ * Copyright (C) Red Hat, Inc. 2015
+ *
+ * GData Client is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * GData Client is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GData Client. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * SECTION:gdata-documents-access-rule
+ * @short_description: GData Documents access rule object
+ * @stability: Stable
+ * @include: gdata/services/documents/gdata-documents-access-rule.h
+ *
+ * #GDataDocumentsAccessRule is a subclass of #GDataAccessRule to represent an
+ * access rule affecting users of a Google Documents entry.
+ *
+ * Since: UNRELEASED
+ */
+
+#include <config.h>
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+
+#include "gdata-documents-access-rule.h"
+#include "gdata-parser.h"
+#include "gdata-private.h"
+
+static void gdata_documents_access_rule_finalize (GObject *object);
+static gboolean parse_json (GDataParsable *parsable, JsonReader *reader, gpointer user_data, GError **error);
+static gboolean post_parse_json (GDataParsable *parsable, gpointer user_data, GError **error);
+static const gchar *get_content_type (void);
+static void get_json (GDataParsable *parsable, JsonBuilder *builder);
+
+typedef struct {
+ gchar *domain;
+ gchar *email;
+ gchar *scope_type;
+} GDataDocumentsAccessRulePrivate;
+
+G_DEFINE_TYPE_WITH_PRIVATE (GDataDocumentsAccessRule, gdata_documents_access_rule, GDATA_TYPE_ACCESS_RULE)
+
+static void
+gdata_documents_access_rule_class_init (GDataDocumentsAccessRuleClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ GDataParsableClass *parsable_class = GDATA_PARSABLE_CLASS (klass);
+
+ gobject_class->finalize = gdata_documents_access_rule_finalize;
+ parsable_class->parse_json = parse_json;
+ parsable_class->post_parse_json = post_parse_json;
+ parsable_class->get_content_type = get_content_type;
+ parsable_class->get_json = get_json;
+}
+
+static void
+gdata_documents_access_rule_init (GDataDocumentsAccessRule *self)
+{
+ /* Nothing to do here. */
+}
+
+static void
+gdata_documents_access_rule_finalize (GObject *object)
+{
+ GDataDocumentsAccessRulePrivate *priv;
+
+ priv = gdata_documents_access_rule_get_instance_private (GDATA_DOCUMENTS_ACCESS_RULE (object));
+
+ g_free (priv->domain);
+ g_free (priv->email);
+ g_free (priv->scope_type);
+
+ /* Chain up to the parent class */
+ G_OBJECT_CLASS (gdata_documents_access_rule_parent_class)->finalize (object);
+}
+
+static gboolean
+parse_json (GDataParsable *parsable, JsonReader *reader, gpointer user_data, GError **error)
+{
+ GDataDocumentsAccessRulePrivate *priv;
+ gboolean success;
+ gchar *key = NULL;
+ gchar *role = NULL;
+ gchar *scope_type = NULL;
+
+ priv = gdata_documents_access_rule_get_instance_private (GDATA_DOCUMENTS_ACCESS_RULE (parsable));
+
+ /* JSON format: https://developers.google.com/drive/v2/reference/permissions */
+
+ if (gdata_parser_string_from_json_member (reader, "emailAddress", P_REQUIRED | P_NON_EMPTY, &(priv->email), &success, error) == TRUE ||
+ gdata_parser_string_from_json_member (reader, "domain", P_REQUIRED | P_NON_EMPTY, &(priv->domain), &success, error) == TRUE) {
+ return success;
+ } else if (gdata_parser_string_from_json_member (reader, "authKey", P_REQUIRED | P_NON_EMPTY, &key, &success, error) == TRUE) {
+ if (success && key != NULL && key[0] != '\0')
+ _gdata_access_rule_set_key (GDATA_ACCESS_RULE (parsable), key);
+
+ g_free (key);
+ return success;
+ } else if (gdata_parser_string_from_json_member (reader, "role", P_REQUIRED | P_NON_EMPTY, &role, &success, error) == TRUE) {
+ if (success && role != NULL && role[0] != '\0')
+ gdata_access_rule_set_role (GDATA_ACCESS_RULE (parsable), role);
+
+ g_free (role);
+ return success;
+ } else if (gdata_parser_string_from_json_member (reader, "type", P_REQUIRED | P_NON_EMPTY, &scope_type, &success, error) == TRUE) {
+ if (g_strcmp0 (scope_type, "anyone") == 0) {
+ priv->scope_type = g_strdup (GDATA_ACCESS_SCOPE_DEFAULT);
+ } else {
+ priv->scope_type = scope_type;
+ scope_type = NULL;
+ }
+
+ g_free (scope_type);
+ return success;
+ }
+
+ return GDATA_PARSABLE_CLASS (gdata_documents_access_rule_parent_class)->parse_json (parsable, reader, user_data, error);
+}
+
+static gboolean
+post_parse_json (GDataParsable *parsable, gpointer user_data, GError **error)
+{
+ GDataDocumentsAccessRulePrivate *priv;
+
+ priv = gdata_documents_access_rule_get_instance_private (GDATA_DOCUMENTS_ACCESS_RULE (parsable));
+
+ if (g_strcmp0 (priv->scope_type, GDATA_ACCESS_SCOPE_DEFAULT) == 0) {
+ gdata_access_rule_set_scope (GDATA_ACCESS_RULE (parsable), priv->scope_type, NULL);
+ } else if (g_strcmp0 (priv->scope_type, "group") == 0 || g_strcmp0 (priv->scope_type, GDATA_ACCESS_SCOPE_USER) == 0) {
+ if (priv->email == NULL || priv->email[0] == '\0') {
+ g_set_error (error, GDATA_PARSER_ERROR, GDATA_PARSER_ERROR_PARSING_STRING,
+ /* Translators: the parameter is an error message */
+ _("Error parsing JSON: %s"),
+ "Permission type ‘group’ or ‘user’ needs an ‘emailAddress’ property.");
+ return FALSE;
+ } else {
+ gdata_access_rule_set_scope (GDATA_ACCESS_RULE (parsable), priv->scope_type, priv->email);
+ }
+ } else if (g_strcmp0 (priv->scope_type, GDATA_ACCESS_SCOPE_DOMAIN) == 0) {
+ if (priv->domain == NULL || priv->domain[0] == '\0') {
+ g_set_error (error, GDATA_PARSER_ERROR, GDATA_PARSER_ERROR_PARSING_STRING,
+ /* Translators: the parameter is an error message */
+ _("Error parsing JSON: %s"),
+ "Permission type ‘domain’ needs a ‘domain’ property.");
+ return FALSE;
+ } else {
+ gdata_access_rule_set_scope (GDATA_ACCESS_RULE (parsable), priv->scope_type, priv->domain);
+ }
+ }
+
+ return TRUE;
+}
+
+static const gchar *
+get_content_type (void)
+{
+ return "application/json";
+}
+
+static void
+get_json (GDataParsable *parsable, JsonBuilder *builder)
+{
+ const gchar *key;
+ const gchar *role;
+ const gchar *scope_type;
+ const gchar *scope_value;
+
+ GDATA_PARSABLE_CLASS (gdata_documents_access_rule_parent_class)->get_json (parsable, builder);
+
+ key = gdata_access_rule_get_key (GDATA_ACCESS_RULE (parsable));
+ if (key != NULL && key[0] != '\0') {
+ json_builder_set_member_name (builder, "authKey");
+ json_builder_add_string_value (builder, key);
+ }
+
+ role = gdata_access_rule_get_role (GDATA_ACCESS_RULE (parsable));
+ if (role != NULL && role[0] != '\0') {
+ json_builder_set_member_name (builder, "role");
+ json_builder_add_string_value (builder, role);
+ }
+
+ gdata_access_rule_get_scope (GDATA_ACCESS_RULE (parsable), &scope_type, &scope_value);
+
+ if (scope_type != NULL && scope_type[0] != '\0') {
+ if (g_strcmp0 (scope_type, GDATA_ACCESS_SCOPE_DEFAULT) == 0)
+ scope_type = "anyone";
+
+ json_builder_set_member_name (builder, "type");
+ json_builder_add_string_value (builder, scope_type);
+ }
+
+ if (scope_value != NULL && scope_value[0] != '\0') {
+ json_builder_set_member_name (builder, "value");
+ json_builder_add_string_value (builder, scope_value);
+ }
+}
+
+/**
+ * gdata_documents_access_rule_new:
+ * @id: the access rule's ID, or %NULL
+ *
+ * Creates a new #GDataDocumentsAccessRule with the given ID and default
+ * properties.
+ *
+ * Return value: (transfer full): a new #GDataDocumentsAccessRule; unref with
+ * g_object_unref()
+ *
+ * Since: UNRELEASED
+ */
+GDataDocumentsAccessRule *
+gdata_documents_access_rule_new (const gchar *id)
+{
+ GObject *retval = NULL; /* owned */
+
+ retval = g_object_new (GDATA_TYPE_DOCUMENTS_ACCESS_RULE,
+ "id", id,
+ NULL);
+ return GDATA_DOCUMENTS_ACCESS_RULE (retval);
+}
diff --git a/gdata/services/documents/gdata-documents-access-rule.h b/gdata/services/documents/gdata-documents-access-rule.h
new file mode 100644
index 00000000..6d5b1620
--- /dev/null
+++ b/gdata/services/documents/gdata-documents-access-rule.h
@@ -0,0 +1,74 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+/*
+ * GData Client
+ * Copyright (C) Red Hat, Inc. 2015
+ *
+ * GData Client is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * GData Client is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GData Client. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GDATA_DOCUMENTS_ACCESS_RULE_H
+#define GDATA_DOCUMENTS_ACCESS_RULE_H
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include <gdata/gdata-access-rule.h>
+
+G_BEGIN_DECLS
+
+#define GDATA_TYPE_DOCUMENTS_ACCESS_RULE (gdata_documents_access_rule_get_type ())
+#define GDATA_DOCUMENTS_ACCESS_RULE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDATA_TYPE_DOCUMENTS_ACCESS_RULE, GDataDocumentsAccessRule))
+#define GDATA_DOCUMENTS_ACCESS_RULE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GDATA_TYPE_DOCUMENTS_ACCESS_RULE, GDataDocumentsAccessRuleClass))
+#define GDATA_IS_DOCUMENTS_ACCESS_RULE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDATA_TYPE_DOCUMENTS_ACCESS_RULE))
+#define GDATA_IS_DOCUMENTS_ACCESS_RULE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GDATA_TYPE_DOCUMENTS_ACCESS_RULE))
+#define GDATA_DOCUMENTS_ACCESS_RULE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDATA_TYPE_DOCUMENTS_ACCESS_RULE, GDataDocumentsAccessRuleClass))
+
+/**
+ * GDataDocumentsAccessRule:
+ *
+ * All the fields in the #GDataDocumentsAccessRule structure are private and
+ * should never be accessed directly.
+ *
+ * Since: UNRELEASED
+ */
+typedef struct {
+ GDataAccessRule parent;
+} GDataDocumentsAccessRule;
+
+/**
+ * GDataDocumentsAccessRuleClass:
+ *
+ * All the fields in the #GDataDocumentsAccessRuleClass structure are private
+ * and should never be accessed directly.
+ *
+ * Since: UNRELEASED
+ */
+typedef struct {
+ /*< private >*/
+ GDataAccessRuleClass parent;
+
+ /*< private >*/
+ /* Padding for future expansion */
+ void (*_g_reserved0) (void);
+ void (*_g_reserved1) (void);
+} GDataDocumentsAccessRuleClass;
+
+GType gdata_documents_access_rule_get_type (void) G_GNUC_CONST;
+
+GDataDocumentsAccessRule *
+gdata_documents_access_rule_new (const gchar *id) G_GNUC_WARN_UNUSED_RESULT G_GNUC_MALLOC;
+
+G_END_DECLS
+
+#endif /* !GDATA_DOCUMENTS_ACCESS_RULE_H */
diff --git a/gdata/services/documents/gdata-documents-entry.c b/gdata/services/documents/gdata-documents-entry.c
index 21ebacd2..f107c61e 100644
--- a/gdata/services/documents/gdata-documents-entry.c
+++ b/gdata/services/documents/gdata-documents-entry.c
@@ -104,6 +104,7 @@
#include "gdata-types.h"
#include "gdata-private.h"
#include "gdata-access-handler.h"
+#include "gdata-documents-access-rule.h"
#include "gdata-documents-service.h"
#include "gdata-documents-spreadsheet.h"
@@ -300,11 +301,49 @@ get_authorization_domain (GDataAccessHandler *self)
return gdata_documents_service_get_primary_authorization_domain ();
}
+static GDataFeed *
+get_rules (GDataAccessHandler *self,
+ GDataService *service,
+ GCancellable *cancellable,
+ GDataQueryProgressCallback progress_callback,
+ gpointer progress_user_data,
+ GError **error)
+{
+ GDataAccessHandlerIface *iface;
+ GDataAuthorizationDomain *domain = NULL;
+ GDataFeed *feed;
+ GDataLink *_link;
+ SoupMessage *message;
+
+ _link = gdata_entry_look_up_link (GDATA_ENTRY (self), GDATA_LINK_ACCESS_CONTROL_LIST);
+ g_assert (_link != NULL);
+
+ iface = GDATA_ACCESS_HANDLER_GET_IFACE (self);
+ if (iface->get_authorization_domain != NULL) {
+ domain = iface->get_authorization_domain (self);
+ }
+
+ message = _gdata_service_query (service, domain, gdata_link_get_uri (_link), NULL, cancellable, error);
+ if (message == NULL) {
+ return NULL;
+ }
+
+ g_assert (message->response_body->data != NULL);
+
+ feed = _gdata_feed_new_from_json (GDATA_TYPE_FEED, message->response_body->data, message->response_body->length, GDATA_TYPE_DOCUMENTS_ACCESS_RULE,
+ progress_callback, progress_user_data, error);
+
+ g_object_unref (message);
+
+ return feed;
+}
+
static void
gdata_documents_entry_access_handler_init (GDataAccessHandlerIface *iface)
{
iface->is_owner_rule = is_owner_rule;
iface->get_authorization_domain = get_authorization_domain;
+ iface->get_rules = get_rules;
}
static void
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 20a3f363..cc8ddc29 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -2,7 +2,6 @@
# Please keep this file sorted alphabetically.
[encoding: UTF-8]
gdata/gdata-access-handler.c
-gdata/gdata-access-rule.c
gdata/gdata-client-login-authorizer.c
gdata/gdata-commentable.c
gdata/gdata-download-stream.c
@@ -18,6 +17,7 @@ gdata/services/calendar/gdata-calendar-calendar.c
gdata/services/calendar/gdata-calendar-event.c
gdata/services/calendar/gdata-calendar-service.c
gdata/services/contacts/gdata-contacts-service.c
+gdata/services/documents/gdata-documents-access-rule.c
gdata/services/documents/gdata-documents-document.c
gdata/services/documents/gdata-documents-entry.c
gdata/services/documents/gdata-documents-feed.c