aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/cal-util/cal-component.c
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@helixcode.com>2000-08-08 05:38:28 +0800
committerFederico Mena Quintero <federico@src.gnome.org>2000-08-08 05:38:28 +0800
commit4de1f796a496703b01bcc0a8245030e4fbc378b8 (patch)
tree9817b8c5b886275946ae6aba5fc3b4f643ec82b4 /calendar/cal-util/cal-component.c
parent3d4dc806bfa5832e7d91218b50512e672e377791 (diff)
downloadgsoc2013-evolution-4de1f796a496703b01bcc0a8245030e4fbc378b8.tar.gz
gsoc2013-evolution-4de1f796a496703b01bcc0a8245030e4fbc378b8.tar.zst
gsoc2013-evolution-4de1f796a496703b01bcc0a8245030e4fbc378b8.zip
Big sync. Disable calendar compilation for a few hours - Federico
2000-08-07 Federico Mena Quintero <federico@helixcode.com> * cal-util/cal-component.c (cal_component_get_as_string): Doh, libical owns the string's memory, so do not free it. * cal-client/client-test.c (create_client): Connect to the destroy signal of the client here. * cal-client/test.ics: New test file, modified from Eric Busboom's test file from RFC 2445. 2000-08-05 Federico Mena Quintero <federico@helixcode.com> * cal-client/client-test.c (dump_component): This was gone for some reason. (main): Load a new test file. 2000-08-04 Federico Mena Quintero <federico@helixcode.com> * cal-util/cal-component.c (cal_component_commit_sequence): New function to commit changes to the SEQUENCE property. (cal_component_get_as_string): Ensure that the sequence has been committed. * cal-client/cal-client.c (cal_client_get_object): Use CalComponent instead of the old iCalObject. (cal_client_update_object): Use iCalObject. Commit the SEQUENCE property before stringifying the object and piping it over to the Wombat. svn path=/trunk/; revision=4585
Diffstat (limited to 'calendar/cal-util/cal-component.c')
-rw-r--r--calendar/cal-util/cal-component.c56
1 files changed, 51 insertions, 5 deletions
diff --git a/calendar/cal-util/cal-component.c b/calendar/cal-util/cal-component.c
index b697b60389..0020c7d727 100644
--- a/calendar/cal-util/cal-component.c
+++ b/calendar/cal-util/cal-component.c
@@ -766,7 +766,9 @@ cal_component_get_vtype (CalComponent *comp)
* cal_component_get_as_string:
* @comp: A calendar component.
*
- * Gets the iCalendar string representation of a calendar component.
+ * Gets the iCalendar string representation of a calendar component. You should
+ * call cal_component_commit_sequence() before this function to ensure that the
+ * component's sequence number is consistent with the state of the object.
*
* Return value: String representation of the calendar component according to
* RFC 2445.
@@ -783,20 +785,64 @@ cal_component_get_as_string (CalComponent *comp)
priv = comp->priv;
g_return_val_if_fail (priv->icalcomp != NULL, NULL);
- /* Sigh, we dup and dup and dup and dup because of g_malloc() versus malloc()... */
+ /* Ensure that the user has committed the new SEQUENCE */
+ g_return_val_if_fail (priv->need_sequence_inc == FALSE, NULL);
+
+ /* We dup the string; libical owns that memory */
str = icalcomponent_as_ical_string (priv->icalcomp);
- if (str) {
+ if (str)
buf = g_strdup (str);
- free (str);
- } else
+ else
buf = NULL;
return buf;
}
/**
+ * cal_component_commit_sequence:
+ * @comp:
+ *
+ * Increments the sequence number property in a calendar component object if it
+ * needs it. This needs to be done when any of a number of properties listed in
+ * RFC 2445 change values, such as the start and end dates of a component.
+ *
+ * This function must be called before calling cal_component_get_as_string() to
+ * ensure that the component is fully consistent.
+ **/
+void
+cal_component_commit_sequence (CalComponent *comp)
+{
+ CalComponentPrivate *priv;
+
+ g_return_if_fail (comp != NULL);
+ g_return_if_fail (IS_CAL_COMPONENT (comp));
+
+ priv = comp->priv;
+ g_return_if_fail (priv->icalcomp != NULL);
+
+ if (!priv->need_sequence_inc)
+ return;
+
+ if (priv->sequence) {
+ int seq;
+
+ seq = icalproperty_get_sequence (priv->sequence);
+ icalproperty_set_sequence (priv->sequence, seq + 1);
+ } else {
+ /* The component had no SEQUENCE property, so assume that the
+ * default would have been zero. Since it needed incrementing
+ * anyways, we use a value of 1 here.
+ */
+ priv->sequence = icalproperty_new_sequence (1);
+ icalcomponent_add_property (priv->icalcomp, priv->sequence);
+ }
+
+ priv->need_sequence_inc = FALSE;
+}
+
+/**
* cal_component_get_uid:
* @comp: A calendar component object.
* @uid: Return value for the UID string.