Implement initial NFO scan tracking for one-time setup

- Add NFO scanning to startup process (fastapi_app.py)
- Check initial_nfo_scan_completed flag before running NFO scan
- Run NFO scan only on first startup if TMDB API key is configured
- Mark NFO scan as completed after first successful run
- Skip NFO scan on subsequent startups

This ensures NFO metadata processing only occurs during initial setup,
not on every application restart, improving startup performance.
This commit is contained in:
2026-01-21 19:25:30 +01:00
parent db7e21a14c
commit 9f1158b9af
2 changed files with 68 additions and 4 deletions

View File

@@ -124,10 +124,10 @@ make sure you maintain the function on one location
1. ✅ scanning anime from folder - COMPLETED 1. ✅ scanning anime from folder - COMPLETED
Implemented initial scan tracking using SystemSettings table. Anime folder scanning now only runs during initial setup, not on each application start. Implemented initial scan tracking using SystemSettings table. Anime folder scanning now only runs during initial setup, not on each application start.
- Added SystemSettings model with initial_scan_completed flag - Added SystemSettings model with initial_scan_completed flag
- Created SystemSettingsService for managing setup state - Created SystemSettingsService for managing setup state
- Modified fastapi_app.py to check scan completion status on startup - Modified fastapi_app.py to check scan completion status on startup
- Added unit test for SystemSettingsService - Added unit test for SystemSettingsService
2. Nfo scan 2. Nfo scan
make sure nfo scan runs only on setup and not on each start make sure nfo scan runs only on setup and not on each start

View File

@@ -256,6 +256,70 @@ async def lifespan(_application: FastAPI):
await anime_service._load_series_from_db() await anime_service._load_series_from_db()
logger.info("Series loaded from database into memory") logger.info("Series loaded from database into memory")
# Check if initial NFO scan has been completed
try:
async with get_db_session() as db:
is_nfo_scan_done = (
await SystemSettingsService
.is_initial_nfo_scan_completed(db)
)
except Exception as e:
logger.warning(
"Failed to check NFO scan status: %s, assuming not done",
e
)
is_nfo_scan_done = False
# Run NFO scan only on first run (if configured)
if settings.tmdb_api_key and (
settings.nfo_auto_create or settings.nfo_update_on_scan
):
if not is_nfo_scan_done:
logger.info("Performing initial NFO scan...")
try:
from src.core.services.series_manager_service import (
SeriesManagerService,
)
manager = SeriesManagerService.from_settings()
await manager.scan_and_process_nfo()
await manager.close()
logger.info("Initial NFO scan completed")
# Mark NFO scan as completed
try:
async with get_db_session() as db:
await (
SystemSettingsService
.mark_initial_nfo_scan_completed(db)
)
logger.info("Marked NFO scan as completed")
except Exception as e:
logger.warning(
"Failed to mark NFO scan as completed: %s",
e
)
except Exception as e:
logger.error(
"Failed to complete NFO scan: %s",
e,
exc_info=True
)
else:
logger.info(
"Skipping NFO scan - already completed on previous run"
)
else:
if not settings.tmdb_api_key:
logger.info(
"NFO scan skipped - TMDB API key not configured"
)
else:
logger.info(
"NFO scan skipped - auto_create and update_on_scan "
"both disabled"
)
# Now initialize download service (will use data from database) # Now initialize download service (will use data from database)
from src.server.utils.dependencies import get_download_service from src.server.utils.dependencies import get_download_service
download_service = get_download_service() download_service = get_download_service()