1
0
Fork 0
mirror of https://github.com/Kozea/Radicale.git synced 2025-09-15 20:36:55 +00:00

Don't limit expansion range using EXDATE

Any EXDATE values specify single instances that must be removed from
the expanded set of DTSTART values

Signed-off-by: David Greaves <david@dgreaves.com>
This commit is contained in:
David Greaves 2025-07-04 09:28:50 +01:00
parent ec3366496e
commit 5c2e6377a2

View file

@ -360,15 +360,13 @@ def _expand(
elif hasattr(vevent_recurrence, "duration"): elif hasattr(vevent_recurrence, "duration"):
duration = vevent_recurrence.duration.value duration = vevent_recurrence.duration.value
# Handle EXDATE to limit expansion range # Generate EXDATE to remove from expansion range
if hasattr(vevent_recurrence, 'exdate'): if hasattr(vevent_recurrence, 'exdate'):
exdates = vevent_recurrence.exdate.value exdates = vevent_recurrence.exdate.value
if not isinstance(exdates, list): if not isinstance(exdates, list):
exdates = [exdates] exdates = [exdates]
logger.debug("EXDATE values: %s", exdates) logger.debug("EXDATE values: %s", exdates)
latest_exdate = max(exdates) if exdates else None # TODO: these exdate values are not removed from the expanded set
if latest_exdate and end > latest_exdate:
end = min(end, latest_exdate)
rruleset = None rruleset = None
if hasattr(vevent_recurrence, 'rrule'): if hasattr(vevent_recurrence, 'rrule'):
@ -409,6 +407,8 @@ def _expand(
logger.debug("Recurrence %s filtered out by time-range", recurrence_utc) logger.debug("Recurrence %s filtered out by time-range", recurrence_utc)
continue continue
# Check here for exdate
# Check for overridden instances # Check for overridden instances
i_overridden, vevent = _find_overridden(i_overridden, vevents_overridden, recurrence_utc, dt_format) i_overridden, vevent = _find_overridden(i_overridden, vevents_overridden, recurrence_utc, dt_format)