diff options
Diffstat (limited to 'calendar/calobj.c')
-rw-r--r-- | calendar/calobj.c | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/calendar/calobj.c b/calendar/calobj.c index fcdfb7e59d..2f4647548f 100644 --- a/calendar/calobj.c +++ b/calendar/calobj.c @@ -6,7 +6,10 @@ * Miguel de Icaza (miguel@gnu.org) * Federico Mena (federico@gimp.org) */ +#include <string.h> +#include <glib.h> #include "calobj.h" +#include "versit/vcc.h" iCalObject * ical_object_new (void) @@ -46,3 +49,168 @@ ical_object_destroy (iCalObject *ico) g_free (ico); } + +GList * +set_list (char *str, char *sc) +{ + GList *list = 0; + char *s; + + for (s = strtok (str, sc); s; s = strtok (NULL, sc)) + list = g_list_prepend (list, g_strdup (s)); + + return list; +} + +#define is_a_prop_of(obj,prop) isAPropertyOf (obj,prop) +#define str_val(obj) (char *) vObjectUStringZValue (obj) +#define has(obj,prop) (vo = isAPropertyOf (obj, prop)) + +/* FIXME: we need to load the recurrence properties */ +iCalObject * +ical_object_create_from_vobject (VObject *o, const char *object_name) +{ + time_t now = time (NULL); + iCalObject *ical; + VObject *vo; + VObjectIterator i; + + ical = g_new0 (iCalObject, 1); + + if (strcmp (object_name, VCEventProp) == 0) + ical->type = ICAL_EVENT; + else if (strcmp (object_name, VCTodoProp) == 0) + ical->type = ICAL_TODO; + else + return 0; + /* uid */ + if (has (o, VCUniqueStringProp)) + ical->uid = g_strdup (str_val (vo)); + + /* seq */ + if (has (o, VCSequenceProp)) + ical->seq = atoi (str_val (vo)); + else + ical->seq = 0; + + /* dtstart */ + if (has (o, VCDTstartProp)) + ical->dtstart = time_from_isodate (str_val (vo)); + else + ical->dtstart = 0; + + /* dtend */ + if (has (o, VCDTendProp)) + ical->dtend = time_from_isodate (str_val (vo)); + else + ical->dtend = 0; + + /* dcreated */ + if (has (o, VCDCreatedProp)) + ical->created = time_from_isodate (str_val (vo)); + + /* completed */ + if (has (o, VCCompletedProp)) + ical->completed = time_from_isodate (str_val (vo)); + + /* last_mod */ + if (has (o, VCLastModifiedProp)) + ical->last_mod = time_from_isodate (str_val (vo)); + else + ical->last_mod = now; + + /* exdate */ + if (has (o, VCExpDateProp)) + ical->exdate = set_list (str_val (vo), ","); + + /* description */ + if (has (o, VCDescriptionProp)) + ical->description = g_strdup (str_val (vo)); + + /* summary */ + if (has (o, VCSummaryProp)) + ical->summary = g_strdup (str_val (vo)); + else + ical->summary = g_strdup (""); + + /* status */ + if (has (o, VCStatusProp)) + ical->status = g_strdup (str_val (vo)); + else + ical->status = g_strdup ("NEEDS ACTION"); + + if (has (o, VCClassProp)) + ical->class = g_strdup (str_val (vo)); + else + ical->status = g_strdup ("PUBLIC"); + + /* categories */ + if (has (o, VCCategoriesProp)) + ical->categories = set_list (str_val (vo), ","); + + /* resources */ + if (has (o, VCResourcesProp)) + ical->resources = set_list (str_val (vo), ";"); + + /* priority */ + if (has (o, VCPriorityProp)) + ical->priority = atoi (str_val (vo)); + + /* tranparency */ + if (has (o, VCTranspProp)) + ical->transp = atoi (str_val (vo)) ? ICAL_TRANSPARENT : ICAL_OPAQUE; + + /* related */ + if (has (o, VCRelatedToProp)) + ical->related = set_list (str_val (vo), ";"); + + /* attach */ + initPropIterator (&i, o); + while (moreIteration (&i)){ + vo = nextVObject (&i); + if (strcmp (vObjectName (vo), VCAttachProp) == 0) + ical->attach = g_list_prepend (ical->attach, g_strdup (str_val (vo))); + } + + /* url */ + if (has (o, VCURLProp)) + ical->url = g_strdup (str_val (vo)); + + /* FIXME: dalarm */ + if (has (o, VCDAlarmProp)) + ; + + /* FIXME: aalarm */ + if (has (o, VCAAlarmProp)) + ; + + /* FIXME: palarm */ + if (has (o, VCPAlarmProp)) + ; + + /* FIXME: malarm */ + if (has (o, VCMAlarmProp)) + ; + + /* FIXME: rdate */ + if (has (o, VCRDateProp)) + ; + + /* FIXME: rrule */ + if (has (o, VCRRuleProp)) + ; + + return ical; +} + +void +ical_object_save (iCalObject *ical) +{ + VObject *o; + + if (ical->type == ICAL_EVENT) + o = newVObject (VCEventProp); + else + o = newVObject (VCTodoProp); +} + |