Use HAS for calendar
This commit is contained in:
63
building.py
63
building.py
@@ -1,9 +1,14 @@
|
||||
from PIL import Image
|
||||
from PIL import ImageDraw
|
||||
from PIL import ImageFont
|
||||
from datetime import datetime
|
||||
from datetime import datetime, timedelta
|
||||
from time import gmtime, strftime
|
||||
import time
|
||||
from googleCalendar import get_events
|
||||
from itertools import groupby
|
||||
from hasApi import get_calendar_events
|
||||
import dateutil.parser
|
||||
from dotenv import load_dotenv
|
||||
|
||||
black = '#000000'
|
||||
white = '#ffffff'
|
||||
@@ -15,6 +20,8 @@ fontLarge = ImageFont.truetype ("Nunito-ExtraLight.ttf", 18)
|
||||
fontSmall = ImageFont.truetype ("Nunito-ExtraLight.ttf", 16)
|
||||
fontVerySmall = ImageFont.truetype("Nunito-ExtraLight.ttf", 10)
|
||||
|
||||
class Space(Exception): pass
|
||||
|
||||
def getsize(font, text):
|
||||
_, _, right, bottom = font.getbbox(text)
|
||||
return (right, bottom)
|
||||
@@ -60,7 +67,7 @@ def draw_image():
|
||||
draw.rounded_rectangle(((400/2) + ep, 30+ep, 400-ep, 300-ep), 10, outline=black, width=2)
|
||||
|
||||
# Add tasks
|
||||
draw.text((15, 50), 'Tasks', black, fontTitle)
|
||||
draw.text((15, 40), 'Tasks', black, fontTitle)
|
||||
|
||||
tasks = [
|
||||
{'done': False, 'title': 'Something'},
|
||||
@@ -69,12 +76,12 @@ def draw_image():
|
||||
{'done': False, 'title': 'Call locksmith'},
|
||||
]
|
||||
|
||||
taskStart = 90
|
||||
taskStart = 80
|
||||
for task in tasks:
|
||||
if task['done']:
|
||||
draw.text((15, taskStart), '', black, fontSymbols)
|
||||
draw.text((15, taskStart-2), '', black, fontSymbols)
|
||||
else:
|
||||
draw.text((15, taskStart), '', black, fontSymbols)
|
||||
draw.text((15, taskStart-2), '', black, fontSymbols)
|
||||
|
||||
reflowedTitle = reflow_quote(task['title'], 170, fontLarge)
|
||||
titleSizeW, titleSizeH = getsize(fontLarge, reflowedTitle)
|
||||
@@ -83,8 +90,54 @@ def draw_image():
|
||||
draw.text((35, taskStart - 3), reflowedTitle, black, fontLarge)
|
||||
taskStart += titleSizeH + (2*ep)
|
||||
|
||||
# Add cal
|
||||
draw.text((215, 40), 'Calendar', black, fontTitle)
|
||||
events = get_calendar_events()
|
||||
def get_start_date(x):
|
||||
start = x['start']
|
||||
if 'date' in start:
|
||||
startDate = datetime.strptime(start['date'], '%Y-%m-%d').date()
|
||||
elif 'dateTime' in start:
|
||||
startDate = datetime.strptime(start['dateTime'][:10], '%Y-%m-%d').date()
|
||||
else:
|
||||
print('Error')
|
||||
print(start)
|
||||
return None
|
||||
if startDate < datetime.today().date():
|
||||
return datetime.today().date()
|
||||
else: return startDate
|
||||
|
||||
itemStart = 80
|
||||
try:
|
||||
for key, group in groupby(events, get_start_date):
|
||||
if key == datetime.today().date():
|
||||
dateStr = 'Today'
|
||||
elif key == (datetime.today() + timedelta(days = 1)).date():
|
||||
dateStr = 'Tomorrow'
|
||||
else:
|
||||
dateStr = key.strftime('%d %b')
|
||||
|
||||
draw.text((215, itemStart), dateStr, black, fontLarge)
|
||||
w, h = getsize(fontLarge, 'Today')
|
||||
itemStart += h + (ep)
|
||||
|
||||
for thing in list(group):
|
||||
reflowedItem = reflow_quote(thing['summary'], 170, fontSmall)
|
||||
w, h = getsize(fontLarge, 'Today')
|
||||
h *= (reflowedItem.count('\n') + 1)
|
||||
# print(f'After {reflowedItem}, {itemStart + h}')
|
||||
if itemStart + h > 270: raise Space
|
||||
draw.text((230, itemStart), reflowedItem, black, fontSmall)
|
||||
itemStart += h + (ep)
|
||||
|
||||
if itemStart > 250: raise Space
|
||||
except Space:
|
||||
pass
|
||||
|
||||
|
||||
return image
|
||||
|
||||
if __name__ == "__main__":
|
||||
load_dotenv()
|
||||
img = draw_image()
|
||||
img.save('built.bmp')
|
||||
Reference in New Issue
Block a user