mirror of
https://github.com/ChuckBuilds/LEDMatrix.git
synced 2026-04-12 05:42:59 +00:00
Add comprehensive debug logging for odds ticker dynamic duration
- Added debug logging to _fetch_upcoming_games() to track data fetching - Added debug logging to _create_ticker_image() to track image creation - Added logging for favorite teams, odds filtering, and game counts - Added logging for total_scroll_width calculation - This will help identify why dynamic duration is falling back to minimum
This commit is contained in:
@@ -265,6 +265,9 @@ class OddsTickerManager:
|
|||||||
now = datetime.now(timezone.utc)
|
now = datetime.now(timezone.utc)
|
||||||
|
|
||||||
logger.debug(f"Fetching upcoming games for {len(self.enabled_leagues)} enabled leagues")
|
logger.debug(f"Fetching upcoming games for {len(self.enabled_leagues)} enabled leagues")
|
||||||
|
logger.debug(f"Enabled leagues: {self.enabled_leagues}")
|
||||||
|
logger.debug(f"Show favorite teams only: {self.show_favorite_teams_only}")
|
||||||
|
logger.debug(f"Show odds only: {self.show_odds_only}")
|
||||||
|
|
||||||
for league_key in self.enabled_leagues:
|
for league_key in self.enabled_leagues:
|
||||||
if league_key not in self.league_configs:
|
if league_key not in self.league_configs:
|
||||||
@@ -283,15 +286,18 @@ class OddsTickerManager:
|
|||||||
if self.show_favorite_teams_only:
|
if self.show_favorite_teams_only:
|
||||||
# For each favorite team, find their next N games
|
# For each favorite team, find their next N games
|
||||||
favorite_teams = league_config.get('favorite_teams', [])
|
favorite_teams = league_config.get('favorite_teams', [])
|
||||||
|
logger.debug(f"Favorite teams for {league_key}: {favorite_teams}")
|
||||||
seen_game_ids = set()
|
seen_game_ids = set()
|
||||||
for team in favorite_teams:
|
for team in favorite_teams:
|
||||||
# Find games where this team is home or away
|
# Find games where this team is home or away
|
||||||
team_games = [g for g in all_games if (g['home_team'] == team or g['away_team'] == team)]
|
team_games = [g for g in all_games if (g['home_team'] == team or g['away_team'] == team)]
|
||||||
|
logger.debug(f"Found {len(team_games)} games for team {team}")
|
||||||
# Sort by start_time
|
# Sort by start_time
|
||||||
team_games.sort(key=lambda x: x.get('start_time', datetime.max))
|
team_games.sort(key=lambda x: x.get('start_time', datetime.max))
|
||||||
# Only keep games with odds if show_odds_only is set
|
# Only keep games with odds if show_odds_only is set
|
||||||
if self.show_odds_only:
|
if self.show_odds_only:
|
||||||
team_games = [g for g in team_games if g.get('odds')]
|
team_games = [g for g in team_games if g.get('odds')]
|
||||||
|
logger.debug(f"After odds filter: {len(team_games)} games for team {team}")
|
||||||
# Take the next N games for this team
|
# Take the next N games for this team
|
||||||
for g in team_games[:self.games_per_favorite_team]:
|
for g in team_games[:self.games_per_favorite_team]:
|
||||||
if g['id'] not in seen_game_ids:
|
if g['id'] not in seen_game_ids:
|
||||||
@@ -314,11 +320,14 @@ class OddsTickerManager:
|
|||||||
# (Other sort options can be added here)
|
# (Other sort options can be added here)
|
||||||
|
|
||||||
games_data.extend(league_games)
|
games_data.extend(league_games)
|
||||||
|
logger.debug(f"Added {len(league_games)} games from {league_key}")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Error fetching games for {league_key}: {e}")
|
logger.error(f"Error fetching games for {league_key}: {e}")
|
||||||
|
|
||||||
logger.debug(f"Total games found: {len(games_data)}")
|
logger.debug(f"Total games found: {len(games_data)}")
|
||||||
|
if games_data:
|
||||||
|
logger.debug(f"Sample game data keys: {list(games_data[0].keys())}")
|
||||||
return games_data
|
return games_data
|
||||||
|
|
||||||
def _fetch_league_games(self, league_config: Dict[str, Any], now: datetime) -> List[Dict[str, Any]]:
|
def _fetch_league_games(self, league_config: Dict[str, Any], now: datetime) -> List[Dict[str, Any]]:
|
||||||
@@ -1141,6 +1150,8 @@ class OddsTickerManager:
|
|||||||
def _create_ticker_image(self):
|
def _create_ticker_image(self):
|
||||||
"""Create a single wide image containing all game tickers."""
|
"""Create a single wide image containing all game tickers."""
|
||||||
logger.debug("Entering _create_ticker_image method")
|
logger.debug("Entering _create_ticker_image method")
|
||||||
|
logger.debug(f"Number of games in games_data: {len(self.games_data) if self.games_data else 0}")
|
||||||
|
|
||||||
if not self.games_data:
|
if not self.games_data:
|
||||||
logger.warning("No games data available, cannot create ticker image.")
|
logger.warning("No games data available, cannot create ticker image.")
|
||||||
self.ticker_image = None
|
self.ticker_image = None
|
||||||
@@ -1148,6 +1159,8 @@ class OddsTickerManager:
|
|||||||
|
|
||||||
logger.debug(f"Creating ticker image for {len(self.games_data)} games.")
|
logger.debug(f"Creating ticker image for {len(self.games_data)} games.")
|
||||||
game_images = [self._create_game_display(game) for game in self.games_data]
|
game_images = [self._create_game_display(game) for game in self.games_data]
|
||||||
|
logger.debug(f"Created {len(game_images)} game images")
|
||||||
|
|
||||||
if not game_images:
|
if not game_images:
|
||||||
logger.warning("Failed to create any game images.")
|
logger.warning("Failed to create any game images.")
|
||||||
self.ticker_image = None
|
self.ticker_image = None
|
||||||
@@ -1159,6 +1172,13 @@ class OddsTickerManager:
|
|||||||
total_width = display_width + content_width
|
total_width = display_width + content_width
|
||||||
height = self.display_manager.matrix.height
|
height = self.display_manager.matrix.height
|
||||||
|
|
||||||
|
logger.debug(f"Image creation details:")
|
||||||
|
logger.debug(f" Display width: {display_width}px")
|
||||||
|
logger.debug(f" Content width: {content_width}px")
|
||||||
|
logger.debug(f" Total image width: {total_width}px")
|
||||||
|
logger.debug(f" Number of games: {len(game_images)}")
|
||||||
|
logger.debug(f" Gap width: {gap_width}px")
|
||||||
|
|
||||||
self.ticker_image = Image.new('RGB', (total_width, height), color=(0, 0, 0))
|
self.ticker_image = Image.new('RGB', (total_width, height), color=(0, 0, 0))
|
||||||
|
|
||||||
current_x = display_width # Start after the black space
|
current_x = display_width # Start after the black space
|
||||||
@@ -1180,6 +1200,7 @@ class OddsTickerManager:
|
|||||||
logger.debug(f" Total image width: {total_width}px")
|
logger.debug(f" Total image width: {total_width}px")
|
||||||
logger.debug(f" Number of games: {len(game_images)}")
|
logger.debug(f" Number of games: {len(game_images)}")
|
||||||
logger.debug(f" Gap width: {gap_width}px")
|
logger.debug(f" Gap width: {gap_width}px")
|
||||||
|
logger.debug(f" Set total_scroll_width to: {self.total_scroll_width}px")
|
||||||
self.calculate_dynamic_duration()
|
self.calculate_dynamic_duration()
|
||||||
|
|
||||||
def _draw_text_with_outline(self, draw: ImageDraw.Draw, text: str, position: tuple, font: ImageFont.FreeTypeFont,
|
def _draw_text_with_outline(self, draw: ImageDraw.Draw, text: str, position: tuple, font: ImageFont.FreeTypeFont,
|
||||||
|
|||||||
Reference in New Issue
Block a user