diff --git a/src/server/services/initialization_service.py b/src/server/services/initialization_service.py index 5bb1fd8..840e9c7 100644 --- a/src/server/services/initialization_service.py +++ b/src/server/services/initialization_service.py @@ -215,6 +215,20 @@ async def _sync_anime_folders(progress_service=None) -> int: """ logger.info("Performing initial anime folder scan...") + # Check if anime directory exists before attempting sync + if not settings.anime_directory or not os.path.isdir(settings.anime_directory): + logger.info( + "Anime directory not configured or does not exist, skipping data file sync" + ) + if progress_service: + await progress_service.update_progress( + progress_id="series_sync", + current=100, + message="No anime directory configured, skipping data file sync", + metadata={"step_id": "series_sync"} + ) + return 0 + if progress_service: await progress_service.update_progress( progress_id="series_sync", diff --git a/src/server/services/scheduler/scheduler_service.py b/src/server/services/scheduler/scheduler_service.py index 241ed33..0d03e87 100644 --- a/src/server/services/scheduler/scheduler_service.py +++ b/src/server/services/scheduler/scheduler_service.py @@ -323,8 +323,18 @@ class SchedulerService: async with get_db_session() as db: settings = await SystemSettingsService.get_or_create(db) last_scan = settings.last_scan_timestamp + initial_scan_done = settings.initial_scan_completed if last_scan is None: + # No previous scan recorded + if not initial_scan_done: + # Initial setup not yet completed - skip rescan + # The setup flow will trigger rescan when ready + logger.info( + "No previous scan recorded and initial setup not yet " + "completed — skipping immediate rescan" + ) + return # Never scanned before — trigger immediately logger.info("No previous scan recorded — triggering immediate rescan") await self._perform_rescan() diff --git a/tests/unit/test_initialization_service.py b/tests/unit/test_initialization_service.py index 7276c91..6194adb 100644 --- a/tests/unit/test_initialization_service.py +++ b/tests/unit/test_initialization_service.py @@ -160,8 +160,11 @@ class TestSyncAnimeFolders: @pytest.mark.asyncio async def test_sync_anime_folders_without_progress(self): """Test syncing anime folders without progress service.""" - with patch('src.server.services.initialization_service.sync_legacy_series_to_db', + with patch('src.server.services.initialization_service.settings') as mock_settings, \ + patch('src.server.services.initialization_service.os.path.isdir', return_value=True), \ + patch('src.server.services.initialization_service.sync_legacy_series_to_db', new_callable=AsyncMock, return_value=42) as mock_sync: + mock_settings.anime_directory = "/path/to/anime" result = await _sync_anime_folders() assert result == 42 @@ -172,8 +175,11 @@ class TestSyncAnimeFolders: """Test syncing anime folders with progress updates.""" mock_progress = AsyncMock() - with patch('src.server.services.initialization_service.sync_legacy_series_to_db', + with patch('src.server.services.initialization_service.settings') as mock_settings, \ + patch('src.server.services.initialization_service.os.path.isdir', return_value=True), \ + patch('src.server.services.initialization_service.sync_legacy_series_to_db', new_callable=AsyncMock, return_value=10) as mock_sync: + mock_settings.anime_directory = "/path/to/anime" result = await _sync_anime_folders(progress_service=mock_progress) assert result == 10