|
Packit |
4b6dd7 |
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
|
Packit |
4b6dd7 |
/*
|
|
Packit |
4b6dd7 |
* GData Client
|
|
Packit |
4b6dd7 |
* Copyright (C) Philip Withnall 2009, 2010, 2014, 2015 <philip@tecnocode.co.uk>
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* GData Client is free software; you can redistribute it and/or
|
|
Packit |
4b6dd7 |
* modify it under the terms of the GNU Lesser General Public
|
|
Packit |
4b6dd7 |
* License as published by the Free Software Foundation; either
|
|
Packit |
4b6dd7 |
* version 2.1 of the License, or (at your option) any later version.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* GData Client is distributed in the hope that it will be useful,
|
|
Packit |
4b6dd7 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
4b6dd7 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
4b6dd7 |
* Lesser General Public License for more details.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
4b6dd7 |
* License along with GData Client. If not, see <http://www.gnu.org/licenses/>.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* SECTION:gdata-calendar-event
|
|
Packit |
4b6dd7 |
* @short_description: GData Calendar event object
|
|
Packit |
4b6dd7 |
* @stability: Stable
|
|
Packit |
4b6dd7 |
* @include: gdata/services/calendar/gdata-calendar-event.h
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* #GDataCalendarEvent is a subclass of #GDataEntry to represent an event on a calendar from Google Calendar.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* For more details of Google Calendar's GData API, see the
|
|
Packit |
4b6dd7 |
* <ulink type="http" url="https://developers.google.com/google-apps/calendar/v3/reference/">
|
|
Packit |
4b6dd7 |
* online documentation</ulink>.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* <example>
|
|
Packit |
4b6dd7 |
* <title>Adding a New Event to the Default Calendar</title>
|
|
Packit |
4b6dd7 |
* <programlisting>
|
|
Packit |
4b6dd7 |
* GDataCalendarService *service;
|
|
Packit |
4b6dd7 |
* GDataCalendarEvent *event, *new_event;
|
|
Packit |
4b6dd7 |
* GDataGDWhere *where;
|
|
Packit |
4b6dd7 |
* GDataGDWho *who;
|
|
Packit |
4b6dd7 |
* GDataGDWhen *when;
|
|
Packit |
4b6dd7 |
* GTimeVal current_time;
|
|
Packit |
4b6dd7 |
* GError *error = NULL;
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* /* Create a service */
|
|
Packit |
4b6dd7 |
* service = create_calendar_service ();
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* /* Create the new event */
|
|
Packit |
4b6dd7 |
* event = gdata_calendar_event_new (NULL);
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* gdata_entry_set_title (GDATA_ENTRY (event), "Event Title");
|
|
Packit |
4b6dd7 |
* gdata_entry_set_content (GDATA_ENTRY (event), "Event description. This should be a few sentences long.");
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_set_status (event, GDATA_GD_EVENT_STATUS_CONFIRMED);
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* where = gdata_gd_where_new (NULL, "Description of the location", NULL);
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_add_place (event, where);
|
|
Packit |
4b6dd7 |
* g_object_unref (where);
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* who = gdata_gd_who_new (GDATA_GD_WHO_EVENT_ORGANIZER, "John Smith", "john.smith@gmail.com");
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_add_person (event, who);
|
|
Packit |
4b6dd7 |
* g_object_unref (who);
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* g_get_current_time (¤t_time);
|
|
Packit |
4b6dd7 |
* when = gdata_gd_when_new (current_time.tv_sec, current_time.tv_sec + 3600, FALSE);
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_add_time (event, when);
|
|
Packit |
4b6dd7 |
* g_object_unref (when);
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* /* Insert the event in the calendar */
|
|
Packit |
4b6dd7 |
* new_event = gdata_calendar_service_insert_event (service, event, NULL, &error);
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* g_object_unref (event);
|
|
Packit |
4b6dd7 |
* g_object_unref (service);
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* if (error != NULL) {
|
|
Packit |
4b6dd7 |
* g_error ("Error inserting event: %s", error->message);
|
|
Packit |
4b6dd7 |
* g_error_free (error);
|
|
Packit |
4b6dd7 |
* return NULL;
|
|
Packit |
4b6dd7 |
* }
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* /* Do something with the new_event here, such as return it to the user or store its ID for later usage */
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* g_object_unref (new_event);
|
|
Packit |
4b6dd7 |
* </programlisting>
|
|
Packit |
4b6dd7 |
* </example>
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
#include <config.h>
|
|
Packit |
4b6dd7 |
#include <glib.h>
|
|
Packit |
4b6dd7 |
#include <glib/gi18n-lib.h>
|
|
Packit |
4b6dd7 |
#include <string.h>
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
#include "gdata-calendar-event.h"
|
|
Packit |
4b6dd7 |
#include "gdata-private.h"
|
|
Packit |
4b6dd7 |
#include "gdata-service.h"
|
|
Packit |
4b6dd7 |
#include "gdata-parser.h"
|
|
Packit |
4b6dd7 |
#include "gdata-types.h"
|
|
Packit |
4b6dd7 |
#include "gdata-comparable.h"
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static GObject *gdata_calendar_event_constructor (GType type, guint n_construct_params, GObjectConstructParam *construct_params);
|
|
Packit |
4b6dd7 |
static void gdata_calendar_event_dispose (GObject *object);
|
|
Packit |
4b6dd7 |
static void gdata_calendar_event_finalize (GObject *object);
|
|
Packit |
4b6dd7 |
static void gdata_calendar_event_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec);
|
|
Packit |
4b6dd7 |
static void gdata_calendar_event_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec);
|
|
Packit |
4b6dd7 |
static void get_json (GDataParsable *parsable, JsonBuilder *builder);
|
|
Packit |
4b6dd7 |
static gboolean parse_json (GDataParsable *parsable, JsonReader *reader, gpointer user_data, GError **error);
|
|
Packit |
4b6dd7 |
static gboolean post_parse_json (GDataParsable *parsable, gpointer user_data, GError **error);
|
|
Packit |
4b6dd7 |
static const gchar *get_content_type (void);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
struct _GDataCalendarEventPrivate {
|
|
Packit |
4b6dd7 |
gint64 edited;
|
|
Packit |
4b6dd7 |
gchar *status;
|
|
Packit |
4b6dd7 |
gchar *visibility;
|
|
Packit |
4b6dd7 |
gchar *transparency;
|
|
Packit |
4b6dd7 |
gchar *uid;
|
|
Packit |
4b6dd7 |
gint64 sequence;
|
|
Packit |
4b6dd7 |
GList *times; /* GDataGDWhen */
|
|
Packit |
4b6dd7 |
gboolean guests_can_modify;
|
|
Packit |
4b6dd7 |
gboolean guests_can_invite_others;
|
|
Packit |
4b6dd7 |
gboolean guests_can_see_guests;
|
|
Packit |
4b6dd7 |
gboolean anyone_can_add_self;
|
|
Packit |
4b6dd7 |
GList *people; /* GDataGDWho */
|
|
Packit |
4b6dd7 |
GList *places; /* GDataGDWhere */
|
|
Packit |
4b6dd7 |
gchar *recurrence;
|
|
Packit |
4b6dd7 |
gchar *original_event_id;
|
|
Packit |
4b6dd7 |
gchar *original_event_uri;
|
|
Packit |
4b6dd7 |
gchar *organiser_email; /* owned */
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Parsing state. */
|
|
Packit |
4b6dd7 |
struct {
|
|
Packit |
4b6dd7 |
gint64 start_time;
|
|
Packit |
4b6dd7 |
gint64 end_time;
|
|
Packit |
4b6dd7 |
gboolean seen_start;
|
|
Packit |
4b6dd7 |
gboolean seen_end;
|
|
Packit |
4b6dd7 |
gboolean start_is_date;
|
|
Packit |
4b6dd7 |
gboolean end_is_date;
|
|
Packit |
4b6dd7 |
} parser;
|
|
Packit |
4b6dd7 |
};
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
enum {
|
|
Packit |
4b6dd7 |
PROP_EDITED = 1,
|
|
Packit |
4b6dd7 |
PROP_STATUS,
|
|
Packit |
4b6dd7 |
PROP_VISIBILITY,
|
|
Packit |
4b6dd7 |
PROP_TRANSPARENCY,
|
|
Packit |
4b6dd7 |
PROP_UID,
|
|
Packit |
4b6dd7 |
PROP_SEQUENCE,
|
|
Packit |
4b6dd7 |
PROP_GUESTS_CAN_MODIFY,
|
|
Packit |
4b6dd7 |
PROP_GUESTS_CAN_INVITE_OTHERS,
|
|
Packit |
4b6dd7 |
PROP_GUESTS_CAN_SEE_GUESTS,
|
|
Packit |
4b6dd7 |
PROP_ANYONE_CAN_ADD_SELF,
|
|
Packit |
4b6dd7 |
PROP_RECURRENCE,
|
|
Packit |
4b6dd7 |
PROP_ORIGINAL_EVENT_ID,
|
|
Packit |
4b6dd7 |
PROP_ORIGINAL_EVENT_URI
|
|
Packit |
4b6dd7 |
};
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
G_DEFINE_TYPE (GDataCalendarEvent, gdata_calendar_event, GDATA_TYPE_ENTRY)
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static void
|
|
Packit |
4b6dd7 |
gdata_calendar_event_class_init (GDataCalendarEventClass *klass)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
|
Packit |
4b6dd7 |
GDataParsableClass *parsable_class = GDATA_PARSABLE_CLASS (klass);
|
|
Packit |
4b6dd7 |
GDataEntryClass *entry_class = GDATA_ENTRY_CLASS (klass);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_type_class_add_private (klass, sizeof (GDataCalendarEventPrivate));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
gobject_class->constructor = gdata_calendar_event_constructor;
|
|
Packit |
4b6dd7 |
gobject_class->get_property = gdata_calendar_event_get_property;
|
|
Packit |
4b6dd7 |
gobject_class->set_property = gdata_calendar_event_set_property;
|
|
Packit |
4b6dd7 |
gobject_class->dispose = gdata_calendar_event_dispose;
|
|
Packit |
4b6dd7 |
gobject_class->finalize = gdata_calendar_event_finalize;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
parsable_class->parse_json = parse_json;
|
|
Packit |
4b6dd7 |
parsable_class->post_parse_json = post_parse_json;
|
|
Packit |
4b6dd7 |
parsable_class->get_json = get_json;
|
|
Packit |
4b6dd7 |
parsable_class->get_content_type = get_content_type;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
entry_class->kind_term = "calendar#event";
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* GDataCalendarEvent:edited:
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* The last time the event was edited. If the event has not been edited yet, the content indicates the time it was created.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* For more information, see the <ulink type="http" url="http://www.atomenabled.org/developers/protocol/#appEdited">
|
|
Packit |
4b6dd7 |
* Atom Publishing Protocol specification</ulink>.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
g_object_class_install_property (gobject_class, PROP_EDITED,
|
|
Packit |
4b6dd7 |
g_param_spec_int64 ("edited",
|
|
Packit |
4b6dd7 |
"Edited", "The last time the event was edited.",
|
|
Packit |
4b6dd7 |
-1, G_MAXINT64, -1,
|
|
Packit |
4b6dd7 |
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* GDataCalendarEvent:status:
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* The scheduling status of the event. For example: %GDATA_GD_EVENT_STATUS_CANCELED or %GDATA_GD_EVENT_STATUS_CONFIRMED.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* For more information, see the <ulink type="http" url="http://code.google.com/apis/gdata/elements.html#gdEventStatus">
|
|
Packit |
4b6dd7 |
* GData specification</ulink>.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.2.0
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
g_object_class_install_property (gobject_class, PROP_STATUS,
|
|
Packit |
4b6dd7 |
g_param_spec_string ("status",
|
|
Packit |
4b6dd7 |
"Status", "The scheduling status of the event.",
|
|
Packit |
4b6dd7 |
NULL,
|
|
Packit |
4b6dd7 |
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* GDataCalendarEvent:visibility:
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* The event's visibility to calendar users. For example: %GDATA_GD_EVENT_VISIBILITY_PUBLIC or %GDATA_GD_EVENT_VISIBILITY_DEFAULT.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* For more information, see the <ulink type="http" url="http://code.google.com/apis/gdata/elements.html#gdVisibility">
|
|
Packit |
4b6dd7 |
* GData specification</ulink>.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
g_object_class_install_property (gobject_class, PROP_VISIBILITY,
|
|
Packit |
4b6dd7 |
g_param_spec_string ("visibility",
|
|
Packit |
4b6dd7 |
"Visibility", "The event's visibility to calendar users.",
|
|
Packit |
4b6dd7 |
NULL,
|
|
Packit |
4b6dd7 |
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* GDataCalendarEvent:transparency:
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* How the event is marked as consuming time on a calendar. For example: %GDATA_GD_EVENT_TRANSPARENCY_OPAQUE or
|
|
Packit |
4b6dd7 |
* %GDATA_GD_EVENT_TRANSPARENCY_TRANSPARENT.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* For more information, see the <ulink type="http" url="http://code.google.com/apis/gdata/elements.html#gdTransparency">
|
|
Packit |
4b6dd7 |
* GData specification</ulink>.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
g_object_class_install_property (gobject_class, PROP_TRANSPARENCY,
|
|
Packit |
4b6dd7 |
g_param_spec_string ("transparency",
|
|
Packit |
4b6dd7 |
"Transparency", "How the event is marked as consuming time on a calendar.",
|
|
Packit |
4b6dd7 |
NULL,
|
|
Packit |
4b6dd7 |
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* GDataCalendarEvent:uid:
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* The globally unique identifier (UID) of the event as defined in Section 4.8.4.7 of
|
|
Packit |
4b6dd7 |
* url="http://www.ietf.org/rfc/rfc2445.txt">RFC 2445</ulink>.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
g_object_class_install_property (gobject_class, PROP_UID,
|
|
Packit |
4b6dd7 |
g_param_spec_string ("uid",
|
|
Packit |
4b6dd7 |
"UID", "The globally unique identifier (UID) of the event.",
|
|
Packit |
4b6dd7 |
NULL,
|
|
Packit |
4b6dd7 |
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* GDataCalendarEvent:sequence:
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* The revision sequence number of the event as defined in Section 4.8.7.4 of
|
|
Packit |
4b6dd7 |
* url="http://www.ietf.org/rfc/rfc2445.txt">RFC 2445</ulink>.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
g_object_class_install_property (gobject_class, PROP_SEQUENCE,
|
|
Packit |
4b6dd7 |
g_param_spec_uint ("sequence",
|
|
Packit |
4b6dd7 |
"Sequence", "The revision sequence number of the event.",
|
|
Packit |
4b6dd7 |
0, G_MAXUINT, 0,
|
|
Packit |
4b6dd7 |
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* GDataCalendarEvent:guests-can-modify:
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Indicates whether attendees may modify the original event, so that changes are visible to organizers and other attendees.
|
|
Packit |
4b6dd7 |
* Otherwise, any changes made by attendees will be restricted to that attendee's calendar.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* For more information, see the
|
|
Packit |
4b6dd7 |
* <ulink type="http" url="https://developers.google.com/google-apps/calendar/v3/reference/events#guestsCanInviteOthers">
|
|
Packit |
4b6dd7 |
* GData specification</ulink>.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
g_object_class_install_property (gobject_class, PROP_GUESTS_CAN_MODIFY,
|
|
Packit |
4b6dd7 |
g_param_spec_boolean ("guests-can-modify",
|
|
Packit |
4b6dd7 |
"Guests can modify", "Indicates whether attendees may modify the original event.",
|
|
Packit |
4b6dd7 |
FALSE,
|
|
Packit |
4b6dd7 |
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* GDataCalendarEvent:guests-can-invite-others:
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Indicates whether attendees may invite others to the event.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* For more information, see the
|
|
Packit |
4b6dd7 |
* url="https://developers.google.com/google-apps/calendar/v3/reference/events#guestsCanInviteOthers">GData specification</ulink>.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
g_object_class_install_property (gobject_class, PROP_GUESTS_CAN_INVITE_OTHERS,
|
|
Packit |
4b6dd7 |
g_param_spec_boolean ("guests-can-invite-others",
|
|
Packit |
4b6dd7 |
"Guests can invite others", "Indicates whether attendees may invite others.",
|
|
Packit |
4b6dd7 |
FALSE,
|
|
Packit |
4b6dd7 |
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* GDataCalendarEvent:guests-can-see-guests:
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Indicates whether attendees can see other people invited to the event.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* For more information, see the
|
|
Packit |
4b6dd7 |
* <ulink type="http" url="https://developers.google.com/google-apps/calendar/v3/reference/events#guestsCanSeeOtherGuests">
|
|
Packit |
4b6dd7 |
* GData specification</ulink>.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
g_object_class_install_property (gobject_class, PROP_GUESTS_CAN_SEE_GUESTS,
|
|
Packit |
4b6dd7 |
g_param_spec_boolean ("guests-can-see-guests",
|
|
Packit |
4b6dd7 |
"Guests can see guests", "Indicates whether attendees can see other people invited.",
|
|
Packit |
4b6dd7 |
FALSE,
|
|
Packit |
4b6dd7 |
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* GDataCalendarEvent:anyone-can-add-self:
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Indicates whether anyone can invite themselves to the event, by adding themselves to the attendee list.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
g_object_class_install_property (gobject_class, PROP_ANYONE_CAN_ADD_SELF,
|
|
Packit |
4b6dd7 |
g_param_spec_boolean ("anyone-can-add-self",
|
|
Packit |
4b6dd7 |
"Anyone can add self", "Indicates whether anyone can invite themselves to the event.",
|
|
Packit |
4b6dd7 |
FALSE,
|
|
Packit |
4b6dd7 |
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* GDataCalendarEvent:recurrence:
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Represents the dates and times when a recurring event takes place. The returned string is in iCal format, as a list of properties.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* For more information, see the <ulink type="http" url="http://code.google.com/apis/gdata/elements.html#gdRecurrence">
|
|
Packit |
4b6dd7 |
* GData specification</ulink>.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Note: gdata_calendar_event_add_time() and gdata_calendar_event_set_recurrence() are mutually
|
|
Packit |
4b6dd7 |
* exclusive. See the documentation for gdata_calendar_event_add_time() for details.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.3.0
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
g_object_class_install_property (gobject_class, PROP_RECURRENCE,
|
|
Packit |
4b6dd7 |
g_param_spec_string ("recurrence",
|
|
Packit |
4b6dd7 |
"Recurrence", "Represents the dates and times when a recurring event takes place.",
|
|
Packit |
4b6dd7 |
NULL,
|
|
Packit |
4b6dd7 |
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* GDataCalendarEvent:original-event-id:
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* The event ID for the original event, if this event is an exception to a recurring event.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.3.0
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
g_object_class_install_property (gobject_class, PROP_ORIGINAL_EVENT_ID,
|
|
Packit |
4b6dd7 |
g_param_spec_string ("original-event-id",
|
|
Packit |
4b6dd7 |
"Original event ID", "The event ID for the original event.",
|
|
Packit |
4b6dd7 |
NULL,
|
|
Packit |
4b6dd7 |
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* GDataCalendarEvent:original-event-uri:
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* The event URI for the original event, if this event is an exception to a recurring event.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.3.0
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
g_object_class_install_property (gobject_class, PROP_ORIGINAL_EVENT_URI,
|
|
Packit |
4b6dd7 |
g_param_spec_string ("original-event-uri",
|
|
Packit |
4b6dd7 |
"Original event URI", "The event URI for the original event.",
|
|
Packit |
4b6dd7 |
NULL,
|
|
Packit |
4b6dd7 |
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static void
|
|
Packit |
4b6dd7 |
gdata_calendar_event_init (GDataCalendarEvent *self)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GDATA_TYPE_CALENDAR_EVENT, GDataCalendarEventPrivate);
|
|
Packit |
4b6dd7 |
self->priv->edited = -1;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static GObject *
|
|
Packit |
4b6dd7 |
gdata_calendar_event_constructor (GType type, guint n_construct_params, GObjectConstructParam *construct_params)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
GObject *object;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Chain up to the parent class */
|
|
Packit |
4b6dd7 |
object = G_OBJECT_CLASS (gdata_calendar_event_parent_class)->constructor (type, n_construct_params, construct_params);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (_gdata_parsable_is_constructed_from_xml (GDATA_PARSABLE (object)) == FALSE) {
|
|
Packit |
4b6dd7 |
GDataCalendarEventPrivate *priv = GDATA_CALENDAR_EVENT (object)->priv;
|
|
Packit |
4b6dd7 |
GTimeVal time_val;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Set the edited property to the current time (creation time). We don't do this in *_init() since that would cause
|
|
Packit |
4b6dd7 |
* setting it from parse_xml() to fail (duplicate element). */
|
|
Packit |
4b6dd7 |
g_get_current_time (&time_val);
|
|
Packit |
4b6dd7 |
priv->edited = time_val.tv_sec;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
return object;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static void
|
|
Packit |
4b6dd7 |
gdata_calendar_event_dispose (GObject *object)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
GDataCalendarEventPrivate *priv = GDATA_CALENDAR_EVENT (object)->priv;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (priv->times != NULL) {
|
|
Packit |
4b6dd7 |
g_list_foreach (priv->times, (GFunc) g_object_unref, NULL);
|
|
Packit |
4b6dd7 |
g_list_free (priv->times);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
priv->times = NULL;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (priv->people != NULL) {
|
|
Packit |
4b6dd7 |
g_list_foreach (priv->people, (GFunc) g_object_unref, NULL);
|
|
Packit |
4b6dd7 |
g_list_free (priv->people);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
priv->people = NULL;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (priv->places != NULL) {
|
|
Packit |
4b6dd7 |
g_list_foreach (priv->places, (GFunc) g_object_unref, NULL);
|
|
Packit |
4b6dd7 |
g_list_free (priv->places);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
priv->places = NULL;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Chain up to the parent class */
|
|
Packit |
4b6dd7 |
G_OBJECT_CLASS (gdata_calendar_event_parent_class)->dispose (object);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static void
|
|
Packit |
4b6dd7 |
gdata_calendar_event_finalize (GObject *object)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
GDataCalendarEventPrivate *priv = GDATA_CALENDAR_EVENT (object)->priv;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_free (priv->status);
|
|
Packit |
4b6dd7 |
g_free (priv->visibility);
|
|
Packit |
4b6dd7 |
g_free (priv->transparency);
|
|
Packit |
4b6dd7 |
g_free (priv->uid);
|
|
Packit |
4b6dd7 |
g_free (priv->recurrence);
|
|
Packit |
4b6dd7 |
g_free (priv->original_event_id);
|
|
Packit |
4b6dd7 |
g_free (priv->original_event_uri);
|
|
Packit |
4b6dd7 |
g_free (priv->organiser_email);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Chain up to the parent class */
|
|
Packit |
4b6dd7 |
G_OBJECT_CLASS (gdata_calendar_event_parent_class)->finalize (object);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static void
|
|
Packit |
4b6dd7 |
gdata_calendar_event_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
GDataCalendarEventPrivate *priv = GDATA_CALENDAR_EVENT (object)->priv;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
switch (property_id) {
|
|
Packit |
4b6dd7 |
case PROP_EDITED:
|
|
Packit |
4b6dd7 |
g_value_set_int64 (value, priv->edited);
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
case PROP_STATUS:
|
|
Packit |
4b6dd7 |
g_value_set_string (value, priv->status);
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
case PROP_VISIBILITY:
|
|
Packit |
4b6dd7 |
g_value_set_string (value, priv->visibility);
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
case PROP_TRANSPARENCY:
|
|
Packit |
4b6dd7 |
g_value_set_string (value, priv->transparency);
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
case PROP_UID:
|
|
Packit |
4b6dd7 |
g_value_set_string (value, priv->uid);
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
case PROP_SEQUENCE:
|
|
Packit |
4b6dd7 |
g_value_set_uint (value, CLAMP (priv->sequence, 0, G_MAXUINT));
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
case PROP_GUESTS_CAN_MODIFY:
|
|
Packit |
4b6dd7 |
g_value_set_boolean (value, priv->guests_can_modify);
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
case PROP_GUESTS_CAN_INVITE_OTHERS:
|
|
Packit |
4b6dd7 |
g_value_set_boolean (value, priv->guests_can_invite_others);
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
case PROP_GUESTS_CAN_SEE_GUESTS:
|
|
Packit |
4b6dd7 |
g_value_set_boolean (value, priv->guests_can_see_guests);
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
case PROP_ANYONE_CAN_ADD_SELF:
|
|
Packit |
4b6dd7 |
g_value_set_boolean (value, priv->anyone_can_add_self);
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
case PROP_RECURRENCE:
|
|
Packit |
4b6dd7 |
g_value_set_string (value, priv->recurrence);
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
case PROP_ORIGINAL_EVENT_ID:
|
|
Packit |
4b6dd7 |
g_value_set_string (value, priv->original_event_id);
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
case PROP_ORIGINAL_EVENT_URI:
|
|
Packit |
4b6dd7 |
g_value_set_string (value, priv->original_event_uri);
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
default:
|
|
Packit |
4b6dd7 |
/* We don't have any other property... */
|
|
Packit |
4b6dd7 |
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static void
|
|
Packit |
4b6dd7 |
gdata_calendar_event_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
GDataCalendarEvent *self = GDATA_CALENDAR_EVENT (object);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
switch (property_id) {
|
|
Packit |
4b6dd7 |
case PROP_STATUS:
|
|
Packit |
4b6dd7 |
gdata_calendar_event_set_status (self, g_value_get_string (value));
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
case PROP_VISIBILITY:
|
|
Packit |
4b6dd7 |
gdata_calendar_event_set_visibility (self, g_value_get_string (value));
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
case PROP_TRANSPARENCY:
|
|
Packit |
4b6dd7 |
gdata_calendar_event_set_transparency (self, g_value_get_string (value));
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
case PROP_UID:
|
|
Packit |
4b6dd7 |
gdata_calendar_event_set_uid (self, g_value_get_string (value));
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
case PROP_SEQUENCE:
|
|
Packit |
4b6dd7 |
gdata_calendar_event_set_sequence (self, g_value_get_uint (value));
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
case PROP_GUESTS_CAN_MODIFY:
|
|
Packit |
4b6dd7 |
gdata_calendar_event_set_guests_can_modify (self, g_value_get_boolean (value));
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
case PROP_GUESTS_CAN_INVITE_OTHERS:
|
|
Packit |
4b6dd7 |
gdata_calendar_event_set_guests_can_invite_others (self, g_value_get_boolean (value));
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
case PROP_GUESTS_CAN_SEE_GUESTS:
|
|
Packit |
4b6dd7 |
gdata_calendar_event_set_guests_can_see_guests (self, g_value_get_boolean (value));
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
case PROP_ANYONE_CAN_ADD_SELF:
|
|
Packit |
4b6dd7 |
gdata_calendar_event_set_anyone_can_add_self (self, g_value_get_boolean (value));
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
case PROP_RECURRENCE:
|
|
Packit |
4b6dd7 |
gdata_calendar_event_set_recurrence (self, g_value_get_string (value));
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
default:
|
|
Packit |
4b6dd7 |
/* We don't have any other property... */
|
|
Packit |
4b6dd7 |
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static gboolean
|
|
Packit |
4b6dd7 |
date_object_from_json (JsonReader *reader,
|
|
Packit |
4b6dd7 |
const gchar *member_name,
|
|
Packit |
4b6dd7 |
GDataParserOptions options,
|
|
Packit |
4b6dd7 |
gint64 *date_time_output,
|
|
Packit |
4b6dd7 |
gboolean *is_date_output,
|
|
Packit |
4b6dd7 |
gboolean *success,
|
|
Packit |
4b6dd7 |
GError **error)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
gint64 date_time;
|
|
Packit |
4b6dd7 |
gboolean is_date = FALSE;
|
|
Packit |
4b6dd7 |
gboolean found_member = FALSE;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Check if there’s such an element */
|
|
Packit |
4b6dd7 |
if (g_strcmp0 (json_reader_get_member_name (reader), member_name) != 0) {
|
|
Packit |
4b6dd7 |
return FALSE;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Check that it’s an object. */
|
|
Packit |
4b6dd7 |
if (!json_reader_is_object (reader)) {
|
|
Packit |
4b6dd7 |
const GError *child_error;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Manufacture an error. */
|
|
Packit |
4b6dd7 |
json_reader_read_member (reader, "dateTime");
|
|
Packit |
4b6dd7 |
child_error = json_reader_get_error (reader);
|
|
Packit |
4b6dd7 |
g_assert (child_error != NULL);
|
|
Packit |
4b6dd7 |
*success = gdata_parser_error_from_json_error (reader,
|
|
Packit |
4b6dd7 |
child_error,
|
|
Packit |
4b6dd7 |
error);
|
|
Packit |
4b6dd7 |
json_reader_end_member (reader);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
return TRUE;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Try to parse either the dateTime or date member. */
|
|
Packit |
4b6dd7 |
if (json_reader_read_member (reader, "dateTime")) {
|
|
Packit |
4b6dd7 |
const gchar *date_string;
|
|
Packit |
4b6dd7 |
const GError *child_error;
|
|
Packit |
4b6dd7 |
GTimeVal time_val;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
date_string = json_reader_get_string_value (reader);
|
|
Packit |
4b6dd7 |
child_error = json_reader_get_error (reader);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (child_error != NULL) {
|
|
Packit |
4b6dd7 |
*success = gdata_parser_error_from_json_error (reader,
|
|
Packit |
4b6dd7 |
child_error,
|
|
Packit |
4b6dd7 |
error);
|
|
Packit |
4b6dd7 |
json_reader_end_member (reader);
|
|
Packit |
4b6dd7 |
return TRUE;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (!g_time_val_from_iso8601 (date_string, &time_val)) {
|
|
Packit |
4b6dd7 |
*success = gdata_parser_error_not_iso8601_format_json (reader, date_string, error);
|
|
Packit |
4b6dd7 |
json_reader_end_member (reader);
|
|
Packit |
4b6dd7 |
return TRUE;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
date_time = time_val.tv_sec;
|
|
Packit |
4b6dd7 |
is_date = FALSE;
|
|
Packit |
4b6dd7 |
found_member = TRUE;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
json_reader_end_member (reader);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (json_reader_read_member (reader, "date")) {
|
|
Packit |
4b6dd7 |
const gchar *date_string;
|
|
Packit |
4b6dd7 |
const GError *child_error;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
date_string = json_reader_get_string_value (reader);
|
|
Packit |
4b6dd7 |
child_error = json_reader_get_error (reader);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (child_error != NULL) {
|
|
Packit |
4b6dd7 |
*success = gdata_parser_error_from_json_error (reader,
|
|
Packit |
4b6dd7 |
child_error,
|
|
Packit |
4b6dd7 |
error);
|
|
Packit |
4b6dd7 |
json_reader_end_member (reader);
|
|
Packit |
4b6dd7 |
return TRUE;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (!gdata_parser_int64_from_date (date_string, &date_time)) {
|
|
Packit |
4b6dd7 |
*success = gdata_parser_error_not_iso8601_format_json (reader, date_string, error);
|
|
Packit |
4b6dd7 |
json_reader_end_member (reader);
|
|
Packit |
4b6dd7 |
return TRUE;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
is_date = TRUE;
|
|
Packit |
4b6dd7 |
found_member = TRUE;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
json_reader_end_member (reader);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Ignore timeZone; it should be specified in dateTime. */
|
|
Packit |
4b6dd7 |
if (!found_member) {
|
|
Packit |
4b6dd7 |
*success = gdata_parser_error_required_json_content_missing (reader, error);
|
|
Packit |
4b6dd7 |
return TRUE;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
*date_time_output = date_time;
|
|
Packit |
4b6dd7 |
*is_date_output = is_date;
|
|
Packit |
4b6dd7 |
*success = TRUE;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
return TRUE;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Convert between v2 and v3 versions of various enum values. v2 uses a URI
|
|
Packit |
4b6dd7 |
* style with a constant prefix; v3 simply drops this prefix, and changes the
|
|
Packit |
4b6dd7 |
* spelling of ‘canceled’ to ‘cancelled’. */
|
|
Packit |
4b6dd7 |
#define V2_PREFIX "http://schemas.google.com/g/2005#event."
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static gchar *
|
|
Packit |
4b6dd7 |
add_v2_prefix (const gchar *in)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
return g_strconcat (V2_PREFIX, in, NULL);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static const gchar *
|
|
Packit |
4b6dd7 |
strip_v2_prefix (const gchar *uri)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
/* Convert to v3 format. */
|
|
Packit |
4b6dd7 |
if (g_str_has_prefix (uri, V2_PREFIX)) {
|
|
Packit |
4b6dd7 |
return uri + strlen (V2_PREFIX);
|
|
Packit |
4b6dd7 |
} else {
|
|
Packit |
4b6dd7 |
return uri;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static gboolean
|
|
Packit |
4b6dd7 |
parse_json (GDataParsable *parsable, JsonReader *reader, gpointer user_data, GError **error)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
gboolean success;
|
|
Packit |
4b6dd7 |
GDataCalendarEvent *self = GDATA_CALENDAR_EVENT (parsable);
|
|
Packit |
4b6dd7 |
GDataCalendarEventPrivate *priv = self->priv;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* FIXME: Currently unsupported:
|
|
Packit |
4b6dd7 |
* - htmlLink
|
|
Packit |
4b6dd7 |
* - colorId
|
|
Packit |
4b6dd7 |
* - endTimeUnspecified
|
|
Packit |
4b6dd7 |
* - originalStartTime
|
|
Packit |
4b6dd7 |
* - attendeesOmitted
|
|
Packit |
4b6dd7 |
* - extendedProperties
|
|
Packit |
4b6dd7 |
* - hangoutLink
|
|
Packit |
4b6dd7 |
* - gadget
|
|
Packit |
4b6dd7 |
* - privateCopy
|
|
Packit |
4b6dd7 |
* - locked
|
|
Packit |
4b6dd7 |
* - reminders
|
|
Packit |
4b6dd7 |
* - source
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (g_strcmp0 (json_reader_get_member_name (reader), "start") == 0) {
|
|
Packit |
4b6dd7 |
self->priv->parser.seen_start = TRUE;
|
|
Packit |
4b6dd7 |
} else if (g_strcmp0 (json_reader_get_member_name (reader), "end") == 0) {
|
|
Packit |
4b6dd7 |
self->priv->parser.seen_end = TRUE;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (gdata_parser_string_from_json_member (reader, "recurringEventId", P_DEFAULT, &self->priv->original_event_id, &success, error) ||
|
|
Packit |
4b6dd7 |
gdata_parser_boolean_from_json_member (reader, "guestsCanModify", P_DEFAULT, &self->priv->guests_can_modify, &success, error) ||
|
|
Packit |
4b6dd7 |
gdata_parser_boolean_from_json_member (reader, "guestsCanInviteOthers", P_DEFAULT, &self->priv->guests_can_invite_others, &success, error) ||
|
|
Packit |
4b6dd7 |
gdata_parser_boolean_from_json_member (reader, "guestsCanSeeOtherGuests", P_DEFAULT, &self->priv->guests_can_see_guests, &success, error) ||
|
|
Packit |
4b6dd7 |
gdata_parser_boolean_from_json_member (reader, "anyoneCanAddSelf", P_DEFAULT, &self->priv->anyone_can_add_self, &success, error) ||
|
|
Packit |
4b6dd7 |
gdata_parser_string_from_json_member (reader, "iCalUID", P_DEFAULT, &self->priv->uid, &success, error) ||
|
|
Packit |
4b6dd7 |
gdata_parser_int_from_json_member (reader, "sequence", P_DEFAULT, &self->priv->sequence, &success, error) ||
|
|
Packit |
4b6dd7 |
gdata_parser_int64_time_from_json_member (reader, "updated", P_DEFAULT, &self->priv->edited, &success, error) ||
|
|
Packit |
4b6dd7 |
date_object_from_json (reader, "start", P_DEFAULT, &self->priv->parser.start_time, &self->priv->parser.start_is_date, &success, error) ||
|
|
Packit |
4b6dd7 |
date_object_from_json (reader, "end", P_DEFAULT, &self->priv->parser.end_time, &self->priv->parser.end_is_date, &success, error)) {
|
|
Packit |
4b6dd7 |
if (success) {
|
|
Packit |
4b6dd7 |
if (self->priv->edited != -1) {
|
|
Packit |
4b6dd7 |
_gdata_entry_set_updated (GDATA_ENTRY (parsable),
|
|
Packit |
4b6dd7 |
self->priv->edited);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (self->priv->original_event_id != NULL) {
|
|
Packit |
4b6dd7 |
g_free (self->priv->original_event_uri);
|
|
Packit |
4b6dd7 |
self->priv->original_event_uri = g_strconcat ("https://www.googleapis.com/calendar/v3/events/",
|
|
Packit |
4b6dd7 |
self->priv->original_event_id, NULL);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (self->priv->parser.seen_start && self->priv->parser.seen_end) {
|
|
Packit |
4b6dd7 |
GDataGDWhen *when;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
when = gdata_gd_when_new (self->priv->parser.start_time,
|
|
Packit |
4b6dd7 |
self->priv->parser.end_time,
|
|
Packit |
4b6dd7 |
self->priv->parser.start_is_date ||
|
|
Packit |
4b6dd7 |
self->priv->parser.end_is_date);
|
|
Packit |
4b6dd7 |
self->priv->times = g_list_prepend (self->priv->times, when); /* transfer ownership */
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
self->priv->parser.seen_start = FALSE;
|
|
Packit |
4b6dd7 |
self->priv->parser.seen_end = FALSE;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
return success;
|
|
Packit |
4b6dd7 |
} else if (g_strcmp0 (json_reader_get_member_name (reader), "transparency") == 0) {
|
|
Packit |
4b6dd7 |
gchar *transparency = NULL; /* owned */
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_assert (gdata_parser_string_from_json_member (reader,
|
|
Packit |
4b6dd7 |
"transparency",
|
|
Packit |
4b6dd7 |
P_DEFAULT,
|
|
Packit |
4b6dd7 |
&transparency,
|
|
Packit |
4b6dd7 |
&success,
|
|
Packit |
4b6dd7 |
error));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (success) {
|
|
Packit |
4b6dd7 |
priv->transparency = add_v2_prefix (transparency);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_free (transparency);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
return success;
|
|
Packit |
4b6dd7 |
} else if (g_strcmp0 (json_reader_get_member_name (reader), "visibility") == 0) {
|
|
Packit |
4b6dd7 |
gchar *visibility = NULL; /* owned */
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_assert (gdata_parser_string_from_json_member (reader,
|
|
Packit |
4b6dd7 |
"visibility",
|
|
Packit |
4b6dd7 |
P_DEFAULT,
|
|
Packit |
4b6dd7 |
&visibility,
|
|
Packit |
4b6dd7 |
&success,
|
|
Packit |
4b6dd7 |
error));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (success) {
|
|
Packit |
4b6dd7 |
priv->visibility = add_v2_prefix (visibility);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_free (visibility);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
return success;
|
|
Packit |
4b6dd7 |
} else if (g_strcmp0 (json_reader_get_member_name (reader), "status") == 0) {
|
|
Packit |
4b6dd7 |
gchar *status = NULL; /* owned */
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_assert (gdata_parser_string_from_json_member (reader,
|
|
Packit |
4b6dd7 |
"status",
|
|
Packit |
4b6dd7 |
P_DEFAULT,
|
|
Packit |
4b6dd7 |
&status,
|
|
Packit |
4b6dd7 |
&success,
|
|
Packit |
4b6dd7 |
error));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (success) {
|
|
Packit |
4b6dd7 |
if (g_strcmp0 (status, "cancelled") == 0) {
|
|
Packit |
4b6dd7 |
/* Those damned British Englishes. */
|
|
Packit |
4b6dd7 |
priv->status = add_v2_prefix ("canceled");
|
|
Packit |
4b6dd7 |
} else {
|
|
Packit |
4b6dd7 |
priv->status = add_v2_prefix (status);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_free (status);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
return success;
|
|
Packit |
4b6dd7 |
} else if (g_strcmp0 (json_reader_get_member_name (reader), "summary") == 0) {
|
|
Packit |
4b6dd7 |
const gchar *summary;
|
|
Packit |
4b6dd7 |
const GError *child_error = NULL;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
summary = json_reader_get_string_value (reader);
|
|
Packit |
4b6dd7 |
child_error = json_reader_get_error (reader);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (child_error != NULL) {
|
|
Packit |
4b6dd7 |
gdata_parser_error_from_json_error (reader,
|
|
Packit |
4b6dd7 |
child_error, error);
|
|
Packit |
4b6dd7 |
return FALSE;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
gdata_entry_set_title (GDATA_ENTRY (parsable), summary);
|
|
Packit |
4b6dd7 |
} else if (g_strcmp0 (json_reader_get_member_name (reader), "description") == 0) {
|
|
Packit |
4b6dd7 |
const gchar *description;
|
|
Packit |
4b6dd7 |
const GError *child_error = NULL;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
description = json_reader_get_string_value (reader);
|
|
Packit |
4b6dd7 |
child_error = json_reader_get_error (reader);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (child_error != NULL) {
|
|
Packit |
4b6dd7 |
gdata_parser_error_from_json_error (reader,
|
|
Packit |
4b6dd7 |
child_error, error);
|
|
Packit |
4b6dd7 |
return FALSE;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
gdata_entry_set_content (GDATA_ENTRY (parsable), description);
|
|
Packit |
4b6dd7 |
} else if (g_strcmp0 (json_reader_get_member_name (reader), "location") == 0) {
|
|
Packit |
4b6dd7 |
const gchar *location;
|
|
Packit |
4b6dd7 |
GDataGDWhere *where = NULL; /* owned */
|
|
Packit |
4b6dd7 |
const GError *child_error = NULL;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
location = json_reader_get_string_value (reader);
|
|
Packit |
4b6dd7 |
child_error = json_reader_get_error (reader);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (child_error != NULL) {
|
|
Packit |
4b6dd7 |
gdata_parser_error_from_json_error (reader,
|
|
Packit |
4b6dd7 |
child_error, error);
|
|
Packit |
4b6dd7 |
return FALSE;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
where = gdata_gd_where_new (GDATA_GD_WHERE_EVENT,
|
|
Packit |
4b6dd7 |
location, NULL);
|
|
Packit |
4b6dd7 |
priv->places = g_list_prepend (priv->places, where); /* transfer ownership */
|
|
Packit |
4b6dd7 |
} else if (g_strcmp0 (json_reader_get_member_name (reader), "created") == 0) {
|
|
Packit |
4b6dd7 |
gint64 created;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_assert (gdata_parser_int64_time_from_json_member (reader,
|
|
Packit |
4b6dd7 |
"created",
|
|
Packit |
4b6dd7 |
P_DEFAULT,
|
|
Packit |
4b6dd7 |
&created,
|
|
Packit |
4b6dd7 |
&success,
|
|
Packit |
4b6dd7 |
error));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (success) {
|
|
Packit |
4b6dd7 |
_gdata_entry_set_published (GDATA_ENTRY (parsable),
|
|
Packit |
4b6dd7 |
created);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
return success;
|
|
Packit |
4b6dd7 |
} else if (g_strcmp0 (json_reader_get_member_name (reader), "recurrence") == 0) {
|
|
Packit |
4b6dd7 |
guint i, j;
|
|
Packit |
4b6dd7 |
GString *recurrence = NULL; /* owned */
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* In the JSON API, the recurrence is given as an array of
|
|
Packit |
4b6dd7 |
* strings, each giving an RFC 2445 property such as RRULE,
|
|
Packit |
4b6dd7 |
* EXRULE, RDATE or EXDATE. Concatenate them all to form a
|
|
Packit |
4b6dd7 |
* recurrence string as used in v2 of the API. */
|
|
Packit |
4b6dd7 |
if (self->priv->recurrence != NULL) {
|
|
Packit |
4b6dd7 |
return gdata_parser_error_duplicate_json_element (reader,
|
|
Packit |
4b6dd7 |
error);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
recurrence = g_string_new ("");
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
for (i = 0, j = json_reader_count_elements (reader); i < j; i++) {
|
|
Packit |
4b6dd7 |
const gchar *line;
|
|
Packit |
4b6dd7 |
const GError *child_error;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
json_reader_read_element (reader, i);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
line = json_reader_get_string_value (reader);
|
|
Packit |
4b6dd7 |
child_error = json_reader_get_error (reader);
|
|
Packit |
4b6dd7 |
if (child_error != NULL) {
|
|
Packit |
4b6dd7 |
gdata_parser_error_from_json_error (reader, child_error, error);
|
|
Packit |
4b6dd7 |
json_reader_end_element (reader);
|
|
Packit |
4b6dd7 |
return FALSE;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_string_append (recurrence, line);
|
|
Packit |
4b6dd7 |
g_string_append (recurrence, "\n");
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
json_reader_end_element (reader);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_assert (self->priv->recurrence == NULL);
|
|
Packit |
4b6dd7 |
self->priv->recurrence = g_string_free (recurrence, FALSE);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
return TRUE;
|
|
Packit |
4b6dd7 |
} else if (g_strcmp0 (json_reader_get_member_name (reader), "attendees") == 0) {
|
|
Packit |
4b6dd7 |
guint i, j;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (priv->people != NULL) {
|
|
Packit |
4b6dd7 |
return gdata_parser_error_duplicate_json_element (reader,
|
|
Packit |
4b6dd7 |
error);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
for (i = 0, j = json_reader_count_elements (reader); i < j; i++) {
|
|
Packit |
4b6dd7 |
GDataGDWho *who = NULL; /* owned */
|
|
Packit |
4b6dd7 |
const gchar *email_address, *value_string;
|
|
Packit |
4b6dd7 |
const gchar *relation_type;
|
|
Packit |
4b6dd7 |
gboolean is_organizer, is_resource;
|
|
Packit |
4b6dd7 |
const GError *child_error;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
json_reader_read_element (reader, i);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
json_reader_read_member (reader, "responseStatus");
|
|
Packit |
4b6dd7 |
child_error = json_reader_get_error (reader);
|
|
Packit |
4b6dd7 |
if (child_error != NULL) {
|
|
Packit |
4b6dd7 |
gdata_parser_error_from_json_error (reader,
|
|
Packit |
4b6dd7 |
child_error,
|
|
Packit |
4b6dd7 |
error);
|
|
Packit |
4b6dd7 |
json_reader_end_member (reader);
|
|
Packit |
4b6dd7 |
return FALSE;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
json_reader_end_member (reader);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
json_reader_read_member (reader, "email");
|
|
Packit |
4b6dd7 |
email_address = json_reader_get_string_value (reader);
|
|
Packit |
4b6dd7 |
json_reader_end_member (reader);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
json_reader_read_member (reader, "displayName");
|
|
Packit |
4b6dd7 |
value_string = json_reader_get_string_value (reader);
|
|
Packit |
4b6dd7 |
json_reader_end_member (reader);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
json_reader_read_member (reader, "organizer");
|
|
Packit |
4b6dd7 |
is_organizer = json_reader_get_boolean_value (reader);
|
|
Packit |
4b6dd7 |
json_reader_end_member (reader);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
json_reader_read_member (reader, "resource");
|
|
Packit |
4b6dd7 |
is_resource = json_reader_get_boolean_value (reader);
|
|
Packit |
4b6dd7 |
json_reader_end_member (reader);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* FIXME: Currently unsupported:
|
|
Packit |
4b6dd7 |
* - id
|
|
Packit |
4b6dd7 |
* - self
|
|
Packit |
4b6dd7 |
* - optional (writeble)
|
|
Packit |
4b6dd7 |
* - responseStatus (writeble)
|
|
Packit |
4b6dd7 |
* - comment (writeble)
|
|
Packit |
4b6dd7 |
* - additionalGuests (writeble)
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (is_organizer) {
|
|
Packit |
4b6dd7 |
relation_type = GDATA_GD_WHO_EVENT_ORGANIZER;
|
|
Packit |
4b6dd7 |
} else if (!is_resource) {
|
|
Packit |
4b6dd7 |
relation_type = GDATA_GD_WHO_EVENT_ATTENDEE;
|
|
Packit |
4b6dd7 |
} else {
|
|
Packit |
4b6dd7 |
/* FIXME: Add support for resources. */
|
|
Packit |
4b6dd7 |
relation_type = NULL;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
who = gdata_gd_who_new (relation_type, value_string,
|
|
Packit |
4b6dd7 |
email_address);
|
|
Packit |
4b6dd7 |
priv->people = g_list_prepend (priv->people, who); /* transfer ownership */
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
json_reader_end_element (reader);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
} else if (g_strcmp0 (json_reader_get_member_name (reader), "organizer") == 0) {
|
|
Packit |
4b6dd7 |
/* This actually gives the parent calendar. Optional. */
|
|
Packit |
4b6dd7 |
g_clear_pointer (&priv->organiser_email, g_free);
|
|
Packit |
4b6dd7 |
if (json_reader_read_member (reader, "email"))
|
|
Packit |
4b6dd7 |
priv->organiser_email = g_strdup (json_reader_get_string_value (reader));
|
|
Packit |
4b6dd7 |
json_reader_end_member (reader);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
return TRUE;
|
|
Packit |
4b6dd7 |
} else if (g_strcmp0 (json_reader_get_member_name (reader), "creator") == 0) {
|
|
Packit |
4b6dd7 |
/* These are read-only and already handled as part of
|
|
Packit |
4b6dd7 |
* ‘attendees’, so ignore them. */
|
|
Packit |
4b6dd7 |
return TRUE;
|
|
Packit |
4b6dd7 |
} else {
|
|
Packit |
4b6dd7 |
return GDATA_PARSABLE_CLASS (gdata_calendar_event_parent_class)->parse_json (parsable, reader, user_data, error);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
return TRUE;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static gboolean
|
|
Packit |
4b6dd7 |
post_parse_json (GDataParsable *parsable, gpointer user_data, GError **error)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
GDataLink *_link = NULL; /* owned */
|
|
Packit |
4b6dd7 |
const gchar *id, *calendar_id;
|
|
Packit |
4b6dd7 |
gchar *uri = NULL; /* owned */
|
|
Packit |
4b6dd7 |
GDataCalendarEventPrivate *priv;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
priv = GDATA_CALENDAR_EVENT (parsable)->priv;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Set the self link, which is needed for gdata_service_delete_entry().
|
|
Packit |
4b6dd7 |
* Unfortunately, it needs the event ID _and_ the calendar ID — which
|
|
Packit |
4b6dd7 |
* is perversely only available as the organiser e-mail address. */
|
|
Packit |
4b6dd7 |
id = gdata_entry_get_id (GDATA_ENTRY (parsable));
|
|
Packit |
4b6dd7 |
calendar_id = priv->organiser_email;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (id == NULL || calendar_id == NULL) {
|
|
Packit |
4b6dd7 |
return TRUE;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
uri = g_strconcat ("https://www.googleapis.com/calendar/v3/calendars/",
|
|
Packit |
4b6dd7 |
calendar_id, "/events/", id, NULL);
|
|
Packit |
4b6dd7 |
_link = gdata_link_new (uri, GDATA_LINK_SELF);
|
|
Packit |
4b6dd7 |
gdata_entry_add_link (GDATA_ENTRY (parsable), _link);
|
|
Packit |
4b6dd7 |
g_object_unref (_link);
|
|
Packit |
4b6dd7 |
g_free (uri);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
return TRUE;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static void
|
|
Packit |
4b6dd7 |
get_json (GDataParsable *parsable, JsonBuilder *builder)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
GList *l;
|
|
Packit |
4b6dd7 |
const gchar *id, *etag, *title, *description;
|
|
Packit |
4b6dd7 |
GDataGDWho *organiser_who = NULL; /* unowned */
|
|
Packit |
4b6dd7 |
GDataCalendarEventPrivate *priv = GDATA_CALENDAR_EVENT (parsable)->priv;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* FIXME: Support:
|
|
Packit |
4b6dd7 |
* - colorId
|
|
Packit |
4b6dd7 |
* - attendeesOmitted
|
|
Packit |
4b6dd7 |
* - extendedProperties
|
|
Packit |
4b6dd7 |
* - gadget
|
|
Packit |
4b6dd7 |
* - reminders
|
|
Packit |
4b6dd7 |
* - source
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
id = gdata_entry_get_id (GDATA_ENTRY (parsable));
|
|
Packit |
4b6dd7 |
if (id != NULL) {
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, "id");
|
|
Packit |
4b6dd7 |
json_builder_add_string_value (builder, id);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, "kind");
|
|
Packit |
4b6dd7 |
json_builder_add_string_value (builder, "calendar#event");
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Add the ETag, if available. */
|
|
Packit |
4b6dd7 |
etag = gdata_entry_get_etag (GDATA_ENTRY (parsable));
|
|
Packit |
4b6dd7 |
if (etag != NULL) {
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, "etag");
|
|
Packit |
4b6dd7 |
json_builder_add_string_value (builder, etag);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Calendar labels titles as ‘summary’. */
|
|
Packit |
4b6dd7 |
title = gdata_entry_get_title (GDATA_ENTRY (parsable));
|
|
Packit |
4b6dd7 |
if (title != NULL) {
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, "summary");
|
|
Packit |
4b6dd7 |
json_builder_add_string_value (builder, title);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
description = gdata_entry_get_content (GDATA_ENTRY (parsable));
|
|
Packit |
4b6dd7 |
if (description != NULL) {
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, "description");
|
|
Packit |
4b6dd7 |
json_builder_add_string_value (builder, description);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Add all the calendar-specific JSON */
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, "anyoneCanAddSelf");
|
|
Packit |
4b6dd7 |
json_builder_add_boolean_value (builder, priv->anyone_can_add_self);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, "guestsCanInviteOthers");
|
|
Packit |
4b6dd7 |
json_builder_add_boolean_value (builder, priv->guests_can_invite_others);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, "guestsCanModify");
|
|
Packit |
4b6dd7 |
json_builder_add_boolean_value (builder, priv->guests_can_modify);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, "guestsCanSeeOtherGuests");
|
|
Packit |
4b6dd7 |
json_builder_add_boolean_value (builder, priv->guests_can_see_guests);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (priv->transparency != NULL) {
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, "transparency");
|
|
Packit |
4b6dd7 |
json_builder_add_string_value (builder,
|
|
Packit |
4b6dd7 |
strip_v2_prefix (priv->transparency));
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (priv->visibility != NULL) {
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, "visibility");
|
|
Packit |
4b6dd7 |
json_builder_add_string_value (builder,
|
|
Packit |
4b6dd7 |
strip_v2_prefix (priv->visibility));
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (priv->uid != NULL) {
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, "iCalUID");
|
|
Packit |
4b6dd7 |
json_builder_add_string_value (builder, priv->uid);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (priv->sequence > 0) {
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, "sequence");
|
|
Packit |
4b6dd7 |
json_builder_add_int_value (builder, priv->sequence);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (priv->status != NULL) {
|
|
Packit |
4b6dd7 |
const gchar *status;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Convert to v3 format. */
|
|
Packit |
4b6dd7 |
status = strip_v2_prefix (priv->status);
|
|
Packit |
4b6dd7 |
if (g_strcmp0 (status, "canceled") == 0) {
|
|
Packit |
4b6dd7 |
status = "cancelled";
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, "status");
|
|
Packit |
4b6dd7 |
json_builder_add_string_value (builder, status);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (priv->recurrence != NULL) {
|
|
Packit |
4b6dd7 |
gchar **parts;
|
|
Packit |
4b6dd7 |
guint i;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, "recurrence");
|
|
Packit |
4b6dd7 |
json_builder_begin_array (builder);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
parts = g_strsplit (priv->recurrence, "\n", -1);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
for (i = 0; parts[i] != NULL; i++) {
|
|
Packit |
4b6dd7 |
json_builder_add_string_value (builder, parts[i]);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_strfreev (parts);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
json_builder_end_array (builder);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (priv->original_event_id != NULL) {
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, "recurringEventId");
|
|
Packit |
4b6dd7 |
json_builder_add_string_value (builder, priv->original_event_id);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Times. */
|
|
Packit |
4b6dd7 |
for (l = priv->times; l != NULL; l = l->next) {
|
|
Packit |
4b6dd7 |
GDataGDWhen *when; /* unowned */
|
|
Packit |
4b6dd7 |
gchar *val = NULL; /* owned */
|
|
Packit |
4b6dd7 |
const gchar *member_name;
|
|
Packit |
4b6dd7 |
gint64 start_time, end_time;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
when = l->data;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Start time. */
|
|
Packit |
4b6dd7 |
start_time = gdata_gd_when_get_start_time (when);
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, "start");
|
|
Packit |
4b6dd7 |
json_builder_begin_object (builder);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (gdata_gd_when_is_date (when)) {
|
|
Packit |
4b6dd7 |
member_name = "date";
|
|
Packit |
4b6dd7 |
val = gdata_parser_date_from_int64 (start_time);
|
|
Packit |
4b6dd7 |
} else {
|
|
Packit |
4b6dd7 |
member_name = "dateTime";
|
|
Packit |
4b6dd7 |
val = gdata_parser_int64_to_iso8601 (start_time);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, member_name);
|
|
Packit |
4b6dd7 |
json_builder_add_string_value (builder, val);
|
|
Packit |
4b6dd7 |
g_free (val);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, "timeZone");
|
|
Packit |
4b6dd7 |
json_builder_add_string_value (builder, "UTC");
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
json_builder_end_object (builder);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* End time. */
|
|
Packit |
4b6dd7 |
end_time = gdata_gd_when_get_end_time (when);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (end_time > -1) {
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, "end");
|
|
Packit |
4b6dd7 |
json_builder_begin_object (builder);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (gdata_gd_when_is_date (when)) {
|
|
Packit |
4b6dd7 |
member_name = "date";
|
|
Packit |
4b6dd7 |
val = gdata_parser_date_from_int64 (end_time);
|
|
Packit |
4b6dd7 |
} else {
|
|
Packit |
4b6dd7 |
member_name = "dateTime";
|
|
Packit |
4b6dd7 |
val = gdata_parser_int64_to_iso8601 (end_time);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, member_name);
|
|
Packit |
4b6dd7 |
json_builder_add_string_value (builder, val);
|
|
Packit |
4b6dd7 |
g_free (val);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, "timeZone");
|
|
Packit |
4b6dd7 |
json_builder_add_string_value (builder, "UTC");
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
json_builder_end_object (builder);
|
|
Packit |
4b6dd7 |
} else {
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, "endTimeUnspecified");
|
|
Packit |
4b6dd7 |
json_builder_add_boolean_value (builder, TRUE);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Only use the first time. :-(
|
|
Packit |
4b6dd7 |
* FIXME: There must be a better solution. */
|
|
Packit |
4b6dd7 |
if (l->next != NULL) {
|
|
Packit |
4b6dd7 |
g_warning ("Ignoring secondary times; they are no "
|
|
Packit |
4b6dd7 |
"longer supported by the server-side API.");
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Locations. */
|
|
Packit |
4b6dd7 |
for (l = priv->places; l != NULL; l = l->next) {
|
|
Packit |
4b6dd7 |
GDataGDWhere *where; /* unowned */
|
|
Packit |
4b6dd7 |
const gchar *location;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
where = l->data;
|
|
Packit |
4b6dd7 |
location = gdata_gd_where_get_value_string (where);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, "location");
|
|
Packit |
4b6dd7 |
json_builder_add_string_value (builder, location);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Only use the first location. :-(
|
|
Packit |
4b6dd7 |
* FIXME: There must be a better solution. */
|
|
Packit |
4b6dd7 |
if (l->next != NULL) {
|
|
Packit |
4b6dd7 |
g_warning ("Ignoring secondary locations; they are no "
|
|
Packit |
4b6dd7 |
"longer supported by the server-side API.");
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* People. */
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, "attendees");
|
|
Packit |
4b6dd7 |
json_builder_begin_array (builder);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
for (l = priv->people; l != NULL; l = l->next) {
|
|
Packit |
4b6dd7 |
GDataGDWho *who; /* unowned */
|
|
Packit |
4b6dd7 |
const gchar *display_name, *email_address;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
who = l->data;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
json_builder_begin_object (builder);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
display_name = gdata_gd_who_get_value_string (who);
|
|
Packit |
4b6dd7 |
if (display_name != NULL) {
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, "displayName");
|
|
Packit |
4b6dd7 |
json_builder_add_string_value (builder, display_name);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
email_address = gdata_gd_who_get_email_address (who);
|
|
Packit |
4b6dd7 |
if (email_address != NULL) {
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, "email");
|
|
Packit |
4b6dd7 |
json_builder_add_string_value (builder, email_address);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (g_strcmp0 (gdata_gd_who_get_relation_type (who),
|
|
Packit |
4b6dd7 |
GDATA_GD_WHO_EVENT_ORGANIZER) == 0) {
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, "organizer");
|
|
Packit |
4b6dd7 |
json_builder_add_boolean_value (builder, TRUE);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
organiser_who = who;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
json_builder_end_object (builder);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
json_builder_end_array (builder);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (organiser_who != NULL) {
|
|
Packit |
4b6dd7 |
const gchar *display_name, *email_address;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, "organizer");
|
|
Packit |
4b6dd7 |
json_builder_begin_object (builder);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
display_name = gdata_gd_who_get_value_string (organiser_who);
|
|
Packit |
4b6dd7 |
if (display_name != NULL) {
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, "displayName");
|
|
Packit |
4b6dd7 |
json_builder_add_string_value (builder, display_name);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
email_address = gdata_gd_who_get_email_address (organiser_who);
|
|
Packit |
4b6dd7 |
if (email_address != NULL) {
|
|
Packit |
4b6dd7 |
json_builder_set_member_name (builder, "email");
|
|
Packit |
4b6dd7 |
json_builder_add_string_value (builder, email_address);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
json_builder_end_object (builder);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static const gchar *
|
|
Packit |
4b6dd7 |
get_content_type (void)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
return "application/json";
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_new:
|
|
Packit |
4b6dd7 |
* @id: (allow-none): the event's ID, or %NULL
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Creates a new #GDataCalendarEvent with the given ID and default properties.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: a new #GDataCalendarEvent; unref with g_object_unref()
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
GDataCalendarEvent *
|
|
Packit |
4b6dd7 |
gdata_calendar_event_new (const gchar *id)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
return GDATA_CALENDAR_EVENT (g_object_new (GDATA_TYPE_CALENDAR_EVENT, "id", id, NULL));
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_get_edited:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Gets the #GDataCalendarEvent:edited property. If the property is unset, -1 will be returned.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: the UNIX timestamp for the time the event was last edited, or -1
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
gint64
|
|
Packit |
4b6dd7 |
gdata_calendar_event_get_edited (GDataCalendarEvent *self)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_CALENDAR_EVENT (self), -1);
|
|
Packit |
4b6dd7 |
return self->priv->edited;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_get_status:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Gets the #GDataCalendarEvent:status property.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: the event status, or %NULL
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.2.0
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
const gchar *
|
|
Packit |
4b6dd7 |
gdata_calendar_event_get_status (GDataCalendarEvent *self)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_CALENDAR_EVENT (self), NULL);
|
|
Packit |
4b6dd7 |
return self->priv->status;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_set_status:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
* @status: (allow-none): a new event status, or %NULL
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Sets the #GDataCalendarEvent:status property to the new status, @status.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Set @status to %NULL to unset the property in the event.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.2.0
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
void
|
|
Packit |
4b6dd7 |
gdata_calendar_event_set_status (GDataCalendarEvent *self, const gchar *status)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_CALENDAR_EVENT (self));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_free (self->priv->status);
|
|
Packit |
4b6dd7 |
self->priv->status = g_strdup (status);
|
|
Packit |
4b6dd7 |
g_object_notify (G_OBJECT (self), "status");
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_get_visibility:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Gets the #GDataCalendarEvent:visibility property.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: the event visibility, or %NULL
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
const gchar *
|
|
Packit |
4b6dd7 |
gdata_calendar_event_get_visibility (GDataCalendarEvent *self)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_CALENDAR_EVENT (self), NULL);
|
|
Packit |
4b6dd7 |
return self->priv->visibility;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_set_visibility:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
* @visibility: (allow-none): a new event visibility, or %NULL
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Sets the #GDataCalendarEvent:visibility property to the new visibility, @visibility.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Set @visibility to %NULL to unset the property in the event.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
void
|
|
Packit |
4b6dd7 |
gdata_calendar_event_set_visibility (GDataCalendarEvent *self, const gchar *visibility)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_CALENDAR_EVENT (self));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_free (self->priv->visibility);
|
|
Packit |
4b6dd7 |
self->priv->visibility = g_strdup (visibility);
|
|
Packit |
4b6dd7 |
g_object_notify (G_OBJECT (self), "visibility");
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_get_transparency:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Gets the #GDataCalendarEvent:transparency property.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: the event transparency, or %NULL
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
const gchar *
|
|
Packit |
4b6dd7 |
gdata_calendar_event_get_transparency (GDataCalendarEvent *self)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_CALENDAR_EVENT (self), NULL);
|
|
Packit |
4b6dd7 |
return self->priv->transparency;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_set_transparency:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
* @transparency: (allow-none): a new event transparency, or %NULL
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Sets the #GDataCalendarEvent:transparency property to the new transparency, @transparency.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Set @transparency to %NULL to unset the property in the event.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
void
|
|
Packit |
4b6dd7 |
gdata_calendar_event_set_transparency (GDataCalendarEvent *self, const gchar *transparency)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_CALENDAR_EVENT (self));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_free (self->priv->transparency);
|
|
Packit |
4b6dd7 |
self->priv->transparency = g_strdup (transparency);
|
|
Packit |
4b6dd7 |
g_object_notify (G_OBJECT (self), "transparency");
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_get_uid:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Gets the #GDataCalendarEvent:uid property.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: the event's UID, or %NULL
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
const gchar *
|
|
Packit |
4b6dd7 |
gdata_calendar_event_get_uid (GDataCalendarEvent *self)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_CALENDAR_EVENT (self), NULL);
|
|
Packit |
4b6dd7 |
return self->priv->uid;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_set_uid:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
* @uid: (allow-none): a new event UID, or %NULL
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Sets the #GDataCalendarEvent:uid property to the new UID, @uid.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Set @uid to %NULL to unset the property in the event.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
void
|
|
Packit |
4b6dd7 |
gdata_calendar_event_set_uid (GDataCalendarEvent *self, const gchar *uid)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
/* TODO: is modifying this allowed? */
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_CALENDAR_EVENT (self));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_free (self->priv->uid);
|
|
Packit |
4b6dd7 |
self->priv->uid = g_strdup (uid);
|
|
Packit |
4b6dd7 |
g_object_notify (G_OBJECT (self), "uid");
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_get_sequence:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Gets the #GDataCalendarEvent:sequence property.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: the event's sequence number
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
guint
|
|
Packit |
4b6dd7 |
gdata_calendar_event_get_sequence (GDataCalendarEvent *self)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_CALENDAR_EVENT (self), 0);
|
|
Packit |
4b6dd7 |
return CLAMP (self->priv->sequence, 0, G_MAXUINT);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_set_sequence:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
* @sequence: a new sequence number, or 0
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Sets the #GDataCalendarEvent:sequence property to the new sequence number, @sequence.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
void
|
|
Packit |
4b6dd7 |
gdata_calendar_event_set_sequence (GDataCalendarEvent *self, guint sequence)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_CALENDAR_EVENT (self));
|
|
Packit |
4b6dd7 |
self->priv->sequence = sequence;
|
|
Packit |
4b6dd7 |
g_object_notify (G_OBJECT (self), "sequence");
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_get_guests_can_modify:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Gets the #GDataCalendarEvent:guests-can-modify property.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: %TRUE if attendees can modify the original event, %FALSE otherwise
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
gboolean
|
|
Packit |
4b6dd7 |
gdata_calendar_event_get_guests_can_modify (GDataCalendarEvent *self)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_CALENDAR_EVENT (self), FALSE);
|
|
Packit |
4b6dd7 |
return self->priv->guests_can_modify;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_set_guests_can_modify:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
* @guests_can_modify: %TRUE if attendees can modify the original event, %FALSE otherwise
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Sets the #GDataCalendarEvent:guests-can-modify property to @guests_can_modify.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
void
|
|
Packit |
4b6dd7 |
gdata_calendar_event_set_guests_can_modify (GDataCalendarEvent *self, gboolean guests_can_modify)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_CALENDAR_EVENT (self));
|
|
Packit |
4b6dd7 |
self->priv->guests_can_modify = guests_can_modify;
|
|
Packit |
4b6dd7 |
g_object_notify (G_OBJECT (self), "guests-can-modify");
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_get_guests_can_invite_others:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Gets the #GDataCalendarEvent:guests-can-invite-others property.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: %TRUE if attendees can invite others to the event, %FALSE otherwise
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
gboolean
|
|
Packit |
4b6dd7 |
gdata_calendar_event_get_guests_can_invite_others (GDataCalendarEvent *self)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_CALENDAR_EVENT (self), FALSE);
|
|
Packit |
4b6dd7 |
return self->priv->guests_can_invite_others;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_set_guests_can_invite_others:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
* @guests_can_invite_others: %TRUE if attendees can invite others to the event, %FALSE otherwise
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Sets the #GDataCalendarEvent:guests-can-invite-others property to @guests_can_invite_others.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
void
|
|
Packit |
4b6dd7 |
gdata_calendar_event_set_guests_can_invite_others (GDataCalendarEvent *self, gboolean guests_can_invite_others)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_CALENDAR_EVENT (self));
|
|
Packit |
4b6dd7 |
self->priv->guests_can_invite_others = guests_can_invite_others;
|
|
Packit |
4b6dd7 |
g_object_notify (G_OBJECT (self), "guests-can-invite-others");
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_get_guests_can_see_guests:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Gets the #GDataCalendarEvent:guests-can-see-guests property.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: %TRUE if attendees can see who's attending the event, %FALSE otherwise
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
gboolean
|
|
Packit |
4b6dd7 |
gdata_calendar_event_get_guests_can_see_guests (GDataCalendarEvent *self)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_CALENDAR_EVENT (self), FALSE);
|
|
Packit |
4b6dd7 |
return self->priv->guests_can_see_guests;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_set_guests_can_see_guests:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
* @guests_can_see_guests: %TRUE if attendees can see who's attending the event, %FALSE otherwise
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Sets the #GDataCalendarEvent:guests-can-see-guests property to @guests_can_see_guests.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
void
|
|
Packit |
4b6dd7 |
gdata_calendar_event_set_guests_can_see_guests (GDataCalendarEvent *self, gboolean guests_can_see_guests)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_CALENDAR_EVENT (self));
|
|
Packit |
4b6dd7 |
self->priv->guests_can_see_guests = guests_can_see_guests;
|
|
Packit |
4b6dd7 |
g_object_notify (G_OBJECT (self), "guests-can-see-guests");
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_get_anyone_can_add_self:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Gets the #GDataCalendarEvent:anyone-can-add-self property.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: %TRUE if anyone can add themselves as an attendee to the event, %FALSE otherwise
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
gboolean
|
|
Packit |
4b6dd7 |
gdata_calendar_event_get_anyone_can_add_self (GDataCalendarEvent *self)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_CALENDAR_EVENT (self), FALSE);
|
|
Packit |
4b6dd7 |
return self->priv->anyone_can_add_self;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_set_anyone_can_add_self:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
* @anyone_can_add_self: %TRUE if anyone can add themselves as an attendee to the event, %FALSE otherwise
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Sets the #GDataCalendarEvent:anyone-can-add-self property to @anyone_can_add_self.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
void
|
|
Packit |
4b6dd7 |
gdata_calendar_event_set_anyone_can_add_self (GDataCalendarEvent *self, gboolean anyone_can_add_self)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_CALENDAR_EVENT (self));
|
|
Packit |
4b6dd7 |
self->priv->anyone_can_add_self = anyone_can_add_self;
|
|
Packit |
4b6dd7 |
g_object_notify (G_OBJECT (self), "anyone-can-add-self");
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_add_person:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
* @who: a #GDataGDWho to add
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Adds the person @who to the event as a guest (attendee, organiser, performer, etc.), and increments its reference count.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Duplicate people will not be added to the list.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
void
|
|
Packit |
4b6dd7 |
gdata_calendar_event_add_person (GDataCalendarEvent *self, GDataGDWho *who)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_CALENDAR_EVENT (self));
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_GD_WHO (who));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (g_list_find_custom (self->priv->people, who, (GCompareFunc) gdata_comparable_compare) == NULL)
|
|
Packit |
4b6dd7 |
self->priv->people = g_list_append (self->priv->people, g_object_ref (who));
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_get_people:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Gets a list of the people attending the event.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: (element-type GData.GDWho) (transfer none): a #GList of #GDataGDWhos, or %NULL
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.2.0
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
GList *
|
|
Packit |
4b6dd7 |
gdata_calendar_event_get_people (GDataCalendarEvent *self)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_CALENDAR_EVENT (self), NULL);
|
|
Packit |
4b6dd7 |
return self->priv->people;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_add_place:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
* @where: a #GDataGDWhere to add
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Adds the place @where to the event as a location and increments its reference count.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Duplicate places will not be added to the list.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
void
|
|
Packit |
4b6dd7 |
gdata_calendar_event_add_place (GDataCalendarEvent *self, GDataGDWhere *where)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_CALENDAR_EVENT (self));
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_GD_WHERE (where));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (g_list_find_custom (self->priv->places, where, (GCompareFunc) gdata_comparable_compare) == NULL)
|
|
Packit |
4b6dd7 |
self->priv->places = g_list_append (self->priv->places, g_object_ref (where));
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_get_places:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Gets a list of the locations associated with the event.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: (element-type GData.GDWhere) (transfer none): a #GList of #GDataGDWheres, or %NULL
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.2.0
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
GList *
|
|
Packit |
4b6dd7 |
gdata_calendar_event_get_places (GDataCalendarEvent *self)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_CALENDAR_EVENT (self), NULL);
|
|
Packit |
4b6dd7 |
return self->priv->places;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_add_time:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
* @when: a #GDataGDWhen to add
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Adds @when to the event as a time period when the event happens, and increments its reference count.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Duplicate times will not be added to the list.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Note: gdata_calendar_event_add_time() and gdata_calendar_event_set_recurrence() are mutually
|
|
Packit |
4b6dd7 |
* exclusive, as the server doesn't support positive exceptions to recurrence rules. If recurrences
|
|
Packit |
4b6dd7 |
* are required, use gdata_calendar_event_set_recurrence(). Note that this means reminders cannot
|
|
Packit |
4b6dd7 |
* be set for the event, as they are only supported by #GDataGDWhen. No checks are performed for
|
|
Packit |
4b6dd7 |
* these forbidden conditions, as to do so would break libgdata's API; if both a recurrence is set
|
|
Packit |
4b6dd7 |
* and a specific time is added, the server will return an error when the #GDataCalendarEvent is
|
|
Packit |
4b6dd7 |
* inserted using gdata_service_insert_entry().
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.2.0
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
void
|
|
Packit |
4b6dd7 |
gdata_calendar_event_add_time (GDataCalendarEvent *self, GDataGDWhen *when)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_CALENDAR_EVENT (self));
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_GD_WHEN (when));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (g_list_find_custom (self->priv->times, when, (GCompareFunc) gdata_comparable_compare) == NULL)
|
|
Packit |
4b6dd7 |
self->priv->times = g_list_append (self->priv->times, g_object_ref (when));
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_get_times:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Gets a list of the time periods associated with the event.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: (element-type GData.GDWhen) (transfer none): a #GList of #GDataGDWhens, or %NULL
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.2.0
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
GList *
|
|
Packit |
4b6dd7 |
gdata_calendar_event_get_times (GDataCalendarEvent *self)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_CALENDAR_EVENT (self), NULL);
|
|
Packit |
4b6dd7 |
return self->priv->times;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_get_primary_time:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
* @start_time: (out caller-allocates): a #gint64 for the start time, or %NULL
|
|
Packit |
4b6dd7 |
* @end_time: (out caller-allocates): a #gint64 for the end time, or %NULL
|
|
Packit |
4b6dd7 |
* @when: (out callee-allocates) (transfer none): a #GDataGDWhen for the primary time structure, or %NULL
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Gets the first time period associated with the event, conveniently returning just its start and
|
|
Packit |
4b6dd7 |
* end times if required.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* If there are no time periods, or more than one time period, associated with the event, %FALSE will
|
|
Packit |
4b6dd7 |
* be returned, and the parameters will remain unmodified.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: %TRUE if there is only one time period associated with the event, %FALSE otherwise
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.2.0
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
gboolean
|
|
Packit |
4b6dd7 |
gdata_calendar_event_get_primary_time (GDataCalendarEvent *self, gint64 *start_time, gint64 *end_time, GDataGDWhen **when)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
GDataGDWhen *primary_when;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_CALENDAR_EVENT (self), FALSE);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (self->priv->times == NULL || self->priv->times->next != NULL)
|
|
Packit |
4b6dd7 |
return FALSE;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
primary_when = GDATA_GD_WHEN (self->priv->times->data);
|
|
Packit |
4b6dd7 |
if (start_time != NULL)
|
|
Packit |
4b6dd7 |
*start_time = gdata_gd_when_get_start_time (primary_when);
|
|
Packit |
4b6dd7 |
if (end_time != NULL)
|
|
Packit |
4b6dd7 |
*end_time = gdata_gd_when_get_end_time (primary_when);
|
|
Packit |
4b6dd7 |
if (when != NULL)
|
|
Packit |
4b6dd7 |
*when = primary_when;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
return TRUE;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_get_recurrence:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Gets the #GDataCalendarEvent:recurrence property.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: the event recurrence patterns, or %NULL
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.3.0
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
const gchar *
|
|
Packit |
4b6dd7 |
gdata_calendar_event_get_recurrence (GDataCalendarEvent *self)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_CALENDAR_EVENT (self), NULL);
|
|
Packit |
4b6dd7 |
return self->priv->recurrence;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_set_recurrence:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
* @recurrence: (allow-none): a new event recurrence, or %NULL
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Sets the #GDataCalendarEvent:recurrence property to the new recurrence, @recurrence.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Set @recurrence to %NULL to unset the property in the event.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Note: gdata_calendar_event_add_time() and gdata_calendar_event_set_recurrence() are mutually
|
|
Packit |
4b6dd7 |
* exclusive. See the documentation for gdata_calendar_event_add_time() for details.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.3.0
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
void
|
|
Packit |
4b6dd7 |
gdata_calendar_event_set_recurrence (GDataCalendarEvent *self, const gchar *recurrence)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_CALENDAR_EVENT (self));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_free (self->priv->recurrence);
|
|
Packit |
4b6dd7 |
self->priv->recurrence = g_strdup (recurrence);
|
|
Packit |
4b6dd7 |
g_object_notify (G_OBJECT (self), "recurrence");
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_get_original_event_details:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
* @event_id: (out callee-allocates) (transfer full): return location for the original event's ID, or %NULL
|
|
Packit |
4b6dd7 |
* @event_uri: (out callee-allocates) (transfer full): return location for the original event's URI, or %NULL
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Gets details of the original event, if this event is an exception to a recurring event. The original
|
|
Packit |
4b6dd7 |
* event's ID and the URI of the event's XML are returned in @event_id and @event_uri, respectively.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* If this event is not an exception to a recurring event, @event_id and @event_uri will be set to %NULL.
|
|
Packit |
4b6dd7 |
* See gdata_calendar_event_is_exception() to determine more simply whether an event is an exception to a
|
|
Packit |
4b6dd7 |
* recurring event.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* If both @event_id and @event_uri are %NULL, this function is a no-op. Otherwise, they should both be
|
|
Packit |
4b6dd7 |
* freed with g_free().
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.3.0
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
void
|
|
Packit |
4b6dd7 |
gdata_calendar_event_get_original_event_details (GDataCalendarEvent *self, gchar **event_id, gchar **event_uri)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_CALENDAR_EVENT (self));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (event_id != NULL)
|
|
Packit |
4b6dd7 |
*event_id = g_strdup (self->priv->original_event_id);
|
|
Packit |
4b6dd7 |
if (event_uri != NULL)
|
|
Packit |
4b6dd7 |
*event_uri = g_strdup (self->priv->original_event_uri);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_calendar_event_is_exception:
|
|
Packit |
4b6dd7 |
* @self: a #GDataCalendarEvent
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Determines whether the event is an exception to a recurring event. If it is, details of the original event
|
|
Packit |
4b6dd7 |
* can be retrieved using gdata_calendar_event_get_original_event_details().
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: %TRUE if the event is an exception, %FALSE otherwise
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.3.0
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
gboolean
|
|
Packit |
4b6dd7 |
gdata_calendar_event_is_exception (GDataCalendarEvent *self)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_CALENDAR_EVENT (self), FALSE);
|
|
Packit |
4b6dd7 |
return (self->priv->original_event_id != NULL && self->priv->original_event_uri != NULL) ? TRUE : FALSE;
|
|
Packit |
4b6dd7 |
}
|