refactor: Update soccer scorebug layout

This commit is contained in:
ChuckBuilds
2025-04-30 14:39:44 -05:00
parent 1e0c58d077
commit a6548c3442

View File

@@ -5,6 +5,7 @@ import requests
import json import json
from typing import Dict, Any, Optional, List from typing import Dict, Any, Optional, List
from PIL import Image, ImageDraw, ImageFont from PIL import Image, ImageDraw, ImageFont
import random # Import random for placeholder logo generation
from pathlib import Path from pathlib import Path
from datetime import datetime, timedelta, timezone from datetime import datetime, timedelta, timezone
from src.display_manager import DisplayManager from src.display_manager import DisplayManager
@@ -133,7 +134,7 @@ class BaseSoccerManager:
today = datetime.now(timezone.utc).date() today = datetime.now(timezone.utc).date()
dates_to_fetch = [ dates_to_fetch = [
(today - timedelta(days=1)).strftime('%Y%m%d'), # Yesterday (today - timedelta(days=1)).strftime('%Y%m%d'), # Yesterday
today.strftime('%Y%m%d'), # Today today.strftime('%Ym%d'), # Today
(today + timedelta(days=1)).strftime('%Y%m%d') # Tomorrow (for upcoming) (today + timedelta(days=1)).strftime('%Y%m%d') # Tomorrow (for upcoming)
] ]
if date_str and date_str not in dates_to_fetch: if date_str and date_str not in dates_to_fetch:
@@ -219,10 +220,10 @@ class BaseSoccerManager:
"""Load fonts used by the scoreboard.""" """Load fonts used by the scoreboard."""
fonts = {} fonts = {}
try: try:
fonts['score'] = ImageFont.truetype("assets/fonts/PressStart2P-Regular.ttf", 8) # Smaller score fonts['score'] = ImageFont.truetype("assets/fonts/PressStart2P-Regular.ttf", 10) # Slightly larger score
fonts['time'] = ImageFont.truetype("assets/fonts/PressStart2P-Regular.ttf", 8) fonts['time'] = ImageFont.truetype("assets/fonts/PressStart2P-Regular.ttf", 8)
fonts['team'] = ImageFont.truetype("assets/fonts/4x6-font.ttf", 6) # Even smaller team abbr fonts['team'] = ImageFont.truetype("assets/fonts/4x6-font.ttf", 6) # Keep team abbr small
fonts['status'] = ImageFont.truetype("assets/fonts/4x6-font.ttf", 6) # Small status fonts['status'] = ImageFont.truetype("assets/fonts/4x6-font.ttf", 6) # Keep status small
logging.info("[Soccer] Successfully loaded custom fonts") logging.info("[Soccer] Successfully loaded custom fonts")
except IOError: except IOError:
logging.warning("[Soccer] Custom fonts not found, using default PIL font.") logging.warning("[Soccer] Custom fonts not found, using default PIL font.")
@@ -253,11 +254,17 @@ class BaseSoccerManager:
if not os.path.exists(logo_path): if not os.path.exists(logo_path):
self.logger.info(f"Creating placeholder logo for {team_abbrev}") self.logger.info(f"Creating placeholder logo for {team_abbrev}")
os.makedirs(os.path.dirname(logo_path), exist_ok=True) os.makedirs(os.path.dirname(logo_path), exist_ok=True)
logo = Image.new('RGBA', (24, 24), (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255), 255)) # Smaller default logo logo = Image.new('RGBA', (36, 36), (random.randint(50, 200), random.randint(50, 200), random.randint(50, 200), 255))
draw = ImageDraw.Draw(logo) draw = ImageDraw.Draw(logo)
# Simple placeholder: colored square # Optionally add text to placeholder
# Optionally add text, but keep it simple try:
# draw.text((2, 2), team_abbrev[:3], fill=(0,0,0,255)) # Draw abbreviation if needed placeholder_font = ImageFont.truetype("assets/fonts/4x6-font.ttf", 12)
text_width = draw.textlength(team_abbrev, font=placeholder_font)
text_x = (36 - text_width) // 2
text_y = 10
draw.text((text_x, text_y), team_abbrev, fill=(0,0,0,255), font=placeholder_font)
except IOError:
pass # Font not found, skip text
logo.save(logo_path) logo.save(logo_path)
self.logger.info(f"Created placeholder logo at {logo_path}") self.logger.info(f"Created placeholder logo at {logo_path}")
@@ -265,9 +272,10 @@ class BaseSoccerManager:
if logo.mode != 'RGBA': if logo.mode != 'RGBA':
logo = logo.convert('RGBA') logo = logo.convert('RGBA')
# Resize logo to fit better in soccer layout (e.g., 16x16 or 20x20) # Resize logo to target size
target_size = 20 # Smaller logos for soccer target_size = 36 # Change target size to 36x36
logo.thumbnail((target_size, target_size), Image.Resampling.LANCZOS) # Use resize instead of thumbnail to force size if image is smaller
logo = logo.resize((target_size, target_size), Image.Resampling.LANCZOS)
self.logger.debug(f"Resized {team_abbrev} logo to {logo.size}") self.logger.debug(f"Resized {team_abbrev} logo to {logo.size}")
self._logo_cache[team_abbrev] = logo self._logo_cache[team_abbrev] = logo
@@ -302,7 +310,10 @@ class BaseSoccerManager:
clock_parts = clock.split(':') clock_parts = clock.split(':')
return f"{clock_parts[0]}'" # Display as minutes' return f"{clock_parts[0]}'" # Display as minutes'
else: else:
return clock # Fallback # Handle potential stoppage time format like "90:00+2"
if '+' in clock:
clock = clock.replace(':00', '') # Remove :00 for cleaner look
return clock
return clock # Default fallback return clock # Default fallback