diff --git a/backend/src/media_library_viewer_api/workers/media_index_worker.py b/backend/src/media_library_viewer_api/workers/media_index_worker.py index fff35c4..82411c5 100644 --- a/backend/src/media_library_viewer_api/workers/media_index_worker.py +++ b/backend/src/media_library_viewer_api/workers/media_index_worker.py @@ -121,9 +121,11 @@ def run_build(final_index_path: str | Path, staging_index_path: str | Path, serv settings = get_settings() configure_logging(settings.log_level) logger.info("Media index worker starting: %s", describe_settings(settings)) - client, user_id = _resolve_jellyfin(service_id) - libraries = client.libraries(user_id) + # Create the indexes BEFORE the try block so the except handler can write + # error state to the DB. If _resolve_jellyfin or client.libraries fails, + # the worker needs to record the error — otherwise the status stays + # "queued" forever with no feedback. final_index = MediaIndex(final_index_path) staging_index = MediaIndex(staging_index_path) pid = os.getpid() @@ -131,10 +133,13 @@ def run_build(final_index_path: str | Path, staging_index_path: str | Path, serv staging_path = Path(staging_index.db_path) staging_path.unlink(missing_ok=True) - logger.info("Media index worker pid=%s libraries=%s", pid, len(libraries)) - _start_state(final_index, pid, len(libraries)) try: + client, user_id = _resolve_jellyfin(service_id) + libraries = client.libraries(user_id) + logger.info("Media index worker pid=%s libraries=%s", pid, len(libraries)) + _start_state(final_index, pid, len(libraries)) + count = build_media_index( client, user_id,