Some bug fixes related to rrule

This commit is contained in:
Maximilian Giller 2019-03-27 17:48:28 +01:00
parent eaeea2083e
commit 1c56323ff0
2 changed files with 23 additions and 6 deletions

View file

@ -98,8 +98,8 @@ class CalendarInterface (DataSourceInterface):
end = start + duration end = start + duration
occurrences = [] occurrences = []
r_string=event.rrule r_string=self.__add_timezoneawarness__(event.rrule)
rule=rrulestr(r_string,dtstart=parse(str(event.begin_datetime))) rule=rrulestr(r_string,dtstart=event.begin_datetime)
for occurrence in rule: for occurrence in rule:
if occurrence - end > timedelta(0): if occurrence - end > timedelta(0):
return occurrences return occurrences
@ -113,4 +113,19 @@ class CalendarInterface (DataSourceInterface):
event.begin_datetime = start event.begin_datetime = start
event.end_datetime = start + event.duration event.end_datetime = start + event.duration
return event 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:]

View file

@ -37,14 +37,15 @@ class IcalEvents(CalendarInterface):
for calendar in urls: for calendar in urls:
decode = str(urlopen(calendar).read().decode()) decode = str(urlopen(calendar).read().decode())
decode = self.__remove_alarms__(decode)
ical = Calendar(decode) ical = Calendar(decode)
for event in ical.events: for event in ical.events:
cal_event = CalendarEvent() cal_event = CalendarEvent()
cal_event.fetch_datetime = datetime.now() cal_event.fetch_datetime = datetime.now()
cal_event.begin_datetime = event.begin.datetime.astimezone(None) cal_event.begin_datetime = event.begin.datetime
cal_event.end_datetime = event.end.datetime.astimezone(None) cal_event.end_datetime = event.end.datetime
cal_event.duration = event.duration cal_event.duration = event.duration
cal_event.title = event.name cal_event.title = event.name
cal_event.description = event.description cal_event.description = event.description
@ -59,6 +60,7 @@ class IcalEvents(CalendarInterface):
loaded_events.append(cal_event) loaded_events.append(cal_event)
return loaded_events return loaded_events
except BaseException as ex: except BaseException as ex:
print("ICal-Error [" + calendar + "]")
print(ex) print(ex)
return loaded_events return loaded_events
@ -79,4 +81,4 @@ class IcalEvents(CalendarInterface):
if re.search('RRULE',str(event)) is None: if re.search('RRULE',str(event)) is None:
return None return None
return re.search('RRULE:(.+?)\n',str(event)).group(1).rstrip() return re.search('RRULE:(.+?)\n',str(event)).group(1).rstrip()