fix(scheduler): skip rescan during initial setup when anime directory not configured
Prevent scheduler from triggering immediate rescan when: - No previous scan recorded AND initial setup not yet completed - Anime directory doesn't exist during initial sync The setup flow will trigger rescan when ready. Also adds graceful handling when anime directory is missing during data file sync. Fixes: 503 error on setup when scheduler triggers rescan before anime directory is configured
This commit is contained in:
@@ -215,6 +215,20 @@ async def _sync_anime_folders(progress_service=None) -> int:
|
|||||||
"""
|
"""
|
||||||
logger.info("Performing initial anime folder scan...")
|
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:
|
if progress_service:
|
||||||
await progress_service.update_progress(
|
await progress_service.update_progress(
|
||||||
progress_id="series_sync",
|
progress_id="series_sync",
|
||||||
|
|||||||
@@ -323,8 +323,18 @@ class SchedulerService:
|
|||||||
async with get_db_session() as db:
|
async with get_db_session() as db:
|
||||||
settings = await SystemSettingsService.get_or_create(db)
|
settings = await SystemSettingsService.get_or_create(db)
|
||||||
last_scan = settings.last_scan_timestamp
|
last_scan = settings.last_scan_timestamp
|
||||||
|
initial_scan_done = settings.initial_scan_completed
|
||||||
|
|
||||||
if last_scan is None:
|
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
|
# Never scanned before — trigger immediately
|
||||||
logger.info("No previous scan recorded — triggering immediate rescan")
|
logger.info("No previous scan recorded — triggering immediate rescan")
|
||||||
await self._perform_rescan()
|
await self._perform_rescan()
|
||||||
|
|||||||
@@ -160,8 +160,11 @@ class TestSyncAnimeFolders:
|
|||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_sync_anime_folders_without_progress(self):
|
async def test_sync_anime_folders_without_progress(self):
|
||||||
"""Test syncing anime folders without progress service."""
|
"""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:
|
new_callable=AsyncMock, return_value=42) as mock_sync:
|
||||||
|
mock_settings.anime_directory = "/path/to/anime"
|
||||||
result = await _sync_anime_folders()
|
result = await _sync_anime_folders()
|
||||||
|
|
||||||
assert result == 42
|
assert result == 42
|
||||||
@@ -172,8 +175,11 @@ class TestSyncAnimeFolders:
|
|||||||
"""Test syncing anime folders with progress updates."""
|
"""Test syncing anime folders with progress updates."""
|
||||||
mock_progress = AsyncMock()
|
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:
|
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)
|
result = await _sync_anime_folders(progress_service=mock_progress)
|
||||||
|
|
||||||
assert result == 10
|
assert result == 10
|
||||||
|
|||||||
Reference in New Issue
Block a user