mirror of
https://github.com/ChuckBuilds/LEDMatrix.git
synced 2026-04-10 21:03:01 +00:00
live priority rotation fix
This commit is contained in:
@@ -893,9 +893,9 @@ class DisplayController:
|
|||||||
# Check for live games and live_priority
|
# Check for live games and live_priority
|
||||||
has_live_games, live_sport_type = self._check_live_games()
|
has_live_games, live_sport_type = self._check_live_games()
|
||||||
is_currently_live = self.current_display_mode.endswith('_live')
|
is_currently_live = self.current_display_mode.endswith('_live')
|
||||||
# Determine if any sport has live_priority True and live games
|
|
||||||
live_priority_takeover = False
|
# Collect all sports with live_priority=True that have live games
|
||||||
live_priority_sport = None
|
live_priority_sports = []
|
||||||
for sport, attr, priority in [
|
for sport, attr, priority in [
|
||||||
('nhl', 'nhl_live', self.nhl_live_priority),
|
('nhl', 'nhl_live', self.nhl_live_priority),
|
||||||
('nba', 'nba_live', self.nba_live_priority),
|
('nba', 'nba_live', self.nba_live_priority),
|
||||||
@@ -915,63 +915,79 @@ class DisplayController:
|
|||||||
priority and
|
priority and
|
||||||
live_games is not None and
|
live_games is not None and
|
||||||
len(live_games) > 0):
|
len(live_games) > 0):
|
||||||
live_priority_takeover = True
|
live_priority_sports.append(sport)
|
||||||
live_priority_sport = sport
|
logger.debug(f"Live priority sport found: {sport} with {len(live_games)} live games")
|
||||||
logger.debug(f"Live priority takeover triggered by {sport} with {len(live_games)} live games")
|
|
||||||
break
|
|
||||||
elif manager is not None and priority and live_games is not None:
|
elif manager is not None and priority and live_games is not None:
|
||||||
logger.debug(f"{sport} has live_priority=True but {len(live_games)} live games (not taking over)")
|
logger.debug(f"{sport} has live_priority=True but {len(live_games)} live games (not taking over)")
|
||||||
|
|
||||||
|
# Determine if we have any live priority sports
|
||||||
|
live_priority_takeover = len(live_priority_sports) > 0
|
||||||
|
|
||||||
manager_to_display = None
|
manager_to_display = None
|
||||||
# --- State Machine for Display Logic ---
|
# --- State Machine for Display Logic ---
|
||||||
if is_currently_live:
|
if is_currently_live:
|
||||||
if live_priority_takeover:
|
if live_priority_takeover:
|
||||||
# Only allow takeover if live_priority is True for the sport
|
# Check if we need to rotate to the next live priority sport
|
||||||
if current_time - self.last_switch >= self.get_current_duration():
|
current_sport_type = self.current_display_mode.replace('_live', '')
|
||||||
new_mode = f"{live_priority_sport}_live"
|
|
||||||
if self.current_display_mode != new_mode:
|
# If current sport is not in live priority sports, switch to first one
|
||||||
logger.info(f"Switching to only active live sport: {new_mode} from {self.current_display_mode}")
|
if current_sport_type not in live_priority_sports:
|
||||||
|
next_sport = live_priority_sports[0]
|
||||||
|
new_mode = f"{next_sport}_live"
|
||||||
|
logger.info(f"Current live sport {current_sport_type} no longer has priority, switching to {new_mode}")
|
||||||
|
self.current_display_mode = new_mode
|
||||||
|
if hasattr(self, '_last_logged_duration'):
|
||||||
|
delattr(self, '_last_logged_duration')
|
||||||
|
self.force_clear = True
|
||||||
|
self.last_switch = current_time
|
||||||
|
manager_to_display = getattr(self, f"{next_sport}_live", None)
|
||||||
|
else:
|
||||||
|
# Check if duration has elapsed for current sport
|
||||||
|
current_duration = self.get_current_duration()
|
||||||
|
if current_time - self.last_switch >= current_duration:
|
||||||
|
# Find next sport in rotation
|
||||||
|
current_index = live_priority_sports.index(current_sport_type)
|
||||||
|
next_index = (current_index + 1) % len(live_priority_sports)
|
||||||
|
next_sport = live_priority_sports[next_index]
|
||||||
|
new_mode = f"{next_sport}_live"
|
||||||
|
|
||||||
|
logger.info(f"Rotating live priority sports: {current_sport_type} -> {next_sport} (duration: {current_duration}s)")
|
||||||
self.current_display_mode = new_mode
|
self.current_display_mode = new_mode
|
||||||
# Reset logged duration when mode changes
|
|
||||||
if hasattr(self, '_last_logged_duration'):
|
if hasattr(self, '_last_logged_duration'):
|
||||||
delattr(self, '_last_logged_duration')
|
delattr(self, '_last_logged_duration')
|
||||||
self.force_clear = True
|
self.force_clear = True
|
||||||
|
self.last_switch = current_time
|
||||||
|
manager_to_display = getattr(self, f"{next_sport}_live", None)
|
||||||
else:
|
else:
|
||||||
self.force_clear = False
|
self.force_clear = False
|
||||||
self.last_switch = current_time
|
manager_to_display = getattr(self, f"{current_sport_type}_live", None)
|
||||||
manager_to_display = getattr(self, f"{live_priority_sport}_live", None)
|
|
||||||
else:
|
|
||||||
self.force_clear = False
|
|
||||||
current_sport_type = self.current_display_mode.replace('_live', '')
|
|
||||||
manager_to_display = getattr(self, f"{current_sport_type}_live", None)
|
|
||||||
else:
|
else:
|
||||||
# If no sport has live_priority takeover, treat as regular rotation
|
# If no sport has live_priority takeover, treat as regular rotation
|
||||||
is_currently_live = False
|
is_currently_live = False
|
||||||
if not is_currently_live:
|
if not is_currently_live:
|
||||||
previous_mode_before_switch = self.current_display_mode
|
previous_mode_before_switch = self.current_display_mode
|
||||||
if live_priority_takeover:
|
if live_priority_takeover:
|
||||||
new_mode = f"{live_priority_sport}_live"
|
# Switch to first live priority sport
|
||||||
if self.current_display_mode != new_mode:
|
next_sport = live_priority_sports[0]
|
||||||
# Double-check that the manager actually has live games before switching
|
new_mode = f"{next_sport}_live"
|
||||||
target_manager = getattr(self, f"{live_priority_sport}_live", None)
|
|
||||||
if target_manager and hasattr(target_manager, 'live_games') and len(target_manager.live_games) > 0:
|
# Double-check that the manager actually has live games before switching
|
||||||
logger.info(f"Live priority takeover: Switching to {new_mode} from {self.current_display_mode}")
|
target_manager = getattr(self, f"{next_sport}_live", None)
|
||||||
logger.debug(f"[DisplayController] Live priority takeover details: sport={live_priority_sport}, manager={target_manager}, live_games={target_manager.live_games}")
|
if target_manager and hasattr(target_manager, 'live_games') and len(target_manager.live_games) > 0:
|
||||||
if previous_mode_before_switch == 'music' and self.music_manager:
|
logger.info(f"Live priority takeover: Switching to {new_mode} from {self.current_display_mode}")
|
||||||
self.music_manager.deactivate_music_display()
|
logger.debug(f"[DisplayController] Live priority takeover details: sport={next_sport}, manager={target_manager}, live_games={target_manager.live_games}")
|
||||||
self.current_display_mode = new_mode
|
if previous_mode_before_switch == 'music' and self.music_manager:
|
||||||
# Reset logged duration when mode changes
|
self.music_manager.deactivate_music_display()
|
||||||
if hasattr(self, '_last_logged_duration'):
|
self.current_display_mode = new_mode
|
||||||
delattr(self, '_last_logged_duration')
|
# Reset logged duration when mode changes
|
||||||
self.force_clear = True
|
if hasattr(self, '_last_logged_duration'):
|
||||||
self.last_switch = current_time
|
delattr(self, '_last_logged_duration')
|
||||||
manager_to_display = target_manager
|
self.force_clear = True
|
||||||
else:
|
|
||||||
logger.warning(f"[DisplayController] Live priority takeover attempted for {new_mode} but manager has no live games, skipping takeover")
|
|
||||||
live_priority_takeover = False
|
|
||||||
else:
|
|
||||||
self.force_clear = False
|
|
||||||
self.last_switch = current_time
|
self.last_switch = current_time
|
||||||
manager_to_display = getattr(self, f"{live_priority_sport}_live", None)
|
manager_to_display = target_manager
|
||||||
|
else:
|
||||||
|
logger.warning(f"[DisplayController] Live priority takeover attempted for {new_mode} but manager has no live games, skipping takeover")
|
||||||
|
live_priority_takeover = False
|
||||||
else:
|
else:
|
||||||
# No live_priority takeover, regular rotation
|
# No live_priority takeover, regular rotation
|
||||||
needs_switch = False
|
needs_switch = False
|
||||||
@@ -1005,91 +1021,95 @@ class DisplayController:
|
|||||||
# Reset logged duration when mode changes
|
# Reset logged duration when mode changes
|
||||||
if hasattr(self, '_last_logged_duration'):
|
if hasattr(self, '_last_logged_duration'):
|
||||||
delattr(self, '_last_logged_duration')
|
delattr(self, '_last_logged_duration')
|
||||||
|
else:
|
||||||
|
needs_switch = False
|
||||||
if needs_switch:
|
if needs_switch:
|
||||||
self.force_clear = True
|
self.force_clear = True
|
||||||
self.last_switch = current_time
|
self.last_switch = current_time
|
||||||
else:
|
else:
|
||||||
self.force_clear = False
|
self.force_clear = False
|
||||||
# Select the manager for the current regular mode
|
# Only set manager_to_display if it hasn't been set by live priority logic
|
||||||
if self.current_display_mode == 'clock' and self.clock:
|
if manager_to_display is None:
|
||||||
manager_to_display = self.clock
|
if self.current_display_mode == 'clock' and self.clock:
|
||||||
elif self.current_display_mode == 'weather_current' and self.weather:
|
manager_to_display = self.clock
|
||||||
manager_to_display = self.weather
|
elif self.current_display_mode == 'weather_current' and self.weather:
|
||||||
elif self.current_display_mode == 'weather_hourly' and self.weather:
|
manager_to_display = self.weather
|
||||||
manager_to_display = self.weather
|
elif self.current_display_mode == 'weather_hourly' and self.weather:
|
||||||
elif self.current_display_mode == 'weather_daily' and self.weather:
|
manager_to_display = self.weather
|
||||||
manager_to_display = self.weather
|
elif self.current_display_mode == 'weather_daily' and self.weather:
|
||||||
elif self.current_display_mode == 'stocks' and self.stocks:
|
manager_to_display = self.weather
|
||||||
manager_to_display = self.stocks
|
elif self.current_display_mode == 'stocks' and self.stocks:
|
||||||
elif self.current_display_mode == 'stock_news' and self.news:
|
manager_to_display = self.stocks
|
||||||
manager_to_display = self.news
|
elif self.current_display_mode == 'stock_news' and self.news:
|
||||||
elif self.current_display_mode == 'odds_ticker' and self.odds_ticker:
|
manager_to_display = self.news
|
||||||
manager_to_display = self.odds_ticker
|
elif self.current_display_mode == 'odds_ticker' and self.odds_ticker:
|
||||||
elif self.current_display_mode == 'calendar' and self.calendar:
|
manager_to_display = self.odds_ticker
|
||||||
manager_to_display = self.calendar
|
elif self.current_display_mode == 'calendar' and self.calendar:
|
||||||
elif self.current_display_mode == 'youtube' and self.youtube:
|
manager_to_display = self.calendar
|
||||||
manager_to_display = self.youtube
|
elif self.current_display_mode == 'youtube' and self.youtube:
|
||||||
elif self.current_display_mode == 'text_display' and self.text_display:
|
manager_to_display = self.youtube
|
||||||
manager_to_display = self.text_display
|
elif self.current_display_mode == 'text_display' and self.text_display:
|
||||||
elif self.current_display_mode == 'of_the_day' and self.of_the_day:
|
manager_to_display = self.text_display
|
||||||
manager_to_display = self.of_the_day
|
elif self.current_display_mode == 'of_the_day' and self.of_the_day:
|
||||||
elif self.current_display_mode == 'news_manager' and self.news_manager:
|
manager_to_display = self.of_the_day
|
||||||
manager_to_display = self.news_manager
|
elif self.current_display_mode == 'news_manager' and self.news_manager:
|
||||||
elif self.current_display_mode == 'nhl_recent' and self.nhl_recent:
|
manager_to_display = self.news_manager
|
||||||
manager_to_display = self.nhl_recent
|
elif self.current_display_mode == 'nhl_recent' and self.nhl_recent:
|
||||||
elif self.current_display_mode == 'nhl_upcoming' and self.nhl_upcoming:
|
manager_to_display = self.nhl_recent
|
||||||
manager_to_display = self.nhl_upcoming
|
elif self.current_display_mode == 'nhl_upcoming' and self.nhl_upcoming:
|
||||||
elif self.current_display_mode == 'nhl_live' and self.nhl_live:
|
manager_to_display = self.nhl_upcoming
|
||||||
manager_to_display = self.nhl_live
|
elif self.current_display_mode == 'nba_recent' and self.nba_recent:
|
||||||
elif self.current_display_mode == 'nba_recent' and self.nba_recent:
|
manager_to_display = self.nba_recent
|
||||||
manager_to_display = self.nba_recent
|
elif self.current_display_mode == 'nba_upcoming' and self.nba_upcoming:
|
||||||
elif self.current_display_mode == 'nba_upcoming' and self.nba_upcoming:
|
manager_to_display = self.nba_upcoming
|
||||||
manager_to_display = self.nba_upcoming
|
elif self.current_display_mode == 'nfl_recent' and self.nfl_recent:
|
||||||
elif self.current_display_mode == 'nba_live' and self.nba_live:
|
manager_to_display = self.nfl_recent
|
||||||
manager_to_display = self.nba_live
|
elif self.current_display_mode == 'nfl_upcoming' and self.nfl_upcoming:
|
||||||
elif self.current_display_mode == 'mlb_recent' and self.mlb_recent:
|
manager_to_display = self.nfl_upcoming
|
||||||
manager_to_display = self.mlb_recent
|
elif self.current_display_mode == 'ncaa_fb_recent' and self.ncaa_fb_recent:
|
||||||
elif self.current_display_mode == 'mlb_upcoming' and self.mlb_upcoming:
|
manager_to_display = self.ncaa_fb_recent
|
||||||
manager_to_display = self.mlb_upcoming
|
elif self.current_display_mode == 'ncaa_fb_upcoming' and self.ncaa_fb_upcoming:
|
||||||
elif self.current_display_mode == 'mlb_live' and self.mlb_live:
|
manager_to_display = self.ncaa_fb_upcoming
|
||||||
manager_to_display = self.mlb_live
|
elif self.current_display_mode == 'ncaa_baseball_recent' and self.ncaa_baseball_recent:
|
||||||
elif self.current_display_mode == 'milb_recent' and self.milb_recent:
|
manager_to_display = self.ncaa_baseball_recent
|
||||||
manager_to_display = self.milb_recent
|
elif self.current_display_mode == 'ncaa_baseball_upcoming' and self.ncaa_baseball_upcoming:
|
||||||
elif self.current_display_mode == 'milb_upcoming' and self.milb_upcoming:
|
manager_to_display = self.ncaa_baseball_upcoming
|
||||||
manager_to_display = self.milb_upcoming
|
elif self.current_display_mode == 'ncaam_basketball_recent' and self.ncaam_basketball_recent:
|
||||||
elif self.current_display_mode == 'milb_live' and self.milb_live:
|
manager_to_display = self.ncaam_basketball_recent
|
||||||
manager_to_display = self.milb_live
|
elif self.current_display_mode == 'ncaam_basketball_upcoming' and self.ncaam_basketball_upcoming:
|
||||||
elif self.current_display_mode == 'soccer_recent' and self.soccer_recent:
|
manager_to_display = self.ncaam_basketball_upcoming
|
||||||
manager_to_display = self.soccer_recent
|
elif self.current_display_mode == 'mlb_recent' and self.mlb_recent:
|
||||||
elif self.current_display_mode == 'soccer_upcoming' and self.soccer_upcoming:
|
manager_to_display = self.mlb_recent
|
||||||
manager_to_display = self.soccer_upcoming
|
elif self.current_display_mode == 'mlb_upcoming' and self.mlb_upcoming:
|
||||||
elif self.current_display_mode == 'soccer_live' and self.soccer_live:
|
manager_to_display = self.mlb_upcoming
|
||||||
manager_to_display = self.soccer_live
|
elif self.current_display_mode == 'milb_recent' and self.milb_recent:
|
||||||
elif self.current_display_mode == 'nfl_recent' and self.nfl_recent:
|
manager_to_display = self.milb_recent
|
||||||
manager_to_display = self.nfl_recent
|
elif self.current_display_mode == 'milb_upcoming' and self.milb_upcoming:
|
||||||
elif self.current_display_mode == 'nfl_upcoming' and self.nfl_upcoming:
|
manager_to_display = self.milb_upcoming
|
||||||
manager_to_display = self.nfl_upcoming
|
elif self.current_display_mode == 'soccer_recent' and self.soccer_recent:
|
||||||
elif self.current_display_mode == 'nfl_live' and self.nfl_live:
|
manager_to_display = self.soccer_recent
|
||||||
manager_to_display = self.nfl_live
|
elif self.current_display_mode == 'soccer_upcoming' and self.soccer_upcoming:
|
||||||
elif self.current_display_mode == 'ncaa_fb_recent' and self.ncaa_fb_recent:
|
manager_to_display = self.soccer_upcoming
|
||||||
manager_to_display = self.ncaa_fb_recent
|
elif self.current_display_mode == 'music' and self.music_manager:
|
||||||
elif self.current_display_mode == 'ncaa_fb_upcoming' and self.ncaa_fb_upcoming:
|
manager_to_display = self.music_manager
|
||||||
manager_to_display = self.ncaa_fb_upcoming
|
elif self.current_display_mode == 'nhl_live' and self.nhl_live:
|
||||||
elif self.current_display_mode == 'ncaa_fb_live' and self.ncaa_fb_live:
|
manager_to_display = self.nhl_live
|
||||||
manager_to_display = self.ncaa_fb_live
|
elif self.current_display_mode == 'nba_live' and self.nba_live:
|
||||||
elif self.current_display_mode == 'ncaa_baseball_recent' and self.ncaa_baseball_recent:
|
manager_to_display = self.nba_live
|
||||||
manager_to_display = self.ncaa_baseball_recent
|
elif self.current_display_mode == 'nfl_live' and self.nfl_live:
|
||||||
elif self.current_display_mode == 'ncaa_baseball_upcoming' and self.ncaa_baseball_upcoming:
|
manager_to_display = self.nfl_live
|
||||||
manager_to_display = self.ncaa_baseball_upcoming
|
elif self.current_display_mode == 'ncaa_fb_live' and self.ncaa_fb_live:
|
||||||
elif self.current_display_mode == 'ncaa_baseball_live' and self.ncaa_baseball_live:
|
manager_to_display = self.ncaa_fb_live
|
||||||
manager_to_display = self.ncaa_baseball_live
|
elif self.current_display_mode == 'ncaa_baseball_live' and self.ncaa_baseball_live:
|
||||||
elif self.current_display_mode == 'ncaam_basketball_recent' and self.ncaam_basketball_recent:
|
manager_to_display = self.ncaa_baseball_live
|
||||||
manager_to_display = self.ncaam_basketball_recent
|
elif self.current_display_mode == 'ncaam_basketball_live' and self.ncaam_basketball_live:
|
||||||
elif self.current_display_mode == 'ncaam_basketball_upcoming' and self.ncaam_basketball_upcoming:
|
manager_to_display = self.ncaam_basketball_live
|
||||||
manager_to_display = self.ncaam_basketball_upcoming
|
elif self.current_display_mode == 'mlb_live' and self.mlb_live:
|
||||||
elif self.current_display_mode == 'ncaam_basketball_live' and self.ncaam_basketball_live:
|
manager_to_display = self.mlb_live
|
||||||
manager_to_display = self.ncaam_basketball_live
|
elif self.current_display_mode == 'milb_live' and self.milb_live:
|
||||||
|
manager_to_display = self.milb_live
|
||||||
|
elif self.current_display_mode == 'soccer_live' and self.soccer_live:
|
||||||
|
manager_to_display = self.soccer_live
|
||||||
|
|
||||||
# --- Perform Display Update ---
|
# --- Perform Display Update ---
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user