diff options
Diffstat (limited to 'calendar/cal-util/cal-component.c')
-rw-r--r-- | calendar/cal-util/cal-component.c | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/calendar/cal-util/cal-component.c b/calendar/cal-util/cal-component.c index ff3bcd6d96..4ddec62159 100644 --- a/calendar/cal-util/cal-component.c +++ b/calendar/cal-util/cal-component.c @@ -37,6 +37,8 @@ struct _CalComponentPrivate { icalproperty *uid; + icalproperty *status; + struct categories { icalproperty *prop; }; @@ -221,6 +223,8 @@ free_icalcomponent (CalComponent *comp) priv->uid = NULL; + priv->status = NULL; + priv->categories_list = free_slist (priv->categories_list); priv->classification = NULL; @@ -471,6 +475,10 @@ scan_property (CalComponent *comp, icalproperty *prop) kind = icalproperty_isa (prop); switch (kind) { + case ICAL_STATUS_PROPERTY: + priv->status = prop; + break; + case ICAL_CATEGORIES_PROPERTY: scan_categories (comp, prop); break; @@ -953,6 +961,73 @@ cal_component_set_uid (CalComponent *comp, const char *uid) } /** + * cal_component_get_status: + * @comp: A calendar component object. + * @status: Return value for the status string. + * + * Queries the status property of a calendar component object. + **/ +void +cal_component_get_status (CalComponent *comp, const char **status) +{ + CalComponentPrivate *priv; + + g_return_if_fail (comp != NULL); + g_return_if_fail (IS_CAL_COMPONENT (comp)); + g_return_if_fail (status != NULL); + + priv = comp->priv; + g_return_if_fail (priv->icalcomp != NULL); + + if (!priv->status) { + *status = NULL; + return; + } + + *status = icalproperty_get_status (priv->status); +} + +/** + * cal_component_set_status: + * @comp: A calendar component object. + * @status: a status string, e.g. "IN-PROCESS", "NEEDS-ACTION". See the RFC. + * + * Sets the status string property of a calendar component object. + **/ +void +cal_component_set_status (CalComponent *comp, const char *status) +{ + CalComponentPrivate *priv; + + g_return_if_fail (comp != NULL); + g_return_if_fail (IS_CAL_COMPONENT (comp)); + g_return_if_fail (status != NULL); + + priv = comp->priv; + g_return_if_fail (priv->icalcomp != NULL); + + priv->need_sequence_inc = TRUE; + + if (status == NULL) { + if (priv->status) { + icalcomponent_remove_property (priv->icalcomp, priv->status); + icalproperty_free (priv->status); + priv->status = NULL; + } + + return; + } + + if (priv->status) { + icalproperty_set_status (priv->status, (char *) status); + } else { + priv->status = icalproperty_new_status ((char *) status); + icalcomponent_add_property (priv->icalcomp, + priv->status); + } +} + +/** * cal_component_get_categories_list: * @comp: A calendar component object. * @categ_list: Return value for the list of strings, where each string is a |