diff --git a/src/server/api/config.py b/src/server/api/config.py index 22f16ff..267236e 100644 --- a/src/server/api/config.py +++ b/src/server/api/config.py @@ -279,30 +279,15 @@ async def update_directory( config_service.save_config(app_config) - # Sync series from data files to database - sync_count = 0 - try: - import structlog - - from src.server.services.anime_service import sync_legacy_series_to_db - logger = structlog.get_logger(__name__) - sync_count = await sync_legacy_series_to_db(directory, logger) - logger.info( - "Directory updated: synced series from data files", - directory=directory, - count=sync_count - ) - except Exception as e: - # Log but don't fail the directory update if sync fails - import structlog - structlog.get_logger(__name__).warning( - "Failed to sync series after directory update", - error=str(e) - ) + # Series are now loaded directly from database, no sync needed + logger.info( + "Directory updated successfully", + directory=directory + ) response: Dict[str, Any] = { "message": "Anime directory updated successfully", - "synced_series": sync_count + "synced_series": 0 } return response diff --git a/src/server/services/anime_service.py b/src/server/services/anime_service.py index 5892f1c..c32afeb 100644 --- a/src/server/services/anime_service.py +++ b/src/server/services/anime_service.py @@ -1618,139 +1618,3 @@ class AnimeService: def get_anime_service(series_app: SeriesApp) -> AnimeService: """Factory used for creating AnimeService with a SeriesApp instance.""" return AnimeService(series_app) - - -async def sync_legacy_series_to_db( - anime_directory: str, - log_instance=None # pylint: disable=unused-argument -) -> int: - """ - One-time legacy sync: import any series from 'data' files - not already in the database. - - Deprecated: Series are now loaded directly from the database. - This function remains for backwards compatibility with legacy - file-based data during migration. - - Args: - anime_directory: Path to the anime directory with data files - log_instance: Optional logger instance (unused, kept for API - compatibility). This function always uses structlog internally. - - Returns: - Number of new series added to the database - """ - # Always use structlog for structured logging with keyword arguments - log = structlog.get_logger(__name__) - - log.warning( - "sync_legacy_series_to_db is deprecated. " - "Series are now loaded directly from database." - ) - - try: - from src.server.database.connection import get_db_session - from src.server.database.service import AnimeSeriesService, EpisodeService - - log.info( - "Starting data file to database sync", - directory=anime_directory - ) - - # Get all series from data files using SeriesApp - series_app = SeriesApp(anime_directory) - all_series = await asyncio.to_thread( - series_app.get_all_series_from_data_files - ) - - if not all_series: - log.info("No series found in data files to sync") - return 0 - - log.info( - "Found series in data files, syncing to database", - count=len(all_series) - ) - - async with get_db_session() as db: - added_count = 0 - skipped_count = 0 - for serie in all_series: - # Handle series with empty name - use folder as fallback - if not serie.name or not serie.name.strip(): - if serie.folder and serie.folder.strip(): - serie.name = serie.folder.strip() - log.debug( - "Using folder as name fallback", - key=serie.key, - folder=serie.folder - ) - else: - log.warning( - "Skipping series with empty name and folder", - key=serie.key - ) - skipped_count += 1 - continue - - try: - # Check if series already exists in DB - existing = await AnimeSeriesService.get_by_key(db, serie.key) - if existing: - log.debug( - "Series already exists in database", - name=serie.name, - key=serie.key - ) - continue - - # Create new series in database - anime_series = await AnimeSeriesService.create( - db=db, - key=serie.key, - name=serie.name, - site=serie.site, - folder=serie.folder, - year=serie.year if hasattr(serie, 'year') else None, - ) - - # Create Episode records for each episode in episodeDict - if serie.episodeDict: - for season, episode_numbers in serie.episodeDict.items(): - for episode_number in episode_numbers: - await EpisodeService.create( - db=db, - series_id=anime_series.id, - season=season, - episode_number=episode_number, - ) - - added_count += 1 - log.debug( - "Added series to database", - name=serie.name, - key=serie.key - ) - except Exception as e: # pylint: disable=broad-except - log.warning( - "Failed to add series to database", - key=serie.key, - name=serie.name, - error=str(e) - ) - skipped_count += 1 - - log.info( - "Data file sync complete", - added=added_count, - skipped=len(all_series) - added_count - ) - return added_count - - except Exception as e: # pylint: disable=broad-except - log.warning( - "Failed to sync series to database", - error=str(e), - exc_info=True - ) - return 0 diff --git a/src/server/services/initialization_service.py b/src/server/services/initialization_service.py index 6bdad82..17356f8 100644 --- a/src/server/services/initialization_service.py +++ b/src/server/services/initialization_service.py @@ -9,7 +9,6 @@ import structlog from src.config.settings import settings from src.server.database.service import AnimeSeriesService -from src.server.services.anime_service import sync_legacy_series_to_db from src.server.services.setup_service import SetupService logger = structlog.get_logger(__name__) @@ -237,14 +236,15 @@ async def _sync_anime_folders(progress_service=None) -> int: metadata={"step_id": "series_sync"} ) - sync_count = await sync_legacy_series_to_db(settings.anime_directory) - logger.info("Data file sync complete. Added %d series.", sync_count) + # Legacy sync removed - series are loaded directly from database via _load_series_into_memory + sync_count = 0 + logger.info("Data file sync skipped - series loaded directly from database") if progress_service: await progress_service.update_progress( progress_id="series_sync", current=75, - message=f"Synced {sync_count} series from data files", + message=f"Series loaded directly from database", metadata={"step_id": "series_sync"} )