From 80b910b005a1fdb0e1ba46887055ebcc0422fd47 Mon Sep 17 00:00:00 2001 From: ILoveAndLikePizza Date: Sat, 3 Feb 2024 11:56:58 +0100 Subject: [PATCH 1/4] Speed up corvee --- debug.sh | 3 ++- states/djo/corvee.mod.py | 48 ++++++++++++++++++++++++++++------------ 2 files changed, 36 insertions(+), 15 deletions(-) diff --git a/debug.sh b/debug.sh index e517cb4..92d29f4 100755 --- a/debug.sh +++ b/debug.sh @@ -1,2 +1,3 @@ #!/usr/bin/env bash -python3 index.py -o --port 8080 $@ | ./ledcat --geometry 96x32 show + +python3.11 index.py -o --port 8080 $@ | ./ledcat --geometry 96x32 show diff --git a/states/djo/corvee.mod.py b/states/djo/corvee.mod.py index a85f496..fd2d9dd 100644 --- a/states/djo/corvee.mod.py +++ b/states/djo/corvee.mod.py @@ -1,6 +1,7 @@ import asyncio from math import floor from random import randint +from os import environ import httpx from PIL import Image, ImageDraw, ImageFont, ImageOps @@ -16,11 +17,21 @@ class State(BaseState): # get corvee dashboard data async def get_names(self): - try: - response = await self.client.get("https://corvee.djoamersfoort.nl/api/v1/selected", timeout=5) - except httpx.RequestError: - return {} - return response.json() + if self.on_pi: + try: + response = await self.client.get( + "https://corvee.djoamersfoort.nl/api/v1/selected", + headers={"Authorization": f"Bearer {environ.get("API_TOKEN")}"}, + timeout=5 + ) + except httpx.RequestError: + return {} + return response.json() + else: + return { + "selected": ["Jan", "Henk", "Piet"], + "present": ["Jan", "Henk", "Piet", "Bert", "Gert"] + } # module check function async def check(self, _state): @@ -34,7 +45,8 @@ async def run(self): names = await self.get_names() colors = [(randint(128, 255), randint(128, 255), randint(128, 255)) for _ in names["present"]] scroll_y = 0 - scroll_speed = 8 + scroll_max_speed = 6 + scroll_speed = scroll_max_speed chosen = [] fonts = { "noto8": ImageFont.truetype(self.font_path, size=8), @@ -69,10 +81,10 @@ async def run(self): if scroll_y > len(names["present"]) * 12: scroll_y = 1 - draw.rectangle([(0, 10), (95, 22)], fill=None, outline="cyan", width=1) + draw.rectangle([(0, 10), (95, 22)], fill=None, outline=(0, 128, 255), width=1) - if scroll_speed > 1 and elapsed % 1 < .05: - scroll_speed -= 1 + if scroll_speed > 1 and elapsed % 1 < .017: + scroll_speed -= 0.5 if scroll_speed <= 3 else 1 elif scroll_speed == 1 and (scroll_y + 10) % 12 == 0: center_index = floor((scroll_y + 10) / 12) if center_index == len(names["present"]): @@ -80,14 +92,22 @@ async def run(self): centered = names["present"][center_index] if centered in names["selected"]: - image = ImageOps.solarize(image, threshold=20) + draw.rectangle([(0, 10), (95, 22)], fill=None, outline=(255, 64, 0), width=1) + await self.output_image(image) + await asyncio.sleep(5) - image = ImageOps.solarize(image, threshold=-20) + image = ImageOps.solarize(image, threshold=30) + await self.output_image(image) + + await asyncio.sleep(0.25) + image = ImageOps.solarize(image, threshold=-30) + await self.output_image(image) + names["selected"].remove(centered) chosen.append(centered) elapsed = 15 scroll_y = 0 - scroll_speed = 8 + scroll_speed = scroll_max_speed else: for i, name in enumerate(chosen): draw.text((48, 5 + 11 * i), name, fill=colors[i], anchor="mm", font=fonts["noto11"]) @@ -97,5 +117,5 @@ async def run(self): draw.rectangle([(89, y - 8), (94, y - 4)], fill="blue") await self.output_image(image) - await asyncio.sleep(.05) - elapsed += .05 + await asyncio.sleep(.017) + elapsed += .017 From e4ca8430bb51b6147841494cb329726fc811f6d8 Mon Sep 17 00:00:00 2001 From: ILoveAndLikePizza Date: Sat, 3 Feb 2024 12:10:11 +0100 Subject: [PATCH 2/4] Fuck Pylint --- states/djo/corvee.mod.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/states/djo/corvee.mod.py b/states/djo/corvee.mod.py index fd2d9dd..523612e 100644 --- a/states/djo/corvee.mod.py +++ b/states/djo/corvee.mod.py @@ -21,7 +21,7 @@ async def get_names(self): try: response = await self.client.get( "https://corvee.djoamersfoort.nl/api/v1/selected", - headers={"Authorization": f"Bearer {environ.get("API_TOKEN")}"}, + headers={"Authorization": f"Bearer {environ.get('API_TOKEN')}"}, timeout=5 ) except httpx.RequestError: From b798801b16984e83f59793880908327474e3c48f Mon Sep 17 00:00:00 2001 From: ILoveAndLikePizza Date: Sat, 3 Feb 2024 12:14:42 +0100 Subject: [PATCH 3/4] Fuck Pylint again --- states/djo/corvee.mod.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/states/djo/corvee.mod.py b/states/djo/corvee.mod.py index 523612e..cc3eba4 100644 --- a/states/djo/corvee.mod.py +++ b/states/djo/corvee.mod.py @@ -27,11 +27,10 @@ async def get_names(self): except httpx.RequestError: return {} return response.json() - else: - return { - "selected": ["Jan", "Henk", "Piet"], - "present": ["Jan", "Henk", "Piet", "Bert", "Gert"] - } + return { + "selected": ["Jan", "Henk", "Piet"], + "present": ["Jan", "Henk", "Piet", "Bert", "Gert"] + } # module check function async def check(self, _state): From 37e83651db87a1a952b057c1eef684668197f009 Mon Sep 17 00:00:00 2001 From: ILoveAndLikePizza Date: Sat, 3 Feb 2024 12:25:51 +0100 Subject: [PATCH 4/4] Fix 'on_pi' property --- states/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/states/base.py b/states/base.py index d49bf1a..0ee7dea 100644 --- a/states/base.py +++ b/states/base.py @@ -1,6 +1,6 @@ from abc import abstractmethod from os import environ -from shutil import which +from socket import gethostname from typing import List import httpx @@ -19,7 +19,7 @@ class BaseState: def __init__(self, stdout): super().__init__() self.killed = False - self.on_pi = which("rpi-update") + self.on_pi = gethostname() == "lichtkrant" self.player_class = None self.game_meta = None self.font_path = "./static/fonts/NotoMono-Regular.ttf"