Some bug fixes related to rrule
This commit is contained in:
parent
eaeea2083e
commit
1c56323ff0
2 changed files with 23 additions and 6 deletions
|
@ -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
|
||||
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:]
|
|
@ -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()
|
Loading…
Reference in a new issue