diff options
Diffstat (limited to 'calendar/pcs')
-rw-r--r-- | calendar/pcs/cal-backend.c | 46 |
1 files changed, 45 insertions, 1 deletions
diff --git a/calendar/pcs/cal-backend.c b/calendar/pcs/cal-backend.c index ffbbdab472..72315e3882 100644 --- a/calendar/pcs/cal-backend.c +++ b/calendar/pcs/cal-backend.c @@ -26,6 +26,11 @@ +/* VCalendar product ID */ +#define PRODID "-//Helix Code//NONSGML Tlacuache//EN" + + + /* Private part of the CalBackend structure */ typedef struct { /* URI where the calendar data is stored */ @@ -265,6 +270,35 @@ load_from_vobject (CalBackend *backend, VObject *vobject) } } +/* Creates a VObject with the base information of a calendar */ +static VObject * +get_calendar_base_vobject (CalBackend *backend) +{ + VObject *vobj; + time_t now; + struct tm tm; + + /* We call localtime for the side effect of setting tzname */ + + now = time (NULL); + tm = *localtime (&now); + + vobj = newVObject (VCCalProp); + + addPropValue (vobj, VCProdIdProp, PRODID); + +#if defined (HAVE_TM_ZONE) + addPropValue (vobj, VCTimeZoneProp, tm.tm_zone); +#elif defined (HAVE_TZNAME) + addPropValue (vobj, VCTimeZoneProp, tzname[0]); +#endif + + /* Per the vCalendar spec, this must be "1.0" */ + addPropValue (vobj, VCVersionProp, "1.0"); + + return vobj; +} + /** @@ -433,6 +467,7 @@ cal_backend_get_object (CalBackend *backend, const char *uid) { CalBackendPrivate *priv; iCalObject *ico; + VObject *vcalobj, *vobj; char *buf; g_return_val_if_fail (backend != NULL, NULL); @@ -450,5 +485,14 @@ cal_backend_get_object (CalBackend *backend, const char *uid) if (!ico) return NULL; - /* FIXME */ + vcalobj = get_calendar_base_vobject (backend); + vobj = ical_object_to_vobject (ico); + addVObjectProp (vcalobj, vobj); + + buf = writeMemVObject (NULL, NULL, vcalobj); + + cleanVObject (vcalobj); + cleanStrTbl (); + + return buf; } |