From 399d8d40af5546f0eff6416d3573934a251ce233 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Fri, 3 Feb 2017 16:33:55 +0000 Subject: demos: Add event pagination support to calendar-cli demo Otherwise it will only show the first few entries from a calendar. --- demos/calendar/calendar-cli.c | 58 +++++++++++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 21 deletions(-) diff --git a/demos/calendar/calendar-cli.c b/demos/calendar/calendar-cli.c index 25a060bc..a1d84f67 100644 --- a/demos/calendar/calendar-cli.c +++ b/demos/calendar/calendar-cli.c @@ -319,12 +319,11 @@ command_events (int argc, char *argv[]) GDataCalendarService *service = NULL; GDataCalendarCalendar *calendar = NULL; GDataCalendarQuery *query = NULL; - GDataFeed *feed = NULL; - GList/**/ *entries; GError *error = NULL; gint retval = 0; const gchar *query_string, *calendar_id; GDataAuthorizer *authorizer = NULL; + guint n_results; if (argc < 3) { return print_usage (argv); @@ -351,33 +350,50 @@ command_events (int argc, char *argv[]) service = gdata_calendar_service_new (authorizer); query = gdata_calendar_query_new (query_string); + gdata_query_set_max_results (GDATA_QUERY (query), 10); calendar = gdata_calendar_calendar_new (calendar_id); - feed = gdata_calendar_service_query_events (service, calendar, - GDATA_QUERY (query), NULL, - NULL, NULL, &error); + n_results = 0; + + while (TRUE) { + GList/**/ *entries, *l; + GDataFeed *feed = NULL; + + feed = gdata_calendar_service_query_events (service, calendar, + GDATA_QUERY (query), NULL, + NULL, NULL, &error); + + if (error != NULL) { + g_printerr ("%s: Error querying events: %s\n", + argv[0], error->message); + g_error_free (error); + retval = 1; + goto done; + } - if (error != NULL) { - g_printerr ("%s: Error querying events: %s\n", - argv[0], error->message); - g_error_free (error); - retval = 1; - goto done; - } + /* Print results. */ + entries = gdata_feed_get_entries (feed); - /* Print results. */ - for (entries = gdata_feed_get_entries (feed); entries != NULL; - entries = entries->next) { - GDataCalendarEvent *event; + if (entries == NULL) { + retval = 0; + g_object_unref (feed); + goto done; + } - event = GDATA_CALENDAR_EVENT (entries->data); - print_event (event); + for (l = entries; l != NULL; l = l->next) { + GDataCalendarEvent *event; + + event = GDATA_CALENDAR_EVENT (l->data); + print_event (event); + n_results++; + } + + gdata_query_next_page (GDATA_QUERY (query)); + g_object_unref (feed); } - g_print ("Total of %u results.\n", - g_list_length (gdata_feed_get_entries (feed))); + g_print ("Total of %u results.\n", n_results); done: - g_clear_object (&feed); g_clear_object (&query); g_clear_object (&authorizer); g_clear_object (&calendar); -- cgit v1.2.1