diff --git a/Calendar/E-Paper.py b/Calendar/E-Paper.py index 5c12e50..f7881bb 100644 --- a/Calendar/E-Paper.py +++ b/Calendar/E-Paper.py @@ -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'])