Create Basketball Base Class and Consolidate Basketball Managers (#97)

* Create basketball Base class

* Migrate NBA

* Add NCAA Mens Basketball

* Add NCAA Women's Basketball

* Add WNBA

---------

Co-authored-by: Alex Resnick <adr8282@gmail.com>
This commit is contained in:
Alex Resnick
2025-10-05 14:22:00 -05:00
committed by GitHub
parent 3406234e00
commit fb38a5a814
13 changed files with 1416 additions and 1993 deletions

View File

@@ -23,6 +23,7 @@ from src.odds_ticker_manager import OddsTickerManager
from src.leaderboard_manager import LeaderboardManager
from src.nhl_managers import NHLLiveManager, NHLRecentManager, NHLUpcomingManager
from src.nba_managers import NBALiveManager, NBARecentManager, NBAUpcomingManager
from src.wnba_managers import WNBALiveManager, WNBARecentManager, WNBAUpcomingManager
from src.mlb_manager import MLBLiveManager, MLBRecentManager, MLBUpcomingManager
from src.milb_manager import MiLBLiveManager, MiLBRecentManager, MiLBUpcomingManager
from src.soccer_managers import SoccerLiveManager, SoccerRecentManager, SoccerUpcomingManager
@@ -30,6 +31,7 @@ from src.nfl_managers import NFLLiveManager, NFLRecentManager, NFLUpcomingManage
from src.ncaa_fb_managers import NCAAFBLiveManager, NCAAFBRecentManager, NCAAFBUpcomingManager
from src.ncaa_baseball_managers import NCAABaseballLiveManager, NCAABaseballRecentManager, NCAABaseballUpcomingManager
from src.ncaam_basketball_managers import NCAAMBasketballLiveManager, NCAAMBasketballRecentManager, NCAAMBasketballUpcomingManager
from src.ncaaw_basketball_managers import NCAAWBasketballLiveManager, NCAAWBasketballRecentManager, NCAAWBasketballUpcomingManager
from src.ncaam_hockey_managers import NCAAMHockeyLiveManager, NCAAMHockeyRecentManager, NCAAMHockeyUpcomingManager
from src.ncaaw_hockey_managers import NCAAWHockeyLiveManager, NCAAWHockeyRecentManager, NCAAWHockeyUpcomingManager
from src.youtube_display import YouTubeDisplay
@@ -134,6 +136,21 @@ class DisplayController:
self.nba_recent = None
self.nba_upcoming = None
logger.info("NBA managers initialized in %.3f seconds", time.time() - nba_time)
# Initialize WNBA managers if enabled
wnba_time = time.time()
wnba_enabled = self.config.get('wnba_scoreboard', {}).get('enabled', False)
wnba_display_modes = self.config.get('wnba_scoreboard', {}).get('display_modes', {})
if wnba_enabled:
self.wnba_live = WNBALiveManager(self.config, self.display_manager, self.cache_manager) if wnba_display_modes.get('wnba_live', True) else None
self.wnba_recent = WNBARecentManager(self.config, self.display_manager, self.cache_manager) if wnba_display_modes.get('wnba_recent', True) else None
self.wnba_upcoming = WNBAUpcomingManager(self.config, self.display_manager, self.cache_manager) if wnba_display_modes.get('wnba_upcoming', True) else None
else:
self.wnba_live = None
self.wnba_recent = None
self.wnba_upcoming = None
logger.info("WNBA managers initialized in %.3f seconds", time.time() - wnba_time)
# Initialize MLB managers if enabled
mlb_time = time.time()
@@ -242,6 +259,21 @@ class DisplayController:
self.ncaam_basketball_upcoming = None
logger.info("NCAA Men's Basketball managers initialized in %.3f seconds", time.time() - ncaam_basketball_time)
# Initialize NCAA Womens's Basketball managers if enabled
ncaaw_basketball_time = time.time()
ncaaw_basketball_enabled = self.config.get('ncaaw_basketball_scoreboard', {}).get('enabled', False)
ncaaw_basketball_display_modes = self.config.get('ncaaw_basketball_scoreboard', {}).get('display_modes', {})
if ncaaw_basketball_enabled:
self.ncaaw_basketball_live = NCAAWBasketballLiveManager(self.config, self.display_manager, self.cache_manager) if ncaaw_basketball_display_modes.get('ncaaw_basketball_live', True) else None
self.ncaaw_basketball_recent = NCAAWBasketballRecentManager(self.config, self.display_manager, self.cache_manager) if ncaaw_basketball_display_modes.get('ncaaw_basketball_recent', True) else None
self.ncaaw_basketball_upcoming = NCAAWBasketballUpcomingManager(self.config, self.display_manager, self.cache_manager) if ncaaw_basketball_display_modes.get('ncaaw_basketball_upcoming', True) else None
else:
self.ncaaw_basketball_live = None
self.ncaaw_basketball_recent = None
self.ncaaw_basketball_upcoming = None
logger.info("NCAA Womens's Basketball managers initialized in %.3f seconds", time.time() - ncaaw_basketball_time)
# Initialize NCAA Men's Hockey managers if enabled
ncaam_hockey_time = time.time()
ncaam_hockey_enabled = self.config.get('ncaam_hockey_scoreboard', {}).get('enabled', False)
@@ -281,6 +313,7 @@ class DisplayController:
# Read live_priority flags for all sports
self.nhl_live_priority = self.config.get('nhl_scoreboard', {}).get('live_priority', True)
self.nba_live_priority = self.config.get('nba_scoreboard', {}).get('live_priority', True)
self.wnba_live_priority = self.config.get('wnba_scoreboard', {}).get('live_priority', True)
self.mlb_live_priority = self.config.get('mlb_scoreboard', {}).get('live_priority', True)
self.milb_live_priority = self.config.get('milb_scoreboard', {}).get('live_priority', True)
self.soccer_live_priority = self.config.get('soccer_scoreboard', {}).get('live_priority', True)
@@ -288,6 +321,7 @@ class DisplayController:
self.ncaa_fb_live_priority = self.config.get('ncaa_fb_scoreboard', {}).get('live_priority', True)
self.ncaa_baseball_live_priority = self.config.get('ncaa_baseball_scoreboard', {}).get('live_priority', True)
self.ncaam_basketball_live_priority = self.config.get('ncaam_basketball_scoreboard', {}).get('live_priority', True)
self.ncaaw_basketball_live_priority = self.config.get('ncaaw_basketball_scoreboard', {}).get('live_priority', True)
self.ncaam_hockey_live_priority = self.config.get('ncaam_hockey_scoreboard', {}).get('live_priority', True)
self.ncaaw_hockey_live_priority = self.config.get('ncaaw_hockey_scoreboard', {}).get('live_priority', True)
@@ -315,6 +349,9 @@ class DisplayController:
if nba_enabled:
if self.nba_recent: self.available_modes.append('nba_recent')
if self.nba_upcoming: self.available_modes.append('nba_upcoming')
if wnba_enabled:
if self.wnba_recent: self.available_modes.append('wnba_recent')
if self.wnba_upcoming: self.available_modes.append('wnba_upcoming')
if mlb_enabled:
if self.mlb_recent: self.available_modes.append('mlb_recent')
if self.mlb_upcoming: self.available_modes.append('mlb_upcoming')
@@ -336,6 +373,9 @@ class DisplayController:
if ncaam_basketball_enabled:
if self.ncaam_basketball_recent: self.available_modes.append('ncaam_basketball_recent')
if self.ncaam_basketball_upcoming: self.available_modes.append('ncaam_basketball_upcoming')
if ncaaw_basketball_enabled:
if self.ncaaw_basketball_recent: self.available_modes.append('ncaaw_basketball_recent')
if self.ncaaw_basketball_upcoming: self.available_modes.append('ncaaw_basketball_upcoming')
if ncaam_hockey_enabled:
if self.ncaam_hockey_recent: self.available_modes.append('ncaam_hockey_recent')
if self.ncaam_hockey_upcoming: self.available_modes.append('ncaam_hockey_upcoming')
@@ -366,6 +406,11 @@ class DisplayController:
self.nba_favorite_teams = self.config.get('nba_scoreboard', {}).get('favorite_teams', [])
self.in_nba_rotation = False
self.wnba_current_team_index = 0
self.wnba_showing_recent = True
self.wnba_favorite_teams = self.config.get('wnba_scoreboard', {}).get('favorite_teams', [])
self.in_wnba_rotation = False
self.soccer_current_team_index = 0 # Soccer rotation state
self.soccer_showing_recent = True
self.soccer_favorite_teams = self.config.get('soccer_scoreboard', {}).get('favorite_teams', [])
@@ -394,6 +439,12 @@ class DisplayController:
self.ncaam_basketball_showing_recent = True
self.ncaam_basketball_favorite_teams = self.config.get('ncaam_basketball_scoreboard', {}).get('favorite_teams', [])
self.in_ncaam_basketball_rotation = False
# Add NCAA Womens's Basketball rotation state
self.ncaaw_basketball_current_team_index = 0
self.ncaaw_basketball_showing_recent = True
self.ncaaw_basketball_favorite_teams = self.config.get('ncaaw_basketball_scoreboard', {}).get('favorite_teams', [])
self.in_ncaaw_basketball_rotation = False
# Update display durations to include all modes
self.display_durations = self.config['display'].get('display_durations', {})
@@ -423,6 +474,9 @@ class DisplayController:
'nba_live': 30,
'nba_recent': 20,
'nba_upcoming': 20,
'wnba_live': 30,
'wnba_recent': 20,
'wnba_upcoming': 20,
'mlb_live': 30,
'mlb_recent': 20,
'mlb_upcoming': 20,
@@ -445,6 +499,9 @@ class DisplayController:
'ncaam_basketball_live': 30, # Added NCAA Men's Basketball durations
'ncaam_basketball_recent': 15,
'ncaam_basketball_upcoming': 15,
'ncaaw_basketball_live': 30, # Added NCAA Womens's Basketball durations
'ncaaw_basketball_recent': 15,
'ncaaw_basketball_upcoming': 15,
'ncaam_hockey_live': 30, # Added NCAA Men's Hockey durations
'ncaam_hockey_recent': 15,
'ncaam_hockey_upcoming': 15,
@@ -462,6 +519,8 @@ class DisplayController:
logger.info(f"NHL Favorite teams: {self.nhl_favorite_teams}")
if nba_enabled:
logger.info(f"NBA Favorite teams: {self.nba_favorite_teams}")
if wnba_enabled:
logger.info(f"WNBA Favorite teams: {self.wnba_favorite_teams}")
if mlb_enabled:
logger.info(f"MLB Favorite teams: {self.mlb_favorite_teams}")
if milb_enabled:
@@ -476,6 +535,8 @@ class DisplayController:
logger.info(f"NCAA Baseball Favorite teams: {self.ncaa_baseball_favorite_teams}")
if ncaam_basketball_enabled: # Check if NCAA Men's Basketball is enabled
logger.info(f"NCAA Men's Basketball Favorite teams: {self.ncaam_basketball_favorite_teams}")
if ncaaw_basketball_enabled: # Check if NCAA Womens's Basketball is enabled
logger.info(f"NCAA Womens's Basketball Favorite teams: {self.ncaaw_basketball_favorite_teams}")
logger.info(f"Available display modes: {self.available_modes}")
logger.info(f"Initial display mode: {self.current_display_mode}")
@@ -674,6 +735,10 @@ class DisplayController:
if self.nba_live: self.nba_live.update()
if self.nba_recent: self.nba_recent.update()
if self.nba_upcoming: self.nba_upcoming.update()
elif current_sport == 'wnba':
if self.wnba_live: self.wnba_live.update()
if self.wnba_recent: self.wnba_recent.update()
if self.wnba_upcoming: self.wnba_upcoming.update()
elif current_sport == 'mlb':
if self.mlb_live: self.mlb_live.update()
if self.mlb_recent: self.mlb_recent.update()
@@ -702,6 +767,10 @@ class DisplayController:
if self.ncaam_basketball_live: self.ncaam_basketball_live.update()
if self.ncaam_basketball_recent: self.ncaam_basketball_recent.update()
if self.ncaam_basketball_upcoming: self.ncaam_basketball_upcoming.update()
elif current_sport == 'ncaaw_basketball':
if self.ncaaw_basketball_live: self.ncaaw_basketball_live.update()
if self.ncaaw_basketball_recent: self.ncaaw_basketball_recent.update()
if self.ncaaw_basketball_upcoming: self.ncaaw_basketball_upcoming.update()
elif current_sport == 'ncaam_hockey':
if self.ncaam_hockey_live: self.ncaam_hockey_live.update()
if self.ncaam_hockey_recent: self.ncaam_hockey_recent.update()
@@ -721,6 +790,10 @@ class DisplayController:
if self.nba_recent: self.nba_recent.update()
if self.nba_upcoming: self.nba_upcoming.update()
if self.wnba_live: self.wnba_live.update()
if self.wnba_recent: self.wnba_recent.update()
if self.wnba_upcoming: self.wnba_upcoming.update()
if self.mlb_live: self.mlb_live.update()
if self.mlb_recent: self.mlb_recent.update()
if self.mlb_upcoming: self.mlb_upcoming.update()
@@ -749,6 +822,10 @@ class DisplayController:
if self.ncaam_basketball_recent: self.ncaam_basketball_recent.update()
if self.ncaam_basketball_upcoming: self.ncaam_basketball_upcoming.update()
if self.ncaaw_basketball_live: self.ncaaw_basketball_live.update()
if self.ncaaw_basketball_recent: self.ncaaw_basketball_recent.update()
if self.ncaaw_basketball_upcoming: self.ncaaw_basketball_upcoming.update()
if self.ncaam_hockey_live: self.ncaam_hockey_live.update()
if self.ncaam_hockey_recent: self.ncaam_hockey_recent.update()
if self.ncaam_hockey_upcoming: self.ncaam_hockey_upcoming.update()
@@ -770,6 +847,8 @@ class DisplayController:
live_checks['nhl'] = self.nhl_live and self.nhl_live.live_games
if 'nba_scoreboard' in self.config and self.config['nba_scoreboard'].get('enabled', False):
live_checks['nba'] = self.nba_live and self.nba_live.live_games
if 'wnba_scoreboard' in self.config and self.config['wnba_scoreboard'].get('enabled', False):
live_checks['wnba'] = self.wnba_live and self.wnba_live.live_games
if 'mlb' in self.config and self.config['mlb'].get('enabled', False):
live_checks['mlb'] = self.mlb_live and self.mlb_live.live_games
if 'milb' in self.config and self.config['milb'].get('enabled', False):
@@ -784,6 +863,8 @@ class DisplayController:
live_checks['ncaa_baseball'] = self.ncaa_baseball_live and self.ncaa_baseball_live.live_games
if 'ncaam_basketball_scoreboard' in self.config and self.config['ncaam_basketball_scoreboard'].get('enabled', False):
live_checks['ncaam_basketball'] = self.ncaam_basketball_live and self.ncaam_basketball_live.live_games
if 'ncaaw_basketball_scoreboard' in self.config and self.config['ncaaw_basketball_scoreboard'].get('enabled', False):
live_checks['ncaaw_basketball'] = self.ncaaw_basketball_live and self.ncaaw_basketball_live.live_games
if 'ncaam_hockey_scoreboard' in self.config and self.config['ncaam_hockey_scoreboard'].get('enabled', False):
live_checks['ncaam_hockey'] = self.ncaam_hockey_live and self.ncaam_hockey_live.live_games
if 'ncaaw_hockey_scoreboard' in self.config and self.config['ncaaw_hockey_scoreboard'].get('enabled', False):
@@ -818,6 +899,9 @@ class DisplayController:
elif sport == 'nba':
manager_recent = self.nba_recent
manager_upcoming = self.nba_upcoming
elif sport == 'wnba':
manager_recent = self.wnba_recent
manager_upcoming = self.wnba_upcoming
elif sport == 'mlb':
manager_recent = self.mlb_recent
manager_upcoming = self.mlb_upcoming
@@ -872,6 +956,10 @@ class DisplayController:
favorite_teams = self.nba_favorite_teams
manager_recent = self.nba_recent
manager_upcoming = self.nba_upcoming
elif sport == 'wnba':
favorite_teams = self.wnba_favorite_teams
manager_recent = self.wnba_recent
manager_upcoming = self.wnba_upcoming
elif sport == 'mlb':
favorite_teams = self.mlb_favorite_teams
manager_recent = self.mlb_recent
@@ -895,73 +983,6 @@ class DisplayController:
return bool(favorite_teams and (manager_recent or manager_upcoming))
def _rotate_team_games(self, sport: str = 'nhl') -> None:
"""Rotate through games for favorite teams. (No longer used directly in loop)"""
# This logic is now mostly handled within each manager's display/update
# Keeping the structure in case direct rotation is needed later.
if not self._has_team_games(sport):
return
if sport == 'nhl':
if not self.nhl_favorite_teams: return
current_team = self.nhl_favorite_teams[self.nhl_current_team_index]
# ... (rest of NHL rotation logic - now less relevant)
elif sport == 'nba':
if not self.nba_favorite_teams: return
current_team = self.nba_favorite_teams[self.nba_current_team_index]
# ... (rest of NBA rotation logic)
elif sport == 'mlb':
if not self.mlb_favorite_teams: return
current_team = self.mlb_favorite_teams[self.mlb_current_team_index]
# ... (rest of MLB rotation logic)
elif sport == 'milb':
if not self.config.get('milb_scoreboard', {}).get('favorite_teams', []): return
current_team = self.config['milb_scoreboard']['favorite_teams'][self.milb_current_team_index]
# ... (rest of MiLB rotation logic)
elif sport == 'soccer':
if not self.soccer_favorite_teams: return
current_team = self.soccer_favorite_teams[self.soccer_current_team_index]
# Try to find games for current team (recent first)
found_games = self._get_team_games(current_team, 'soccer', self.soccer_showing_recent)
if not found_games:
# Try opposite type (upcoming/recent)
self.soccer_showing_recent = not self.soccer_showing_recent
found_games = self._get_team_games(current_team, 'soccer', self.soccer_showing_recent)
if not found_games:
# Move to next team if no games found for current one
self.soccer_current_team_index = (self.soccer_current_team_index + 1) % len(self.soccer_favorite_teams)
self.soccer_showing_recent = True # Reset to recent for the new team
# Maybe try finding game for the *new* team immediately? Optional.
elif sport == 'nfl':
if not self.nfl_favorite_teams: return
current_team = self.nfl_favorite_teams[self.nfl_current_team_index]
# Try to find games for current team (recent first)
found_games = self._get_team_games(current_team, 'nfl', self.nfl_showing_recent)
if not found_games:
# Try opposite type (upcoming/recent)
self.nfl_showing_recent = not self.nfl_showing_recent
found_games = self._get_team_games(current_team, 'nfl', self.nfl_showing_recent)
if not found_games:
# Move to next team if no games found for current one
self.nfl_current_team_index = (self.nfl_current_team_index + 1) % len(self.nfl_favorite_teams)
self.nfl_showing_recent = True # Reset to recent for the new team
elif sport == 'ncaa_fb': # Add NCAA FB case
if not self.ncaa_fb_favorite_teams: return
current_team = self.ncaa_fb_favorite_teams[self.ncaa_fb_current_team_index]
# Try to find games for current team (recent first)
found_games = self._get_team_games(current_team, 'ncaa_fb', self.ncaa_fb_showing_recent)
if not found_games:
# Try opposite type (upcoming/recent)
self.ncaa_fb_showing_recent = not self.ncaa_fb_showing_recent
found_games = self._get_team_games(current_team, 'ncaa_fb', self.ncaa_fb_showing_recent)
if not found_games:
# Move to next team if no games found for current one
self.ncaa_fb_current_team_index = (self.ncaa_fb_current_team_index + 1) % len(self.ncaa_fb_favorite_teams)
self.ncaa_fb_showing_recent = True # Reset to recent for the new team
# --- SCHEDULING METHODS ---
def _load_schedule_config(self):
"""Load schedule configuration once at startup."""
@@ -1031,6 +1052,7 @@ class DisplayController:
# Check if each sport is enabled before processing
nhl_enabled = self.config.get('nhl_scoreboard', {}).get('enabled', False)
nba_enabled = self.config.get('nba_scoreboard', {}).get('enabled', False)
wnba_enabled = self.config.get('wnba_scoreboard', {}).get('enabled', False)
mlb_enabled = self.config.get('mlb_scoreboard', {}).get('enabled', False)
milb_enabled = self.config.get('milb_scoreboard', {}).get('enabled', False)
soccer_enabled = self.config.get('soccer_scoreboard', {}).get('enabled', False)
@@ -1038,11 +1060,13 @@ class DisplayController:
ncaa_fb_enabled = self.config.get('ncaa_fb_scoreboard', {}).get('enabled', False)
ncaa_baseball_enabled = self.config.get('ncaa_baseball_scoreboard', {}).get('enabled', False)
ncaam_basketball_enabled = self.config.get('ncaam_basketball_scoreboard', {}).get('enabled', False)
ncaaw_basketball_enabled = self.config.get('ncaaw_basketball_scoreboard', {}).get('enabled', False)
ncaam_hockey_enabled = self.config.get('ncaam_hockey_scoreboard', {}).get('enabled', False)
ncaaw_hockey_enabled = self.config.get('ncaaw_hockey_scoreboard', {}).get('enabled', False)
update_mode('nhl_live', getattr(self, 'nhl_live', None), self.nhl_live_priority, nhl_enabled)
update_mode('nba_live', getattr(self, 'nba_live', None), self.nba_live_priority, nba_enabled)
update_mode('wnba_live', getattr(self, 'wnba_live', None), self.wnba_live_priority, wnba_enabled)
update_mode('mlb_live', getattr(self, 'mlb_live', None), self.mlb_live_priority, mlb_enabled)
update_mode('milb_live', getattr(self, 'milb_live', None), self.milb_live_priority, milb_enabled)
update_mode('soccer_live', getattr(self, 'soccer_live', None), self.soccer_live_priority, soccer_enabled)
@@ -1050,6 +1074,7 @@ class DisplayController:
update_mode('ncaa_fb_live', getattr(self, 'ncaa_fb_live', None), self.ncaa_fb_live_priority, ncaa_fb_enabled)
update_mode('ncaa_baseball_live', getattr(self, 'ncaa_baseball_live', None), self.ncaa_baseball_live_priority, ncaa_baseball_enabled)
update_mode('ncaam_basketball_live', getattr(self, 'ncaam_basketball_live', None), self.ncaam_basketball_live_priority, ncaam_basketball_enabled)
update_mode('ncaaw_basketball_live', getattr(self, 'ncaaw_basketball_live', None), self.ncaaw_basketball_live_priority, ncaaw_basketball_enabled)
update_mode('ncaam_hockey_live', getattr(self, 'ncaam_hockey_live', None), self.ncaam_hockey_live_priority, ncaam_hockey_enabled)
update_mode('ncaaw_hockey_live', getattr(self, 'ncaaw_hockey_live', None), self.ncaaw_hockey_live_priority, ncaaw_hockey_enabled)
@@ -1094,6 +1119,7 @@ class DisplayController:
for sport, attr, priority in [
('nhl', 'nhl_live', self.nhl_live_priority),
('nba', 'nba_live', self.nba_live_priority),
('wnba', 'wnba_live', self.wnba_live_priority),
('mlb', 'mlb_live', self.mlb_live_priority),
('milb', 'milb_live', self.milb_live_priority),
('soccer', 'soccer_live', self.soccer_live_priority),
@@ -1101,6 +1127,7 @@ class DisplayController:
('ncaa_fb', 'ncaa_fb_live', self.ncaa_fb_live_priority),
('ncaa_baseball', 'ncaa_baseball_live', self.ncaa_baseball_live_priority),
('ncaam_basketball', 'ncaam_basketball_live', self.ncaam_basketball_live_priority),
('ncaaw_basketball', 'ncaaw_basketball_live', self.ncaaw_basketball_live_priority),
('ncaam_hockey', 'ncaam_hockey_live', self.ncaam_hockey_live_priority),
('ncaaw_hockey', 'ncaaw_hockey_live', self.ncaaw_hockey_live_priority)
]:
@@ -1264,6 +1291,10 @@ class DisplayController:
manager_to_display = self.nba_recent
elif self.current_display_mode == 'nba_upcoming' and self.nba_upcoming:
manager_to_display = self.nba_upcoming
elif self.current_display_mode == 'wnba_recent' and self.wnba_recent:
manager_to_display = self.wnba_recent
elif self.current_display_mode == 'wnba_upcoming' and self.wnba_upcoming:
manager_to_display = self.wnba_upcoming
elif self.current_display_mode == 'nfl_recent' and self.nfl_recent:
manager_to_display = self.nfl_recent
elif self.current_display_mode == 'nfl_upcoming' and self.nfl_upcoming:
@@ -1280,6 +1311,10 @@ class DisplayController:
manager_to_display = self.ncaam_basketball_recent
elif self.current_display_mode == 'ncaam_basketball_upcoming' and self.ncaam_basketball_upcoming:
manager_to_display = self.ncaam_basketball_upcoming
elif self.current_display_mode == 'ncaaw_basketball_recent' and self.ncaaw_basketball_recent:
manager_to_display = self.ncaaw_basketball_recent
elif self.current_display_mode == 'ncaaw_basketball_upcoming' and self.ncaaw_basketball_upcoming:
manager_to_display = self.ncaaw_basketball_upcoming
elif self.current_display_mode == 'mlb_recent' and self.mlb_recent:
manager_to_display = self.mlb_recent
elif self.current_display_mode == 'mlb_upcoming' and self.mlb_upcoming:
@@ -1298,6 +1333,8 @@ class DisplayController:
manager_to_display = self.nhl_live
elif self.current_display_mode == 'nba_live' and self.nba_live:
manager_to_display = self.nba_live
elif self.current_display_mode == 'wnba_live' and self.wnba_live:
manager_to_display = self.wnba_live
elif self.current_display_mode == 'nfl_live' and self.nfl_live:
manager_to_display = self.nfl_live
elif self.current_display_mode == 'ncaa_fb_live' and self.ncaa_fb_live:
@@ -1306,6 +1343,8 @@ class DisplayController:
manager_to_display = self.ncaa_baseball_live
elif self.current_display_mode == 'ncaam_basketball_live' and self.ncaam_basketball_live:
manager_to_display = self.ncaam_basketball_live
elif self.current_display_mode == 'ncaaw_basketball_live' and self.ncaaw_basketball_live:
manager_to_display = self.ncaaw_basketball_live
elif self.current_display_mode == 'ncaam_hockey_live' and self.ncaam_hockey_live:
manager_to_display = self.ncaam_hockey_live
elif self.current_display_mode == 'ncaam_hockey_recent' and self.ncaam_hockey_recent:
@@ -1383,6 +1422,10 @@ class DisplayController:
self.ncaam_basketball_recent.display(force_clear=self.force_clear)
elif self.current_display_mode == 'ncaam_basketball_upcoming' and self.ncaam_basketball_upcoming:
self.ncaam_basketball_upcoming.display(force_clear=self.force_clear)
elif self.current_display_mode == 'ncaaw_basketball_recent' and self.ncaaw_basketball_recent:
self.ncaaw_basketball_recent.display(force_clear=self.force_clear)
elif self.current_display_mode == 'ncaaw_basketball_upcoming' and self.ncaaw_basketball_upcoming:
self.ncaaw_basketball_upcoming.display(force_clear=self.force_clear)
elif self.current_display_mode == 'ncaa_baseball_recent' and self.ncaa_baseball_recent:
self.ncaa_baseball_recent.display(force_clear=self.force_clear)
elif self.current_display_mode == 'ncaa_baseball_upcoming' and self.ncaa_baseball_upcoming: