fix: isolate startup steps so repair scan always runs

This commit is contained in:
2026-02-22 12:29:17 +01:00
parent bbf0a0815a
commit 759cd09ded

View File

@@ -232,46 +232,58 @@ async def lifespan(_application: FastAPI):
if settings.anime_directory: if settings.anime_directory:
# Perform initial setup if needed # Perform initial setup if needed
await perform_initial_setup() await perform_initial_setup()
# Get anime service for later use # Get anime service and load series — isolated so a missing
from src.server.utils.dependencies import get_anime_service # directory doesn't abort the rest of the startup sequence
anime_service = get_anime_service() try:
from src.server.utils.dependencies import get_anime_service
# Always load series from database into memory on startup anime_service = get_anime_service()
logger.info("Loading series from database into memory...")
await anime_service._load_series_from_db() # Always load series from database into memory on startup
logger.info("Series loaded from database into memory") logger.info("Loading series from database into memory...")
await anime_service._load_series_from_db()
logger.info("Series loaded from database into memory")
except Exception as e:
logger.warning(
"Could not load series into memory (directory may not "
"exist yet): %s", e
)
# Run NFO scan only on first run (if configured) # Run NFO scan only on first run (if configured)
await perform_nfo_scan_if_needed() await perform_nfo_scan_if_needed()
# Now initialize download service (will use data from database) # Initialize download service
from src.server.utils.dependencies import get_download_service
download_service = get_download_service()
await download_service.initialize()
initialized['services'] = True
logger.info("Download service initialized and queue restored")
# Initialize background loader service
from src.server.utils.dependencies import get_background_loader_service
background_loader = get_background_loader_service()
await background_loader.start()
initialized['background_loader'] = True
logger.info("Background loader service started")
# Initialize and start scheduler service
from src.server.services.scheduler_service import get_scheduler_service
scheduler_service = get_scheduler_service()
try: try:
from src.server.utils.dependencies import get_download_service
download_service = get_download_service()
await download_service.initialize()
initialized['services'] = True
logger.info("Download service initialized and queue restored")
except Exception as e:
logger.warning("Failed to initialize download service: %s", e)
# Initialize background loader service
background_loader = None
try:
from src.server.utils.dependencies import get_background_loader_service
background_loader = get_background_loader_service()
await background_loader.start()
initialized['background_loader'] = True
logger.info("Background loader service started")
except Exception as e:
logger.warning("Failed to start background loader service: %s", e)
# Initialize and start scheduler service
try:
from src.server.services.scheduler_service import get_scheduler_service
scheduler_service = get_scheduler_service()
await scheduler_service.start() await scheduler_service.start()
initialized['scheduler'] = True initialized['scheduler'] = True
logger.info("Scheduler service started") logger.info("Scheduler service started")
except Exception as e: except Exception as e:
logger.warning("Failed to start scheduler service: %s", e) logger.warning("Failed to start scheduler service: %s", e)
# Continue - scheduler is optional # Continue - scheduler is optional
# Run media scan only on first run # Run media scan only on first run
await perform_media_scan_if_needed(background_loader) await perform_media_scan_if_needed(background_loader)
@@ -286,10 +298,8 @@ async def lifespan(_application: FastAPI):
except (OSError, RuntimeError, ValueError) as e: except (OSError, RuntimeError, ValueError) as e:
logger.warning("Failed to initialize services: %s", e) logger.warning("Failed to initialize services: %s", e)
# Continue startup - services can be initialized later # Continue startup - services can be initialized later
except Exception as e: # includes HTTPException from get_anime_service except Exception as e:
logger.warning( logger.warning("Unexpected error during startup initialization: %s", e)
"Failed to initialize services (anime directory may not exist): %s", e
)
# Continue startup - services can be configured/initialized later # Continue startup - services can be configured/initialized later
logger.info("FastAPI application started successfully") logger.info("FastAPI application started successfully")