diff options
Diffstat (limited to 'calendar/pcs')
-rw-r--r-- | calendar/pcs/calobj.c | 168 | ||||
-rw-r--r-- | calendar/pcs/calobj.h | 7 |
2 files changed, 173 insertions, 2 deletions
diff --git a/calendar/pcs/calobj.c b/calendar/pcs/calobj.c index fcdfb7e59d..2f4647548f 100644 --- a/calendar/pcs/calobj.c +++ b/calendar/pcs/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); +} + diff --git a/calendar/pcs/calobj.h b/calendar/pcs/calobj.h index d5f6db0ae0..85f88dccd9 100644 --- a/calendar/pcs/calobj.h +++ b/calendar/pcs/calobj.h @@ -8,6 +8,7 @@ #define CALOBJ_H #include <libgnome/libgnome.h> +#include "versit/vcc.h" BEGIN_GNOME_DECLS @@ -89,14 +90,16 @@ typedef struct { char *url; time_t recurid; - /* VALARM objects are always inside another object, never alone */ - CalendarAlarm *alarm; + CalendarAlarm *dalarm; + CalendarAlarm *aalarm; } iCalObject; iCalObject *ical_new (char *comment, char *organizer, char *summary); iCalObject *ical_object_new (void); void ical_object_destroy (iCalObject *ico); +iCalObject *ical_object_create_from_vobject (VObject *obj, const char *object_name); END_GNOME_DECLS #endif + |