Fix: Keep showing events that already started, but have not finished yet

This commit is contained in:
s3lph 2019-09-21 14:43:48 +02:00
parent 20ae18e064
commit 895a72a348
2 changed files with 16 additions and 3 deletions

View file

@ -1,6 +1,18 @@
# iCalendar Timeseries Server Changelog # iCalendar Timeseries Server Changelog
<!-- BEGIN RELEASE v0.3 -->
## Version 0.3
### Changes
<!-- BEGIN CHANGES 0.3 -->
- Keep showing events that already started, but have not finished yet
<!-- END CHANGES 0.3 -->
<!-- END RELEASE v0.3 -->
<!-- BEGIN RELEASE v0.2 --> <!-- BEGIN RELEASE v0.2 -->
## Version 0.2 ## Version 0.2

View file

@ -66,12 +66,13 @@ def _scrape_calendar(name: str, config: CalendarConfig, start: datetime, end: da
for element in calendar.walk(): for element in calendar.walk():
if element.name == "VEVENT": if element.name == "VEVENT":
dtstart = element.get('dtstart').dt dtstart = element.get('dtstart').dt
if isinstance(dtstart, date): # Apparently datetime is a subclass of date...
if isinstance(dtstart, date) and not isinstance(dtstart, datetime):
dtstart = datetime(dtstart.year, dtstart.month, dtstart.day, tzinfo=start.tzinfo) dtstart = datetime(dtstart.year, dtstart.month, dtstart.day, tzinfo=start.tzinfo)
# Process either end timestamp or duration, if present # Process either end timestamp or duration, if present
if 'dtend' in element: if 'dtend' in element:
evend = element.get('dtend').dt evend = element.get('dtend').dt
if isinstance(evend, date): if isinstance(evend, date) and not isinstance(evend, datetime):
evend = datetime(evend.year, evend.month, evend.day, tzinfo=start.tzinfo) evend = datetime(evend.year, evend.month, evend.day, tzinfo=start.tzinfo)
duration = evend - dtstart duration = evend - dtstart
elif 'duration' in element: elif 'duration' in element:
@ -83,7 +84,7 @@ def _scrape_calendar(name: str, config: CalendarConfig, start: datetime, end: da
else: else:
occurences = [dtstart] occurences = [dtstart]
for occurence in occurences: for occurence in occurences:
if start <= occurence < end: if start <= occurence + duration and occurence < end:
events.append(Event(name, element, occurence, occurence + duration)) events.append(Event(name, element, occurence, occurence + duration))
with _SCRAPE_CACHE_LOCK: with _SCRAPE_CACHE_LOCK:
_SCRAPE_CACHE[name] = events _SCRAPE_CACHE[name] = events