Bugfixes for events

Switched from timezone-unaware (naive) objects to timezone-aware objects to correctly display event times. The timezone is fetched from the system itself. As a result, a new dependency (pytz) is now being used to set the timezone.
This commit is contained in:
Ace 2019-05-17 11:52:58 +02:00 committed by GitHub
parent 25a57c22bc
commit f1d4b79dac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -19,6 +19,7 @@ import random
import gc
import feedparser
import numpy as np
from pytz import timezone
from settings import *
from image_data import *
@ -52,13 +53,20 @@ else:
im_open = Image.open
'''Get system timezone and set timezone accordingly'''
file = open('/etc/timezone','r')
lines = file.readlines()
system_tz = lines[0].rstrip()
local_tz = timezone(system_tz)
owm = pyowm.OWM(api_key)
"""Main loop starts from here"""
def main():
calibration_countdown = 'initial'
while True:
time = datetime.now()
time = datetime.now().replace(tzinfo=local_tz)
hour = int(time.strftime("%-H"))
month = int(time.now().strftime('%-m'))
year = int(time.now().strftime('%Y'))
@ -320,8 +328,10 @@ def main():
"""Create a time span using the events_max_range value (in days)
to filter events in that range"""
agenda_max_days = arrow.now().replace(days=+22)
calendar_max_days = arrow.now().replace(days=+int(events_max_range))
time_span_calendar = time + timedelta(days=int(events_max_range))
time_span_agenda = time + timedelta(days=22)
if internet_available() is True:
print('Internet connection test passed'+'\n')
print('Fetching events from your calendar'+'\n')
@ -335,14 +345,27 @@ def main():
decode = decode[:beginAlarmIndex] + decode[endAlarmIndex+12:]
ical = Calendar(decode)
for events in ical.events:
if events.begin.date().year == today.year and events.begin.date().month is today.month:
if events.begin.date().year == today.year and events.begin.date().month == today.month:
if int((events.begin).format('D')) not in events_this_month:
events_this_month.append(int((events.begin).format('D')))
if middle_section is 'Agenda' and events in ical.timeline.included(now, agenda_max_days):
if middle_section is 'Agenda' and time <= events.end.datetime <= time_span_agenda:
upcoming.append(events)
if middle_section is 'Calendar' and events in ical.timeline.included(now, calendar_max_days):
if middle_section is 'Calendar' and time <= events.end.datetime <= time_span_calendar:
upcoming.append(events)
'''Fix some known bugs from ics.py'''
for events in upcoming:
if events.all_day and events.duration.days > 1:
events.end = events.end.replace(days=-2)
for i in range(1, events.duration.days):
cc = events.clone()
cc.begin = cc.begin.replace(days=+i)
upcoming.append(cc)
for events in upcoming:
if events.begin.format('HH:mm') == '00:00':
events.make_all_day()
def event_begins(elem):
return elem.begin
@ -352,7 +375,6 @@ def main():
print("Could not fetch events from your iCalendar.")
print("Either the internet connection is too weak or we're offline.")
if middle_section is 'Agenda':
"""For the agenda view, create a list containing dates and events of the next 22 days"""
if len(upcoming) is not 0:
@ -365,9 +387,10 @@ def main():
for events in upcoming:
if events.begin.date().day == date.day:
if not events.all_day:
agenda_list.append({'value':events.begin.format('HH:mm')+ ' '+ str(events.name), 'type':'timed_event'})
agenda_list.append({'value':events.begin.to(system_tz).format('HH:mm')+ ' '+ str(events.name), 'type':'timed_event'})
else:
agenda_list.append({'value':events.name, 'type':'full_day_event'})
if bottom_section is not "":
del agenda_list[16:]
image.paste(seperator2, agenda_view_lines['line17'])