fix: redirect to /setup/unresolved after series scan completes
- Add 'system_progress' event type to loading page redirect condition - Add checkUnresolvedAndRedirect() for phase=initial to handle race condition where backend initialization completes before WebSocket connects - Backend now emits series_sync progress events during initial setup - Loading page checks /api/setup/unresolved immediately on load for phase=initial - Fixes users getting stuck on loading page after setup
This commit is contained in:
@@ -271,7 +271,7 @@ async def _load_series_into_memory(progress_service=None) -> None:
|
||||
)
|
||||
|
||||
|
||||
async def _scan_folders_to_database(progress_service=None) -> int:
|
||||
async def _scan_folders_to_database(progress_service=None) -> tuple[int, int]:
|
||||
"""Scan anime folders and create AnimeSeries DB records.
|
||||
|
||||
This function runs during initial setup only. It delegates to
|
||||
@@ -285,7 +285,7 @@ async def _scan_folders_to_database(progress_service=None) -> int:
|
||||
progress_service: Optional ProgressService for progress updates
|
||||
|
||||
Returns:
|
||||
int: Number of new series created
|
||||
Tuple of (number of new series created, number of unresolved folders)
|
||||
"""
|
||||
logger.info("Scanning anime folders for new series...")
|
||||
|
||||
@@ -293,16 +293,17 @@ async def _scan_folders_to_database(progress_service=None) -> int:
|
||||
logger.info(
|
||||
"Anime directory not configured or does not exist, skipping folder scan"
|
||||
)
|
||||
return 0
|
||||
return 0, 0
|
||||
|
||||
# Use SetupService to handle the scanning and creation
|
||||
created_count = await SetupService.run()
|
||||
created_count, unresolved_count = await SetupService.run()
|
||||
|
||||
logger.info(
|
||||
"Folder scan complete",
|
||||
created=created_count
|
||||
created=created_count,
|
||||
unresolved=unresolved_count
|
||||
)
|
||||
return created_count
|
||||
return created_count, unresolved_count
|
||||
|
||||
|
||||
async def _validate_anime_directory(progress_service=None) -> bool:
|
||||
@@ -380,7 +381,7 @@ async def perform_initial_setup(progress_service=None):
|
||||
# Perform the actual initialization
|
||||
try:
|
||||
# Scan folders and create AnimeSeries records first
|
||||
folder_scan_count = await _scan_folders_to_database(progress_service)
|
||||
folder_scan_count, unresolved_count = await _scan_folders_to_database(progress_service)
|
||||
if folder_scan_count > 0:
|
||||
logger.info("Created %d series from anime folders", folder_scan_count)
|
||||
|
||||
@@ -398,11 +399,20 @@ async def perform_initial_setup(progress_service=None):
|
||||
await _mark_initial_scan_completed()
|
||||
|
||||
# Mark loading as complete in config (used by middleware to allow redirect to /login)
|
||||
# Only mark complete if there are no unresolved folders - otherwise user needs
|
||||
# to resolve them first via /setup/unresolved
|
||||
try:
|
||||
from src.server.services.config_service import get_config_service
|
||||
config_svc = get_config_service()
|
||||
init_config = config_svc.load_config()
|
||||
init_config.other['loading_complete'] = True
|
||||
if unresolved_count == 0:
|
||||
init_config.other['loading_complete'] = True
|
||||
logger.info("No unresolved folders - marking loading complete")
|
||||
else:
|
||||
logger.info(
|
||||
"Unresolved folders exist (%d) - deferring loading_complete",
|
||||
unresolved_count
|
||||
)
|
||||
config_svc.save_config(init_config, create_backup=False)
|
||||
except Exception as e:
|
||||
logger.warning("Failed to save loading_complete flag: %s", e)
|
||||
|
||||
Reference in New Issue
Block a user