From 1c56323ff0340e0612f2ce6ef88ed0cf4151efd9 Mon Sep 17 00:00:00 2001 From: Max G Date: Wed, 27 Mar 2019 17:48:28 +0100 Subject: [PATCH] Some bug fixes related to rrule --- Calendar/CalendarInterface.py | 21 ++++++++++++++++++--- Calendar/IcalEvents.py | 8 +++++--- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/Calendar/CalendarInterface.py b/Calendar/CalendarInterface.py index 1980381..9e5ddc1 100644 --- a/Calendar/CalendarInterface.py +++ b/Calendar/CalendarInterface.py @@ -98,8 +98,8 @@ class CalendarInterface (DataSourceInterface): end = start + duration occurrences = [] - r_string=event.rrule - rule=rrulestr(r_string,dtstart=parse(str(event.begin_datetime))) + r_string=self.__add_timezoneawarness__(event.rrule) + rule=rrulestr(r_string,dtstart=event.begin_datetime) for occurrence in rule: if occurrence - end > timedelta(0): return occurrences @@ -113,4 +113,19 @@ class CalendarInterface (DataSourceInterface): event.begin_datetime = start event.end_datetime = start + event.duration - return event \ No newline at end of file + return event + + def __add_timezoneawarness__ (self, rrule): + if "UNTIL" not in rrule: + return rrule + + timezone_str = "T000000Z" + until_example = "UNTIL=YYYYMMDD" + + until_index = rrule.index("UNTIL") + + tz_index = until_index + len(until_example) + if rrule[tz_index] is "T": + return rrule + + return rrule[:tz_index] + timezone_str + rrule[tz_index:] \ No newline at end of file diff --git a/Calendar/IcalEvents.py b/Calendar/IcalEvents.py index f3165fa..aba9623 100644 --- a/Calendar/IcalEvents.py +++ b/Calendar/IcalEvents.py @@ -37,14 +37,15 @@ class IcalEvents(CalendarInterface): for calendar in urls: decode = str(urlopen(calendar).read().decode()) + decode = self.__remove_alarms__(decode) ical = Calendar(decode) for event in ical.events: cal_event = CalendarEvent() cal_event.fetch_datetime = datetime.now() - cal_event.begin_datetime = event.begin.datetime.astimezone(None) - cal_event.end_datetime = event.end.datetime.astimezone(None) + cal_event.begin_datetime = event.begin.datetime + cal_event.end_datetime = event.end.datetime cal_event.duration = event.duration cal_event.title = event.name cal_event.description = event.description @@ -59,6 +60,7 @@ class IcalEvents(CalendarInterface): loaded_events.append(cal_event) return loaded_events except BaseException as ex: + print("ICal-Error [" + calendar + "]") print(ex) return loaded_events @@ -79,4 +81,4 @@ class IcalEvents(CalendarInterface): if re.search('RRULE',str(event)) is None: return None - return re.search('RRULE:(.+?)\n',str(event)).group(1).rstrip() + return re.search('RRULE:(.+?)\n',str(event)).group(1).rstrip() \ No newline at end of file