aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/gui')
-rw-r--r--calendar/gui/calendar.c116
-rw-r--r--calendar/gui/calendar.h25
-rw-r--r--calendar/gui/icalendar-types39
3 files changed, 180 insertions, 0 deletions
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
+