diff options
author | Debarshi Ray <debarshir@gnome.org> | 2015-04-24 17:01:42 +0200 |
---|---|---|
committer | Debarshi Ray <debarshir@gnome.org> | 2015-04-27 19:06:31 +0200 |
commit | 6e0b3d1f14e0c290670fd595ace3bf48dd26e714 (patch) | |
tree | 5d14eda360e30eff132c0ff515509f11387f9fcc /gdata | |
parent | a246f3bf5f22fcde438e916764a5bca61c9f1a90 (diff) | |
download | libgdata-6e0b3d1f14e0c290670fd595ace3bf48dd26e714.tar.gz |
documents: Add support for Drive v2 query properties
https://bugzilla.gnome.org/show_bug.cgi?id=684920
Diffstat (limited to 'gdata')
-rw-r--r-- | gdata/services/documents/gdata-documents-query.c | 59 |
1 files changed, 39 insertions, 20 deletions
diff --git a/gdata/services/documents/gdata-documents-query.c b/gdata/services/documents/gdata-documents-query.c index 76f4dd21..330ac295 100644 --- a/gdata/services/documents/gdata-documents-query.c +++ b/gdata/services/documents/gdata-documents-query.c @@ -3,6 +3,7 @@ * GData Client * Copyright (C) Thibault Saunier 2009 <saunierthibault@gmail.com> * Copyright (C) Philip Withnall 2010 <philip@tecnocode.co.uk> + * 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 @@ -87,6 +88,7 @@ #include "gd/gdata-gd-email-address.h" #include "gdata-documents-query.h" +#include "gdata-private.h" #include "gdata-query.h" #include <gdata/services/documents/gdata-documents-spreadsheet.h> @@ -298,6 +300,7 @@ static void get_query_uri (GDataQuery *self, const gchar *feed_uri, GString *query_uri, gboolean *params_started) { GDataDocumentsQueryPrivate *priv = GDATA_DOCUMENTS_QUERY (self)->priv; + guint max_results; #define APPEND_SEP g_string_append_c (query_uri, (*params_started == FALSE) ? '?' : '&'); *params_started = TRUE; @@ -306,22 +309,41 @@ get_query_uri (GDataQuery *self, const gchar *feed_uri, GString *query_uri, gboo g_string_append_uri_escaped (query_uri, priv->folder_id, NULL, FALSE); } - /* Chain up to the parent class */ - GDATA_QUERY_CLASS (gdata_documents_query_parent_class)->get_query_uri (self, feed_uri, query_uri, params_started); + /* Search parameters: https://developers.google.com/drive/web/search-parameters */ + + _gdata_query_clear_q_internal (self); if (priv->collaborator_addresses != NULL) { - GList *address; - APPEND_SEP - address = priv->collaborator_addresses; + GList *i; + GString *str; - g_string_append (query_uri, "writer="); - g_string_append_uri_escaped (query_uri, gdata_gd_email_address_get_address (address->data), NULL, FALSE); - for (address = address->next; address != NULL; address = address->next) { - g_string_append_c (query_uri, ';'); - g_string_append_uri_escaped (query_uri, gdata_gd_email_address_get_address (address->data), NULL, FALSE); + str = g_string_new (NULL); + + for (i = priv->collaborator_addresses; i != NULL; i = i->next) { + GDataGDEmailAddress *email_address = GDATA_GD_EMAIL_ADDRESS (i->data); + const gchar *address; + + address = gdata_gd_email_address_get_address (email_address); + g_string_append_printf (str, "'%s' in writers", address); + if (i->next != NULL) + g_string_append (str, " or "); } + + _gdata_query_add_q_internal (self, str->str); + g_string_free (str, TRUE); } + if (priv->show_deleted == TRUE) + _gdata_query_add_q_internal (self, "trashed=true"); + else + _gdata_query_add_q_internal (self, "trashed=false"); + + if (priv->show_folders == FALSE) + _gdata_query_add_q_internal (self, "mimeType!='application/vnd.google-apps.folder'"); + + /* Chain up to the parent class */ + GDATA_QUERY_CLASS (gdata_documents_query_parent_class)->get_query_uri (self, feed_uri, query_uri, params_started); + if (priv->reader_addresses != NULL) { GList *address; APPEND_SEP @@ -343,16 +365,13 @@ get_query_uri (GDataQuery *self, const gchar *feed_uri, GString *query_uri, gboo g_string_append (query_uri, "&title-exact=true"); } - APPEND_SEP - if (priv->show_deleted == TRUE) - g_string_append (query_uri, "showdeleted=true"); - else - g_string_append (query_uri, "showdeleted=false"); - - if (priv->show_folders == TRUE) - g_string_append (query_uri, "&showfolders=true"); - else - g_string_append (query_uri, "&showfolders=false"); + /* https://developers.google.com/drive/v2/reference/files/list */ + max_results = gdata_query_get_max_results (self); + if (max_results > 0) { + APPEND_SEP + max_results = max_results > 1000 ? 1000 : max_results; + g_string_append_printf (query_uri, "maxResults=%u", max_results); + } } /** |