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 82411c5..530191a 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 @@ -113,6 +113,29 @@ def _resolve_jellyfin(service_id: str) -> tuple[Any, str]: if not users: raise RuntimeError("No Jellyfin users found and no user_id configured on the service") user_id = users[0]["Id"] + else: + # The config field accepts either a Jellyfin internal user ID (a long + # hash) or a username (e.g. "admin"). Validate against the users API: + # if the configured value doesn't match any user's Id, try matching by + # Name, then fall back to the first user. + users = client.users() + valid_ids = {str(u.get("Id", "")) for u in users} + if user_id not in valid_ids: + match = next((u for u in users if str(u.get("Name", "")) == user_id), None) + if match: + user_id = match["Id"] + logger.info( + "Resolved username '%s' to Jellyfin Id '%s'", + service.get("config", {}).get("user_id"), + user_id, + ) + elif users: + user_id = users[0]["Id"] + logger.warning( + "user_id '%s' not found; falling back to first user '%s'", + service.get("config", {}).get("user_id"), + user_id, + ) return client, user_id