aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/pcs
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/pcs')
-rw-r--r--calendar/pcs/calobj.c48
-rw-r--r--calendar/pcs/calobj.h100
2 files changed, 148 insertions, 0 deletions
diff --git a/calendar/pcs/calobj.c b/calendar/pcs/calobj.c
new file mode 100644
index 0000000000..87dd8db78d
--- /dev/null
+++ b/calendar/pcs/calobj.c
@@ -0,0 +1,48 @@
+/*
+ * Calendar objects implementations.
+ * Copyright (C) 1998 the Free Software Foundation
+ *
+ * Authors:
+ * Miguel de Icaza (miguel@gnu.org)
+ * Federico Mena (federico@gimp.org)
+ */
+#include "calobj.h"
+
+iCalObject *
+ical_object_new (void)
+{
+ iCalObject *ico;
+
+ ico = g_new0 (iCalObject);
+
+ ico->seq = -1;
+ ico->dtstamp = time (NULL);
+
+ return ico;
+}
+
+iCalObject *
+ical_new (char *comment, char *organizer, char *summary)
+{
+ iCalObject *ico;
+
+ ico = ical_object_new ();
+
+ ico->comment = g_strdup (comment);
+ ico->organizer = g_strdup (organizer);
+ ico->summary = g_strdup (summary);
+
+ return ico;
+}
+
+#define free_if_defined(x) if (x){ g_free (x); x = 0; }
+
+void
+ical_object_destroy (iCalObject *ico)
+{
+ free_if_defined (ico->comment);
+ free_if_defined (ico->organizer);
+ free_if_defined (ico->summary);
+
+ g_free (ico);
+}
diff --git a/calendar/pcs/calobj.h b/calendar/pcs/calobj.h
new file mode 100644
index 0000000000..fda3a1e4b5
--- /dev/null
+++ b/calendar/pcs/calobj.h
@@ -0,0 +1,100 @@
+/*
+ * Internal representation of a Calendar object. This is modeled after the
+ * iCalendar/vCalendar specificiation
+ *
+ * Authors: Miguel de Icaza (miguel@gnu.org), Federico Mena (federico@gimp.org).
+ */
+#ifndef CALOBJ_H
+#define CALOBJ_H
+
+BEGIN_GNOME_DECLS
+
+typedef struct {
+ char *alarm_audio_file;
+ char *alarm_script;
+ char *alarm_email;
+ char *alarm_text; /* Text to be displayed */
+} CalendarAlarm;
+
+/* Calendar object type */
+typedef enum {
+ ICAL_EVENT,
+ ICAL_TODO,
+ ICAL_JOURNAL,
+ ICAL_FBREQUEST,
+ ICAL_FBREPLY,
+ ICAL_BUSYTIME,
+ ICAL_TIMEZONE
+} iCalType;
+
+/* For keys that might contain binary or text/binary */
+typedef struct {
+ char *data;
+ int len;
+} iCalValue;
+
+typedef struct {
+ int valid; /* true if the Geography was specified */
+ double latitude;
+ double longitude;
+} iCalGeo;
+
+typedef enum {
+ ICAL_OPAQUE,
+ ICAL_TRANSPARENT
+};
+
+typedef char NotYet;
+
+/*
+ * This describes an iCalendar object, note that we never store durations, instead we
+ * always compute the end time computed from the start + duration.
+ */
+typedef struct {
+ iCalType type;
+
+ GList *attach; /* type: one or more URIs or binary data */
+ GList *attendee; /* type: CAL-ADDRESS */
+ GList *categories; /* type: one or more TEXT */
+ char *class;
+
+ char *comment; /* we collapse one or more TEXTs into one */
+ time_t completed;
+ time_t created;
+ GList *contact; /* type: one or more TEXT */
+ char *description;
+ time_t dtstamp;
+ time_t dtstart;
+ time_t dtend;
+ GList *exdate; /* type: one or more time_t's */
+ GList *exrule; /* type: one or more RECUR */
+ iCalGeo geo;
+ time_t last_mod;
+ char *location;
+ char *organizer;
+ int percent;
+ int priority;
+ char *rstatus; /* request status for freebusy */
+ GList *related; /* type: one or more TEXT */
+ GList *resources; /* type: one or more TEXT */
+ GList *rdate; /* type: one or more recurrence date */
+ GList *rrule; /* type: one or more recurrence rules */
+ int seq;
+ char *status;
+ char *summary;
+ iCalTransp transp;
+ char *uid;
+ char *url;
+ time_t recurid;
+
+ /* VALARM objects are always inside another object, never alone */
+ CalendarAlarm *alarm;
+} iCalObject;
+
+iCalObject *ical_new (char *comment, char *organizer, char *summary);
+iCalObject *ical_object_new (void);
+
+END_GNOME_DECLS
+
+#endif
+