Todo items from HAS

This commit is contained in:
2025-02-16 20:19:55 +00:00
parent 8758248fea
commit 018643dde9
4 changed files with 112 additions and 57 deletions

View File

@@ -5,29 +5,34 @@ from datetime import datetime, timedelta
from time import gmtime, strftime
import time
from itertools import groupby
from hasApi import get_calendar_events
from hasApi import get_calendar_events, get_todo_items
import dateutil.parser
from dotenv import load_dotenv
black = '#000000'
white = '#ffffff'
black = "#000000"
white = "#ffffff"
fontSymbols = ImageFont.truetype("SymbolsNerdFont-Regular.ttf", 18)
fontTitle = ImageFont.truetype("Nunito-SemiBold.ttf", 24)
fontLarge = ImageFont.truetype ("Nunito-ExtraLight.ttf", 18)
fontSmall = ImageFont.truetype ("Nunito-ExtraLight.ttf", 16)
fontLarge = ImageFont.truetype("Nunito-ExtraLight.ttf", 18)
fontLargeBold = ImageFont.truetype("Nunito-SemiBold.ttf", 18)
fontSmall = ImageFont.truetype("Nunito-ExtraLight.ttf", 16)
fontVerySmall = ImageFont.truetype("Nunito-ExtraLight.ttf", 10)
class Space(Exception): pass
class Space(Exception):
pass
def getsize(font, text):
_, _, right, bottom = font.getbbox(text)
return (right, bottom)
def reflow_quote(quote, width, font):
words = quote.split(" ")
reflowed = ''
reflowed = ""
line_length = 0
for i in range(len(words)):
@@ -45,6 +50,7 @@ def reflow_quote(quote, width, font):
return reflowed
def draw_image():
image = Image.new("P", (400, 300))
draw = ImageDraw.Draw(image)
@@ -61,82 +67,86 @@ def draw_image():
draw.text((350, 5), "19c", white, fontSmall)
# Add sections
ep = 5
draw.rounded_rectangle((ep, 30+ep, (400/2)-ep, 300-ep), 10, outline=black, width=2)
draw.rounded_rectangle(((400/2) + ep, 30+ep, 400-ep, 300-ep), 10, outline=black, width=2)
ep = 3
draw.rounded_rectangle(
(ep, 30 + ep, (400 / 2) - ep, 300 - ep), 10, outline=black, width=2
)
draw.rounded_rectangle(
((400 / 2) + ep, 30 + ep, 400 - ep, 300 - ep), 10, outline=black, width=2
)
# Add tasks
draw.text((15, 40), 'Tasks', black, fontTitle)
draw.text((15, 40), "Tasks", black, fontTitle)
tasks = [
{'done': False, 'title': 'Something'},
{'done': True, 'title': 'Get the Modus and Audi MOTs organised'},
{'done': False, 'title': 'Something else'},
{'done': False, 'title': 'Call locksmith'},
]
tasks = get_todo_items()
taskStart = 80
for task in tasks:
if task['done']:
draw.text((15, taskStart-2), '󰄵', black, fontSymbols)
if task["status"] == "completed":
continue
draw.text((15, taskStart - 2), "󰄵", black, fontSymbols)
else:
draw.text((15, taskStart-2), '󰄱', black, fontSymbols)
draw.text((15, taskStart), "󰄱", black, fontSymbols)
reflowedTitle = reflow_quote(task['title'], 170, fontLarge)
reflowedTitle = reflow_quote(task["summary"], 160, fontLarge)
titleSizeW, titleSizeH = getsize(fontLarge, reflowedTitle)
titleSizeH *= (reflowedTitle.count('\n') + 1)
titleSizeH *= reflowedTitle.count("\n") + 1
draw.text((35, taskStart - 3), reflowedTitle, black, fontLarge)
taskStart += titleSizeH + (2*ep)
taskStart += titleSizeH + (2 * ep)
# Add cal
draw.text((215, 40), 'Calendar', black, fontTitle)
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()
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("Error")
print(start)
return None
if startDate < datetime.today().date():
return datetime.today().date()
else: return startDate
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'
if key == datetime.today().date():
dateStr = "Today"
elif key == (datetime.today() + timedelta(days=1)).date():
dateStr = "Tomorrow"
else:
dateStr = key.strftime('%d %b')
dateStr = key.strftime("%d %b")
draw.text((215, itemStart), dateStr, black, fontLarge)
w, h = getsize(fontLarge, 'Today')
draw.text((215, itemStart), dateStr, black, fontLargeBold)
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)
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
if itemStart + h > 270:
raise Space
draw.text((230, itemStart), reflowedItem, black, fontSmall)
itemStart += h + (ep)
if itemStart > 250: raise Space
if itemStart > 250:
raise Space
except Space:
pass
return image
if __name__ == "__main__":
load_dotenv()
img = draw_image()
img.save('built.bmp')
img.save("built.bmp")