From 65e2dca7eb2786ea75ae3f07171281896334d7e2 Mon Sep 17 00:00:00 2001 From: Arturo Espinosa Date: Wed, 1 Apr 1998 00:30:46 +0000 Subject: Calendar objects as defined by the iCalendar IETF draft. Calendar holder Calendar objects as defined by the iCalendar IETF draft. Calendar holder for Calendar Objects. -mig&fed svn path=/trunk/; revision=79 --- calendar/gui/calendar.c | 116 +++++++++++++++++++++++++++++++++++++++++++ calendar/gui/calendar.h | 25 ++++++++++ calendar/gui/icalendar-types | 39 +++++++++++++++ 3 files changed, 180 insertions(+) create mode 100644 calendar/gui/calendar.c create mode 100644 calendar/gui/calendar.h create mode 100644 calendar/gui/icalendar-types (limited to 'calendar/gui') diff --git a/calendar/gui/calendar.c b/calendar/gui/calendar.c new file mode 100644 index 0000000000..8725d96081 --- /dev/null +++ b/calendar/gui/calendar.c @@ -0,0 +1,116 @@ +/* + * Calendar manager object + * + * This keeps track of a given calendar. Eventually this will abtract everything + * related to getting calendars/saving calendars locally or to a remote Calendar Service + * + * Copyright (C) 1998 the Free Software Foundation + * + * Authors: + * Miguel de Icaza (miguel@gnu.org) + * Federico Mena (federico@gimp.org) + * + */ +#include "calobj.h" +#include "calendar.h" + +Calendar * +calendar_new (char *title) +{ + Calendar *cal; + + cal = g_new0 (Calendar, 1); + cal->title = g_strdup (title); + + return cal; +} + +void +calendar_add_object (Calendar *cal, iCalObject *obj) +{ + switch (obj->type){ + case ICAL_EVENT: + cal->events = g_list_prepend (cal->events, obj); + break; + + case ICAL_TODO: + cal->todo = g_list_prepend (cal->todo, obj); + break; + + case ICAL_JOURNAL: + cal->journal = g_list_prepend (cal->journal, obj); + break; + default: + g_assert_not_reached (); + } +} + +void +calendar_remove_object (Calendar *cal, iCalObject *obj) +{ + switch (obj->type){ + case ICAL_EVENT: + cal->events = g_list_remove (cal->events, obj); + break; + + case ICAL_TODO: + cal->todo = g_list_remove (cal->todo, obj); + break; + + case ICAL_JOURNAL: + cal->journal = g_list_remove (cal->journal, obj); + break; + default: + g_assert_not_reached (); + } +} + +void +calendar_destroy (Calendar *cal) +{ + g_list_foreach (cal->events, ical_object_destroy, NULL); + g_list_free (cal->events); + + g_list_foreach (cal->todo, ical_object_destroy, NULL); + g_list_free (cal->todo); + + g_list_foreach (cal->journal, ical_object_destroy, NULL); + g_list_free (cal->journal); + + if (cal->title) + g_free (cal->title); + if (cal->filename) + g_free (cal->filename); + + g_free (cal); +} + +static GList * +calendar_get_objects_in_range (GList *objects, time_t start, time_t end) +{ + GList *new_events = 0; + + for (; objects; objects = objects->next){ + iCalObject *object = objects->data; + + if ((start <= object->dtstart) && (end >= object->dtend)) + new_events = g_list_prepend (new_events, object); + } +} + +GList * +calendar_get_events_in_range (Calendar *cal, time_t start, time_t end) +{ + calendar_get_objects_in_range (cal->events, start, end); +} + +GList * +calendar_get_todo_in_range (Calendar *cal, time_t start, time_t end) +{ + calendar_get_objects_in_range (cal->todo, start, end); +} +GList * +calendar_get_journal_in_range (Calendar *cal, time_t start, time_t end) +{ + calendar_get_objects_in_range (cal->journal, start, end); +} diff --git a/calendar/gui/calendar.h b/calendar/gui/calendar.h new file mode 100644 index 0000000000..f854c69b7a --- /dev/null +++ b/calendar/gui/calendar.h @@ -0,0 +1,25 @@ +#ifndef CALOBJ_H +#define CALOBJ_H + +BEGIN_GNOME_DECLS + +typedef struct { + char *title; + char *filename; + GList *events; + GList *todo; + GList *journal; +} Calendar; + +Calendar *calendar_new (char *title); +void calendar_add_object (Calendar *cal, iCalObject *obj); +void calendar_remove_object (Calendar *cal, iCalObject *obj); +void calendar_destroy (Calendar *cal); + +GList *calendar_get_events_in_range (Calendar *cal, time_t start, time_t end); +GList *calendar_get_todo_in_range (Calendar *cal, time_t start, time_t end); +GList *calendar_get_journal_in_range (Calendar *cal, time_t start, time_t end); + +END_GNOME_DECLS + +#endif diff --git a/calendar/gui/icalendar-types b/calendar/gui/icalendar-types new file mode 100644 index 0000000000..e11f4c1789 --- /dev/null +++ b/calendar/gui/icalendar-types @@ -0,0 +1,39 @@ +evento todo journal fbrequest fbreply busytime timezone + attach attach attach + attendee attendee attendee attendee attendee attendee + categories categories categories + class class class + comment comment comment comment comment comment comment + completed + contact contact contact + created created created created + description description description + dtstamp dtstamp + dtend/duration due->dtend dtend [duration] dtend dtend + dtstart dtstart dtstart dtstart dtstart dtstart dtstart + exdate exdate exdate + exrule exrule exrule + geo geo + last-mod last-mod last-mod last-mod last-mod + location location + organizer organizer organizer + percent + priority priority + rstatus rstatus rstatus rstatus + related related related + resources resources + rdate rdate rdate [rdate/rrule] + rrule rrule rrule + dtstamp dtstamp dtstamp dtstamp + seq seq seq seq seq + status status + summary summary summary + transp + uid uid uid uid uid + url url url url url + recurid recurid recurid + freebusy freebusy + tzname + tzoffset-to + tzoffset-from + -- cgit