diff --git a/backend/src/media_library_viewer_api/dependencies.py b/backend/src/media_library_viewer_api/dependencies.py index 00e24a4..196b155 100644 --- a/backend/src/media_library_viewer_api/dependencies.py +++ b/backend/src/media_library_viewer_api/dependencies.py @@ -130,7 +130,13 @@ def _resolve_machine(service: str, request: Request | None = None) -> dict[str, def get_jellyfin_client(request: Request = None) -> JellyfinClient: """Return a Jellyfin client for the selected machine.""" - machine = get_settings_store().get_machine_config(_request_machine_id(request)) or _resolve_machine("jellyfin", request) + store = get_settings_store() + machine_id = _request_machine_id(request) + machine = store.get_machine_config(machine_id) if machine_id else None + if machine is None: + resolved = _resolve_machine("jellyfin", request) + if resolved: + machine = store.get_machine_config(resolved["id"]) if machine and machine.get("jellyfin_url") and machine.get("jellyfin_api_key"): cache_key = (machine["id"], machine["jellyfin_url"], machine.get("jellyfin_api_key") or "") return _jellyfin_client_for(cache_key) @@ -140,7 +146,13 @@ def get_jellyfin_client(request: Request = None) -> JellyfinClient: def get_jellyseerr_client(request: Request = None) -> JellyseerrClient | None: """Return a cached Jellyseerr client when configured, otherwise None.""" - machine = get_settings_store().get_machine_config(_request_machine_id(request)) or _resolve_machine("jellyseerr", request) + store = get_settings_store() + machine_id = _request_machine_id(request) + machine = store.get_machine_config(machine_id) if machine_id else None + if machine is None: + resolved = _resolve_machine("jellyseerr", request) + if resolved: + machine = store.get_machine_config(resolved["id"]) if machine and machine.get("jellyseerr_url") and machine.get("jellyseerr_api_key"): return JellyseerrClient(machine["jellyseerr_url"], machine.get("jellyseerr_api_key") or "") @@ -217,7 +229,13 @@ def get_settings_store() -> SettingsStore: def get_user_id(request: Request = None) -> str: """Return the configured Jellyfin user ID or discover the first available one.""" - machine = get_settings_store().get_machine_config(_request_machine_id(request)) or _resolve_machine("jellyfin", request) + store = get_settings_store() + machine_id = _request_machine_id(request) + machine = store.get_machine_config(machine_id) if machine_id else None + if machine is None: + resolved = _resolve_machine("jellyfin", request) + if resolved: + machine = store.get_machine_config(resolved["id"]) if machine and machine.get("jellyfin_user_id"): return str(machine["jellyfin_user_id"]) client = get_jellyfin_client(request) diff --git a/frontend/src/pages/Settings.tsx b/frontend/src/pages/Settings.tsx index ff944ce..137db71 100644 --- a/frontend/src/pages/Settings.tsx +++ b/frontend/src/pages/Settings.tsx @@ -78,6 +78,7 @@ function MachineEditor({ hint, machine, sshKeys, + editingMachine, onChange, onValidateSSH, isValidatingSSH, @@ -89,6 +90,7 @@ function MachineEditor({ hint?: string; machine: MonitoringMachineInput; sshKeys: SSHKey[]; + editingMachine?: MonitoringMachine | null; onChange: ( draft: | MonitoringMachineInput @@ -107,6 +109,8 @@ function MachineEditor({ const enabledServices = draft.services.length; const hasJellyfin = draft.services.includes("jellyfin"); const hasJellyseerr = draft.services.includes("jellyseerr"); + const placeholderIfSet = (isSet: boolean | undefined) => + isSet ? "Set, not shown" : undefined; return ( @@ -322,6 +326,7 @@ function MachineEditor({ size="small" label="Password" type="password" + placeholder={placeholderIfSet(editingMachine?.password_set)} value={draft.password} onChange={(e) => setDraft((current) => ({ @@ -419,6 +424,7 @@ function MachineEditor({ size="small" label="Jellyfin API key" type="password" + placeholder={placeholderIfSet(editingMachine?.jellyfin_api_key_set)} value={draft.jellyfin_api_key} onChange={(e) => setDraft((current) => ({ @@ -470,6 +476,7 @@ function MachineEditor({ size="small" label="Jellyseerr API key" type="password" + placeholder={placeholderIfSet(editingMachine?.jellyseerr_api_key_set)} value={draft.jellyseerr_api_key} onChange={(e) => setDraft((current) => ({ @@ -832,18 +839,34 @@ function SSHKeyManager({ sshKeys }: { sshKeys: SSHKey[] }) { -