Added connectivity check in iCalendar section

This commit is contained in:
Ace 2019-05-03 20:47:36 +02:00 committed by GitHub
parent b21e23dd7b
commit fa659f17c5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -91,6 +91,13 @@ def main():
ImageDraw.Draw(space).text((x, y), text, fill='black', font=font) ImageDraw.Draw(space).text((x, y), text, fill='black', font=font)
image.paste(space, tuple) image.paste(space, tuple)
def internet_available():
try:
urlopen('https://google.com',timeout=5)
return True
except URLError as err:
return False
"""Connect to Openweathermap API and fetch weather data""" """Connect to Openweathermap API and fetch weather data"""
if top_section is "Weather" and api_key != "" and owm.is_API_online() is True: if top_section is "Weather" and api_key != "" and owm.is_API_online() is True:
print("Connecting to Openweathermap API servers...") print("Connecting to Openweathermap API servers...")
@ -278,7 +285,6 @@ def main():
if middle_section is "Calendar" or "Agenda": if middle_section is "Calendar" or "Agenda":
"""Algorithm for filtering and sorting events from your """Algorithm for filtering and sorting events from your
iCalendar/s""" iCalendar/s"""
print('Fetching events from your calendar'+'\n')
events_this_month = [] events_this_month = []
upcoming = [] upcoming = []
now = arrow.now() now = arrow.now()
@ -288,44 +294,52 @@ def main():
to filter events in that range""" to filter events in that range"""
agenda_max_days = arrow.now().replace(days=+22) agenda_max_days = arrow.now().replace(days=+22)
calendar_max_days = arrow.now().replace(days=+int(events_max_range)) calendar_max_days = arrow.now().replace(days=+int(events_max_range))
for icalendars in ical_urls: if internet_available() is True:
decode = str(urlopen(icalendars).read().decode()) print('Internet connection test passed'+'\n')
beginAlarmIndex = 0 print('Fetching events from your calendar'+'\n')
while beginAlarmIndex >= 0: for icalendars in ical_urls:
beginAlarmIndex = decode.find('BEGIN:VALARM') decode = str(urlopen(icalendars).read().decode())
if beginAlarmIndex >= 0: beginAlarmIndex = 0
endAlarmIndex = decode.find('END:VALARM') while beginAlarmIndex >= 0:
decode = decode[:beginAlarmIndex] + decode[endAlarmIndex+12:] beginAlarmIndex = decode.find('BEGIN:VALARM')
ical = Calendar(decode) if beginAlarmIndex >= 0:
for events in ical.events: endAlarmIndex = decode.find('END:VALARM')
if re.search('RRULE',str(events)) is not None: decode = decode[:beginAlarmIndex] + decode[endAlarmIndex+12:]
r = re.search('RRULE:(.+?)\n',str(events)) ical = Calendar(decode)
r_start = re.search('DTSTART:(.+?)\n',str(events)) for events in ical.events:
if r_start is not None: # if r_start is None the format of DTSTART is not recognized if re.search('RRULE',str(events)) is not None:
if time.now().month == 12: r = re.search('RRULE:(.+?)\n',str(events))
r_string=(r.group(1).rstrip()+';UNTIL='+'%04d%02d%02d'+'T000000Z') % (time.now().year+1, 1, 1) r_start = re.search('DTSTART:(.+?)\n',str(events))
else: if r_start is not None: # if r_start is None the format of DTSTART is not recognized
r_string=(r.group(1).rstrip()+';UNTIL='+'%04d%02d%02d'+'T000000Z') % (time.now().year, time.now().month+1, 1) if time.now().month == 12:
rule=rrulestr(r_string,dtstart=parse(r_start.group(1))) r_string=(r.group(1).rstrip()+';UNTIL='+'%04d%02d%02d'+'T000000Z') % (time.now().year+1, 1, 1)
for i in rule: else:
if i.year == time.now().year and i.month == time.now().month and i.day >= time.now().day: r_string=(r.group(1).rstrip()+';UNTIL='+'%04d%02d%02d'+'T000000Z') % (time.now().year, time.now().month+1, 1)
upcoming.append(events) rule=rrulestr(r_string,dtstart=parse(r_start.group(1)))
if i.day not in events_this_month: for i in rule:
events_this_month.append(i.day) if i.year == time.now().year and i.month == time.now().month and i.day >= time.now().day:
# uncomment this line to see fetched recurring events upcoming.append(events)
#print ("Appended recurring event: " + events.name + " on " + str(time.now().year) + " " + time.now().strftime('%m')+ " " + str(i.day).zfill(2)) if i.day not in events_this_month:
else: events_this_month.append(i.day)
if events.begin.date().year == today.year and events.begin.date().month is today.month and int((events.begin).format('D')) not in events_this_month: # uncomment this line to see fetched recurring events
events_this_month.append(int((events.begin).format('D'))) #print ("Appended recurring event: " + events.name + " on " + str(time.now().year) + " " + time.now().strftime('%m')+ " " + str(i.day).zfill(2))
if middle_section is 'Agenda' and events in ical.timeline.included(now, agenda_max_days): else:
upcoming.append(events) if events.begin.date().year == today.year and events.begin.date().month is today.month and int((events.begin).format('D')) not in events_this_month:
if middle_section is 'Calendar' and events in ical.timeline.included(now, calendar_max_days): events_this_month.append(int((events.begin).format('D')))
upcoming.append(events) if middle_section is 'Agenda' and events in ical.timeline.included(now, agenda_max_days):
upcoming.append(events)
if middle_section is 'Calendar' and events in ical.timeline.included(now, calendar_max_days):
upcoming.append(events)
def event_begins(elem): def event_begins(elem):
return elem.begin return elem.begin
upcoming.sort(key=event_begins)
else:
print("Could not fetch events from your iCalendar.")
print("Either the internet connection is too slow or we're offline.")
upcoming.sort(key=event_begins)
if middle_section is 'Agenda': if middle_section is 'Agenda':
"""For the agenda view, create a list containing dates and events of the next 22 days""" """For the agenda view, create a list containing dates and events of the next 22 days"""