diff --git a/modules/ical.py b/modules/ical.py index 7a6d79f..7cbb859 100644 --- a/modules/ical.py +++ b/modules/ical.py @@ -1,3 +1,4 @@ +from collections.abc import Iterable from datetime import date, datetime, timedelta, timezone from functools import reduce import hashlib @@ -77,8 +78,25 @@ class IcalModule: elif "SA" in rrule["BYDAY"]: weekday = 5 - start = next_weekday(today, weekday).replace(hour=start.hour, minute=start.minute, second=start.second, microsecond=start.microsecond) - end = next_weekday(today, weekday).replace(hour=end.hour, minute=end.minute, second=end.second, microsecond=end.microsecond) + diff = end - start + + if isinstance(start, datetime): + start = next_weekday(today, weekday).replace(hour=start.hour, minute=start.minute, second=start.second, microsecond=start.microsecond) + else: + start = next_weekday(todayd, weekday) + end = start + diff + + exclusions = [] + if "EXDATE" in component: + exdates = component.decoded("EXDATE") + if isinstance(exdates, Iterable): + for exdate in exdates: + exclusions.append(exdate.dts[0].dt) + else: + exclusions.append(exdates.dts[0].dt) + + while start in exclusions: + start += timedelta(days=7) component["DTSTART"] = vDDDTypes(start) component["DTEND"] = vDDDTypes(end)