evolution-data-server/dice-eds-changes.patch

309 lines
8.0 KiB
Diff
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

diff -ruN evolution-data-server-2.27.4/calendar/libecal/e-cal-component.c evolution-data-server-2.27.4.patched/calendar/libecal/e-cal-component.c
--- evolution-data-server-2.27.4/calendar/libecal/e-cal-component.c 2009-07-13 07:22:19.000000000 +0200
+++ evolution-data-server-2.27.4.patched/calendar/libecal/e-cal-component.c 2009-07-22 11:44:43.000000000 +0200
@@ -161,6 +161,8 @@
* object over the wire.
*/
guint need_sequence_inc : 1;
+
+ GSList *x_list; /* list of X icalproperty objects */
};
/* Private structure for alarms */
@@ -372,6 +374,9 @@
/* Free the subcomponents */
g_hash_table_foreach_remove (priv->alarm_uid_hash, free_alarm_cb, NULL);
+
+ g_slist_free (priv->x_list);
+ priv->x_list = NULL;
/* Clean up */
@@ -527,6 +532,13 @@
return new_comp;
}
+static void
+scan_x_prop (GSList **list, icalproperty *prop)
+{
+ *list = g_slist_append (*list, prop);
+}
+
+
/* Scans an attachment property */
static void
scan_attachment (GSList **attachment_list, icalproperty *prop)
@@ -793,7 +805,8 @@
case ICAL_LOCATION_PROPERTY :
priv->location = prop;
break;
-
+ case ICAL_X_PROPERTY:
+ scan_x_prop (&priv->x_list ,prop);
default:
break;
}
@@ -949,6 +962,9 @@
g_assert (priv->icalcomp != NULL);
+ if (e_cal_component_get_vtype (comp) == E_CAL_COMPONENT_VCALENDAR)
+ return;
+
/* Scan properties */
for (prop = icalcomponent_get_first_property (priv->icalcomp, ICAL_ANY_PROPERTY);
@@ -1047,7 +1063,9 @@
case E_CAL_COMPONENT_TIMEZONE:
kind = ICAL_VTIMEZONE_COMPONENT;
break;
-
+ case E_CAL_COMPONENT_VCALENDAR:
+ kind = ICAL_VCALENDAR_COMPONENT;
+ break;
default:
g_assert_not_reached ();
kind = ICAL_NO_COMPONENT;
@@ -1065,8 +1083,8 @@
scan_icalcomponent (comp);
/* Add missing stuff */
-
- ensure_mandatory_properties (comp);
+ if (type != E_CAL_COMPONENT_VCALENDAR && type != E_CAL_COMPONENT_TIMEZONE && type != E_CAL_COMPONENT_FREEBUSY);
+ ensure_mandatory_properties (comp);
}
/**
@@ -1089,6 +1107,7 @@
{
ECalComponentPrivate *priv;
icalcomponent_kind kind;
+ ECalComponentVType vtype;
g_return_val_if_fail (comp != NULL, FALSE);
g_return_val_if_fail (E_IS_CAL_COMPONENT (comp), FALSE);
@@ -1111,13 +1130,17 @@
|| kind == ICAL_VTODO_COMPONENT
|| kind == ICAL_VJOURNAL_COMPONENT
|| kind == ICAL_VFREEBUSY_COMPONENT
- || kind == ICAL_VTIMEZONE_COMPONENT))
+ || kind == ICAL_VTIMEZONE_COMPONENT
+ || kind == ICAL_VCALENDAR_COMPONENT))
return FALSE;
priv->icalcomp = icalcomp;
scan_icalcomponent (comp);
- ensure_mandatory_properties (comp);
+
+ vtype = e_cal_component_get_vtype (comp);
+ if (vtype != E_CAL_COMPONENT_VCALENDAR && vtype != E_CAL_COMPONENT_TIMEZONE && vtype != E_CAL_COMPONENT_FREEBUSY);
+ ensure_mandatory_properties (comp);
return TRUE;
}
@@ -1156,6 +1179,7 @@
e_cal_component_rescan (ECalComponent *comp)
{
ECalComponentPrivate *priv;
+ ECalComponentVType vtype;
g_return_if_fail (comp != NULL);
g_return_if_fail (E_IS_CAL_COMPONENT (comp));
@@ -1167,7 +1191,10 @@
/* Rescan */
scan_icalcomponent (comp);
- ensure_mandatory_properties (comp);
+
+ vtype = e_cal_component_get_vtype (comp);
+ if (vtype != E_CAL_COMPONENT_VCALENDAR && vtype != E_CAL_COMPONENT_TIMEZONE && vtype != E_CAL_COMPONENT_FREEBUSY);
+ ensure_mandatory_properties (comp);
}
/**
@@ -1228,6 +1255,9 @@
case ICAL_VTIMEZONE_COMPONENT:
return E_CAL_COMPONENT_TIMEZONE;
+ case ICAL_VCALENDAR_COMPONENT:
+ return E_CAL_COMPONENT_VCALENDAR;
+
default:
/* We should have been loaded with a supported type! */
g_assert_not_reached ();
@@ -2620,6 +2650,27 @@
priv->need_sequence_inc = TRUE;
}
+gboolean
+e_cal_component_is_allday (ECalComponent *comp)
+{
+ ECalComponentPrivate *priv;
+ ECalComponentDateTime dtstart, dtend;
+ gboolean ret = FALSE;
+
+ priv = comp->priv;
+
+ e_cal_component_get_dtstart (comp, &dtstart);
+ e_cal_component_get_dtend (comp, &dtend);
+
+ if (dtstart.value->is_date && dtend.value->is_date)
+ ret = TRUE;
+
+ e_cal_component_free_datetime (&dtstart);
+ e_cal_component_free_datetime (&dtend);
+
+ return ret;
+}
+
/**
* e_cal_component_get_due:
* @comp: A calendar component object.
@@ -4066,6 +4117,24 @@
**sequence = icalproperty_get_sequence (priv->sequence);
}
+int
+e_cal_component_get_sequence_as_int (ECalComponent *comp)
+{
+ ECalComponentPrivate *priv;
+
+ g_return_val_if_fail ((comp != NULL), -1);
+ g_return_val_if_fail (E_IS_CAL_COMPONENT (comp), -1);
+
+ priv = comp->priv;
+ g_return_val_if_fail ((priv->icalcomp != NULL), -1);
+
+ if (!priv->sequence) {
+ return 0;
+ }
+
+ return icalproperty_get_sequence (priv->sequence);
+}
+
/**
* e_cal_component_set_sequence:
* @comp: A calendar component object.
@@ -6044,3 +6113,77 @@
return retval;
}
+void
+e_cal_component_set_x_prop (ECalComponent *comp, const char *x_name, const char *x_value)
+{
+ GSList *l;
+ ECalComponentPrivate *priv;
+ icalproperty *prop;
+
+ priv = comp->priv;
+
+ for (l = priv->x_list; l != NULL; l = g_slist_next (l))
+ {
+ prop = l->data;
+ const char *name = icalproperty_get_x_name (prop);
+
+ if (!strcmp (x_name, name)) {
+ break;
+ }
+ prop = NULL;
+ }
+
+ if (prop) {
+ icalcomponent_remove_property (priv->icalcomp, prop);
+ priv->x_list = g_slist_remove (priv->x_list, prop);
+ icalproperty_free (prop);
+ prop = NULL;
+ }
+
+ if (!x_value || !*x_value)
+ return;
+
+ prop = icalproperty_new_x (x_value);
+ icalproperty_set_x_name (prop, x_name);
+ icalcomponent_add_property (priv->icalcomp, prop);
+
+ priv->x_list = g_slist_prepend (priv->x_list, prop);
+}
+
+char *
+e_cal_component_get_x_prop (ECalComponent *comp, const char *x_name)
+{
+ GSList *l;
+ ECalComponentPrivate *priv;
+
+ priv = comp->priv;
+
+ for (l = priv->x_list; l != NULL; l = g_slist_next (l))
+ {
+ icalproperty *prop = l->data;
+ const char *name = icalproperty_get_x_name (prop);
+
+ if (!strcmp (x_name, name)) {
+ const char *val = icalproperty_get_x (prop);
+
+ return g_strdup (val);
+ }
+ }
+
+ return NULL;
+}
+
+int
+e_cal_component_get_x_prop_as_int (ECalComponent *comp, const char *x_name)
+{
+ char *x_val = e_cal_component_get_x_prop (comp, x_name);
+
+ if (x_val) {
+ int val = atoi (x_val);
+ g_free (x_val);
+
+ return val;
+ }
+
+ return -1;
+}
diff -ruN evolution-data-server-2.27.4/calendar/libecal/e-cal-component.h evolution-data-server-2.27.4.patched/calendar/libecal/e-cal-component.h
--- evolution-data-server-2.27.4/calendar/libecal/e-cal-component.h 2009-07-13 07:22:19.000000000 +0200
+++ evolution-data-server-2.27.4.patched/calendar/libecal/e-cal-component.h 2009-07-22 11:44:43.000000000 +0200
@@ -51,7 +51,8 @@
E_CAL_COMPONENT_TODO,
E_CAL_COMPONENT_JOURNAL,
E_CAL_COMPONENT_FREEBUSY,
- E_CAL_COMPONENT_TIMEZONE
+ E_CAL_COMPONENT_TIMEZONE,
+ E_CAL_COMPONENT_VCALENDAR
} ECalComponentVType;
/* Field identifiers for a calendar component; these are used by the data model
@@ -256,6 +257,7 @@
void e_cal_component_get_dtstamp (ECalComponent *comp, struct icaltimetype *t);
void e_cal_component_set_dtstamp (ECalComponent *comp, struct icaltimetype *t);
+gboolean e_cal_component_is_allday (ECalComponent *comp);
void e_cal_component_get_dtstart (ECalComponent *comp, ECalComponentDateTime *dt);
void e_cal_component_set_dtstart (ECalComponent *comp, ECalComponentDateTime *dt);
@@ -312,6 +314,8 @@
void e_cal_component_get_sequence (ECalComponent *comp, gint **sequence);
void e_cal_component_set_sequence (ECalComponent *comp, gint *sequence);
+int e_cal_component_get_sequence_as_int (ECalComponent *comp);
+
void e_cal_component_get_status (ECalComponent *comp, icalproperty_status *status);
void e_cal_component_set_status (ECalComponent *comp, icalproperty_status status);
@@ -457,6 +461,10 @@
icalcomponent *e_cal_component_alarm_get_icalcomponent (ECalComponentAlarm *alarm);
+char *e_cal_component_get_x_prop (ECalComponent *comp, const char *x_name);
+int e_cal_component_get_x_prop_as_int (ECalComponent *comp, const char *x_name);
+void e_cal_component_set_x_prop (ECalComponent *comp, const char *x_name, const char *x_value);
+
G_END_DECLS