mirror of
https://github.com/ChuckBuilds/LEDMatrix.git
synced 2026-04-13 05:53:00 +00:00
Implement game rotation for favorite teams in recent and upcoming displays
This commit is contained in:
@@ -421,6 +421,8 @@ class NHLRecentManager(BaseNHLManager):
|
|||||||
self.logger.info("Initialized NHL Recent Manager")
|
self.logger.info("Initialized NHL Recent Manager")
|
||||||
self.recent_hours = self.nhl_config.get("recent_game_hours", 48) # Default 48 hours
|
self.recent_hours = self.nhl_config.get("recent_game_hours", 48) # Default 48 hours
|
||||||
self.current_game = None
|
self.current_game = None
|
||||||
|
self.games_list = [] # List to store all recent games
|
||||||
|
self.current_game_index = 0 # Index to track which game to show
|
||||||
# Override test_mode to always use real data for recent games
|
# Override test_mode to always use real data for recent games
|
||||||
self.test_mode = False
|
self.test_mode = False
|
||||||
logging.info("[NHL] Initialized NHLRecentManager in live mode")
|
logging.info("[NHL] Initialized NHLRecentManager in live mode")
|
||||||
@@ -429,7 +431,7 @@ class NHLRecentManager(BaseNHLManager):
|
|||||||
"""Update recent game data."""
|
"""Update recent game data."""
|
||||||
current_time = time.time()
|
current_time = time.time()
|
||||||
# Use longer interval if no game data
|
# Use longer interval if no game data
|
||||||
interval = self.no_data_interval if not self.current_game else self.update_interval
|
interval = self.no_data_interval if not self.games_list else self.update_interval
|
||||||
|
|
||||||
if current_time - self.last_update >= interval:
|
if current_time - self.last_update >= interval:
|
||||||
self.logger.debug("Updating recent game data")
|
self.logger.debug("Updating recent game data")
|
||||||
@@ -451,9 +453,8 @@ class NHLRecentManager(BaseNHLManager):
|
|||||||
all_events.extend(data["events"])
|
all_events.extend(data["events"])
|
||||||
|
|
||||||
if all_events:
|
if all_events:
|
||||||
# Find the most recent completed game involving favorite teams
|
# Find all recent completed games involving favorite teams
|
||||||
most_recent_game = None
|
recent_games = []
|
||||||
most_recent_time = None
|
|
||||||
cutoff_time = datetime.now(timezone.utc) - timedelta(hours=self.recent_hours)
|
cutoff_time = datetime.now(timezone.utc) - timedelta(hours=self.recent_hours)
|
||||||
|
|
||||||
for event in all_events:
|
for event in all_events:
|
||||||
@@ -466,14 +467,27 @@ class NHLRecentManager(BaseNHLManager):
|
|||||||
details["home_abbr"] in self.favorite_teams or
|
details["home_abbr"] in self.favorite_teams or
|
||||||
details["away_abbr"] in self.favorite_teams
|
details["away_abbr"] in self.favorite_teams
|
||||||
):
|
):
|
||||||
# Keep the most recent game
|
recent_games.append(details)
|
||||||
if most_recent_time is None or details["start_time_utc"] > most_recent_time:
|
|
||||||
most_recent_game = details
|
|
||||||
most_recent_time = details["start_time_utc"]
|
|
||||||
|
|
||||||
self.current_game = most_recent_game
|
# Sort games by start time, most recent first
|
||||||
if most_recent_game:
|
recent_games.sort(key=lambda x: x["start_time_utc"], reverse=True)
|
||||||
logging.info(f"[NHL] Found recent game: {most_recent_game['away_abbr']} vs {most_recent_game['home_abbr']}")
|
|
||||||
|
if recent_games:
|
||||||
|
self.games_list = recent_games
|
||||||
|
# If we don't have a current game or it's not in the new list, start from the beginning
|
||||||
|
if not self.current_game or self.current_game not in self.games_list:
|
||||||
|
self.current_game_index = 0
|
||||||
|
else:
|
||||||
|
# Keep the same index if possible, otherwise reset to 0
|
||||||
|
try:
|
||||||
|
self.current_game_index = self.games_list.index(self.current_game)
|
||||||
|
except ValueError:
|
||||||
|
self.current_game_index = 0
|
||||||
|
|
||||||
|
# Rotate to the next game
|
||||||
|
self.current_game_index = (self.current_game_index + 1) % len(self.games_list)
|
||||||
|
self.current_game = self.games_list[self.current_game_index]
|
||||||
|
logging.info(f"[NHL] Rotating to recent game: {self.current_game['away_abbr']} vs {self.current_game['home_abbr']}")
|
||||||
else:
|
else:
|
||||||
logging.info("[NHL] No recent games found")
|
logging.info("[NHL] No recent games found")
|
||||||
else:
|
else:
|
||||||
@@ -494,12 +508,14 @@ class NHLUpcomingManager(BaseNHLManager):
|
|||||||
self.last_update = 0
|
self.last_update = 0
|
||||||
self.logger.info("Initialized NHL Upcoming Manager")
|
self.logger.info("Initialized NHL Upcoming Manager")
|
||||||
self.current_game = None
|
self.current_game = None
|
||||||
|
self.games_list = [] # List to store all upcoming games
|
||||||
|
self.current_game_index = 0 # Index to track which game to show
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
"""Update upcoming game data."""
|
"""Update upcoming game data."""
|
||||||
current_time = time.time()
|
current_time = time.time()
|
||||||
# Use longer interval if no game data
|
# Use longer interval if no game data
|
||||||
interval = self.no_data_interval if not self.current_game else self.update_interval
|
interval = self.no_data_interval if not self.games_list else self.update_interval
|
||||||
|
|
||||||
if current_time - self.last_update >= interval:
|
if current_time - self.last_update >= interval:
|
||||||
self.logger.debug("Updating upcoming game data")
|
self.logger.debug("Updating upcoming game data")
|
||||||
@@ -524,9 +540,8 @@ class NHLUpcomingManager(BaseNHLManager):
|
|||||||
if tomorrow_data and "events" in tomorrow_data:
|
if tomorrow_data and "events" in tomorrow_data:
|
||||||
all_events.extend(tomorrow_data["events"])
|
all_events.extend(tomorrow_data["events"])
|
||||||
|
|
||||||
# Find the next upcoming game involving favorite teams
|
# Find all upcoming games involving favorite teams
|
||||||
next_game = None
|
upcoming_games = []
|
||||||
next_game_time = None
|
|
||||||
|
|
||||||
for event in all_events:
|
for event in all_events:
|
||||||
details = self._extract_game_details(event)
|
details = self._extract_game_details(event)
|
||||||
@@ -536,14 +551,27 @@ class NHLUpcomingManager(BaseNHLManager):
|
|||||||
details["home_abbr"] in self.favorite_teams or
|
details["home_abbr"] in self.favorite_teams or
|
||||||
details["away_abbr"] in self.favorite_teams
|
details["away_abbr"] in self.favorite_teams
|
||||||
):
|
):
|
||||||
# Keep the soonest upcoming game
|
upcoming_games.append(details)
|
||||||
if next_game_time is None or details["start_time_utc"] < next_game_time:
|
|
||||||
next_game = details
|
|
||||||
next_game_time = details["start_time_utc"]
|
|
||||||
|
|
||||||
self.current_game = next_game
|
# Sort games by start time
|
||||||
if next_game:
|
upcoming_games.sort(key=lambda x: x["start_time_utc"])
|
||||||
logging.info(f"[NHL] Found upcoming game: {next_game['away_abbr']} vs {next_game['home_abbr']}")
|
|
||||||
|
if upcoming_games:
|
||||||
|
self.games_list = upcoming_games
|
||||||
|
# If we don't have a current game or it's not in the new list, start from the beginning
|
||||||
|
if not self.current_game or self.current_game not in self.games_list:
|
||||||
|
self.current_game_index = 0
|
||||||
|
else:
|
||||||
|
# Keep the same index if possible, otherwise reset to 0
|
||||||
|
try:
|
||||||
|
self.current_game_index = self.games_list.index(self.current_game)
|
||||||
|
except ValueError:
|
||||||
|
self.current_game_index = 0
|
||||||
|
|
||||||
|
# Rotate to the next game
|
||||||
|
self.current_game_index = (self.current_game_index + 1) % len(self.games_list)
|
||||||
|
self.current_game = self.games_list[self.current_game_index]
|
||||||
|
logging.info(f"[NHL] Rotating to upcoming game: {self.current_game['away_abbr']} vs {self.current_game['home_abbr']}")
|
||||||
else:
|
else:
|
||||||
logging.info("[NHL] No upcoming games found")
|
logging.info("[NHL] No upcoming games found")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user