Added bugfix for iCalendar and truncating events
Contains some improvements in the section tha filters events from the iCalendar URL. The sorting algorithm has been improved to display events after today and in chronological order. If the event names is too long for the line, it'll be truncated until it fits. Special thanks and credit to Hubert for suggesting the above mentioned improvements. Also fixed an issue where the iCalendar would throw errors if the Alarm action for an event was set to 'None'.
This commit is contained in:
parent
617ef8a6c1
commit
0b84d46c43
1 changed files with 34 additions and 13 deletions
|
@ -191,27 +191,41 @@ def main():
|
||||||
print('Fetching events from your calendar'+'\n')
|
print('Fetching events from your calendar'+'\n')
|
||||||
events_this_month = []
|
events_this_month = []
|
||||||
upcoming = []
|
upcoming = []
|
||||||
|
|
||||||
for icalendars in ical_urls:
|
for icalendars in ical_urls:
|
||||||
ical = Calendar(urlopen(icalendars).read().decode())
|
decode = str(urlopen(icalendars).read().decode())
|
||||||
|
#fix a bug related to Alarm action by replacing parts of the icalendar
|
||||||
|
fix_e = decode.replace('BEGIN:VALARM\r\nACTION:NONE','BEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:')
|
||||||
|
#uncomment line below to display your calendar in ical format
|
||||||
|
#print(fix_e)
|
||||||
|
ical = Calendar(fix_e)
|
||||||
for events in ical.events:
|
for events in ical.events:
|
||||||
if time.now().strftime('%-m %Y') == (events.begin).format('M YYYY'):
|
if time.now().strftime('%-m %Y') == (events.begin).format('M YYYY') and (events.begin).format('DD') >= time.now().strftime('%d'):
|
||||||
upcoming.append({'date':events.begin.format('D MMM'), 'event':events.name})
|
upcoming.append({'date':events.begin.format('DD MMM'), 'event':events.name})
|
||||||
events_this_month.append(int((events.begin).format('D')))
|
events_this_month.append(int((events.begin).format('D')))
|
||||||
if month == 12:
|
if month == 12:
|
||||||
if (1, year+1) == (1, int((events.begin).year)):
|
if (1, year+1) == (1, int((events.begin).year)):
|
||||||
upcoming.append({'date':events.begin.format('D MMM'), 'event':events.name})
|
upcoming.append({'date':events.begin.format('DD MMM'), 'event':events.name})
|
||||||
if month != 12:
|
if month != 12:
|
||||||
if (month+1, year) == (events.begin).format('M YYYY'):
|
if (month+1, year) == (events.begin).format('M YYYY'):
|
||||||
upcoming.append({'date':events.begin.format('D MMM'), 'event':events.name})
|
upcoming.append({'date':events.begin.format('DD MMM'), 'event':events.name}) # HS sort events by date
|
||||||
|
|
||||||
|
def takeDate(elem):
|
||||||
|
return elem['date']
|
||||||
|
|
||||||
|
upcoming.sort(key=takeDate)
|
||||||
|
|
||||||
del upcoming[4:]
|
del upcoming[4:]
|
||||||
|
# uncomment the following 2 lines to display the fetched events
|
||||||
|
# from your iCalendar
|
||||||
|
print('Upcoming events:')
|
||||||
|
print(upcoming)
|
||||||
|
|
||||||
|
#Credit to Hubert for suggesting truncating event names
|
||||||
def write_text_left(box_width, box_height, text, tuple):
|
def write_text_left(box_width, box_height, text, tuple):
|
||||||
text_width, text_height = font.getsize(text)
|
text_width, text_height = font.getsize(text)
|
||||||
if (text_width, text_height) > (box_width, box_height):
|
while (text_width, text_height) > (box_width, box_height):
|
||||||
raise ValueError('Sorry, your text is too big for the box')
|
text=text[0:-1]
|
||||||
else:
|
text_width, text_height = font.getsize(text)
|
||||||
y = int((box_height / 2) - (text_height / 2))
|
y = int((box_height / 2) - (text_height / 2))
|
||||||
space = Image.new('L', (box_width, box_height), color=255)
|
space = Image.new('L', (box_width, box_height), color=255)
|
||||||
ImageDraw.Draw(space).text((0, y), text, fill=0, font=font)
|
ImageDraw.Draw(space).text((0, y), text, fill=0, font=font)
|
||||||
|
@ -221,6 +235,13 @@ def main():
|
||||||
for dates in range(len(upcoming)):
|
for dates in range(len(upcoming)):
|
||||||
write_text(70, 25, (upcoming[dates]['date']), date_positions['d'+str(dates+1)])
|
write_text(70, 25, (upcoming[dates]['date']), date_positions['d'+str(dates+1)])
|
||||||
|
|
||||||
|
for events in range(len(upcoming)):
|
||||||
|
write_text_left(314, 25, (upcoming[events]['event']), event_positions['e'+str(events+1)])
|
||||||
|
|
||||||
|
"""Write event dates and names on the E-Paper"""
|
||||||
|
for dates in range(len(upcoming)):
|
||||||
|
write_text(70, 25, (upcoming[dates]['date']), date_positions['d'+str(dates+1)])
|
||||||
|
|
||||||
for events in range(len(upcoming)):
|
for events in range(len(upcoming)):
|
||||||
write_text_left(314, 25, (upcoming[events]['event']), event_positions['e'+str(events+1)])
|
write_text_left(314, 25, (upcoming[events]['event']), event_positions['e'+str(events+1)])
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue