diff options
-rw-r--r-- | calendar/ChangeLog | 12 | ||||
-rw-r--r-- | calendar/cal-util/cal-component.c | 123 | ||||
-rw-r--r-- | calendar/cal-util/cal-component.h | 3 |
3 files changed, 118 insertions, 20 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog index be092106d1..c8d721d972 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,5 +1,17 @@ 2000-07-06 Federico Mena Quintero <federico@helixcode.com> + * cal-util/cal-component.c (scan_property): Handle the + LAST-MODIFIED property. + (free_icalcomponent): Ditto. + (cal_component_get_last_modified): Ditto. + (cal_component_set_last_modified): Ditto. + (get_icaltimetype): New function to get struct icaltimetype + values. + (cal_component_get_created): Use get_icaltimetype(). + (set_icaltimetype): New function to set struct icaltimetype + values. + (cal_component_set_created): Use set_icaltimetype(). + * cal-util/cal-component.c (scan_property): Handle the CREATED property. (free_icalcomponent): Ditto. diff --git a/calendar/cal-util/cal-component.c b/calendar/cal-util/cal-component.c index 8065dc298f..8bc74a846e 100644 --- a/calendar/cal-util/cal-component.c +++ b/calendar/cal-util/cal-component.c @@ -66,6 +66,8 @@ typedef struct { struct datetime due; + icalproperty *last_modified; + struct { icalproperty *prop; icalparameter *altrep_param; @@ -195,6 +197,8 @@ free_icalcomponent (CalComponent *comp) priv->due.prop = NULL; priv->due.tzid_param = NULL; + priv->last_modified = NULL; + priv->summary.prop = NULL; priv->summary.altrep_param = NULL; } @@ -429,6 +433,10 @@ scan_property (CalComponent *comp, icalproperty *prop) scan_datetime (comp, &priv->due, prop); break; + case ICAL_LASTMODIFIED_PROPERTY: + priv->last_modified = prop; + break; + case ICAL_SUMMARY_PROPERTY: scan_summary (comp, prop); break; @@ -1136,6 +1144,21 @@ cal_component_free_icaltimetype (struct icaltimetype *t) g_free (t); } +/* Gets a struct icaltimetype value */ +static void +get_icaltimetype (icalproperty *prop, + struct icaltimetype (* get_prop_func) (icalproperty *prop), + struct icaltimetype **t) +{ + if (!prop) { + *t = NULL; + return; + } + + *t = g_new (struct icaltimetype, 1); + **t = (* get_prop_func) (prop); +} + /** * cal_component_get_created: * @comp: A calendar component object. @@ -1157,13 +1180,36 @@ cal_component_get_created (CalComponent *comp, struct icaltimetype **t) priv = comp->priv; g_return_if_fail (priv->icalcomp != NULL); - if (!priv->created) { - *t = NULL; + get_icaltimetype (priv->created, icalproperty_get_created, t); +} + +/* Sets a struct icaltimetype value */ +static void +set_icaltimetype (CalComponent *comp, icalproperty **prop, + icalproperty *(* prop_new_func) (struct icaltimetype v), + void (* prop_set_func) (icalproperty *prop, struct icaltimetype v), + struct icaltimetype *t) +{ + CalComponentPrivate *priv; + + priv = comp->priv; + + if (!t) { + if (*prop) { + icalcomponent_remove_property (priv->icalcomp, *prop); + icalproperty_free (*prop); + *prop = NULL; + } + return; } - *t = g_new (struct icaltimetype, 1); - **t = icalproperty_get_created (priv->created); + if (*prop) + (* prop_set_func) (*prop, *t); + else { + *prop = (* prop_new_func) (*t); + icalcomponent_add_property (priv->icalcomp, *prop); + } } /** @@ -1186,22 +1232,10 @@ cal_component_set_created (CalComponent *comp, struct icaltimetype *t) priv = comp->priv; g_return_if_fail (priv->icalcomp != NULL); - if (!t) { - if (priv->created) { - icalcomponent_remove_property (priv->icalcomp, priv->created); - icalproperty_free (priv->created); - priv->created = NULL; - } - - return; - } - - if (priv->created) - icalproperty_set_created (priv->created, *t); - else { - priv->created = icalproperty_new_created (*t); - icalcomponent_add_property (priv->icalcomp, priv->created); - } + set_icaltimetype (comp, &priv->created, + icalproperty_new_created, + icalproperty_set_created, + t); } /** @@ -1534,6 +1568,55 @@ cal_component_set_due (CalComponent *comp, CalComponentDateTime *dt) } /** + * cal_component_get_last_modified: + * @comp: A calendar component object. + * @t: Return value for the last modified time value. + * + * Queries the time at which a calendar component object was last modified in + * the calendar store. + **/ +void +cal_component_get_last_modified (CalComponent *comp, struct icaltimetype **t) +{ + CalComponentPrivate *priv; + + g_return_if_fail (comp != NULL); + g_return_if_fail (IS_CAL_COMPONENT (comp)); + g_return_if_fail (t != NULL); + + priv = comp->priv; + g_return_if_fail (priv->icalcomp != NULL); + + get_icaltimetype (priv->last_modified, icalproperty_get_lastmodified, t); +} + +/** + * cal_component_set_last_modified: + * @comp: A calendar component object. + * @t: Value for the last time modified. + * + * Sets the time at which a calendar component object was last stored in the + * calendar store. This should not be called by plain calendar user agents. + **/ +void +cal_component_set_last_modified (CalComponent *comp, struct icaltimetype *t) +{ + CalComponentPrivate *priv; + + g_return_if_fail (comp != NULL); + g_return_if_fail (IS_CAL_COMPONENT (comp)); + g_return_if_fail (t != NULL); + + priv = comp->priv; + g_return_if_fail (priv->icalcomp != NULL); + + set_icaltimetype (comp, &priv->last_modified, + icalproperty_new_lastmodified, + icalproperty_set_lastmodified, + t); +} + +/** * cal_component_get_summary: * @comp: A calendar component object. * @summary: Return value for the summary property and its parameters. diff --git a/calendar/cal-util/cal-component.h b/calendar/cal-util/cal-component.h index 5a66b42619..b9cc9da942 100644 --- a/calendar/cal-util/cal-component.h +++ b/calendar/cal-util/cal-component.h @@ -141,6 +141,9 @@ void cal_component_set_dtstart (CalComponent *comp, CalComponentDateTime *dt); void cal_component_get_due (CalComponent *comp, CalComponentDateTime *dt); void cal_component_set_due (CalComponent *comp, CalComponentDateTime *dt); +void cal_component_get_last_modified (CalComponent *comp, struct icaltimetype **t); +void cal_component_set_last_modified (CalComponent *comp, struct icaltimetype *t); + void cal_component_get_summary (CalComponent *comp, CalComponentText *summary); void cal_component_set_summary (CalComponent *comp, CalComponentText *summary); |