You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(jellyfin): inline-validate the off-media config folder field (like Plex) (#275)
The off-media "Jellyfin config folder" settings field had no inline validation
— only the Setup Health tab checked it (#274). The Plex config-folder field
validates live via /api/settings/validate-plex-config-folder; this adds the
Jellyfin equivalent so the field shows valid/invalid as you type.
- New POST /api/settings/validate-jellyfin-config-folder (mirrors the Plex
one): {exists, valid_jellyfin_structure, writable, detail, error}. Unlike
Plex it isn't restricted to a fixed root (Jellyfin config is an arbitrary
admin mount); admin-only, read-only stat, null-byte guarded.
- Extracted looks_like_jellyfin_config_dir()/jellyfin_config_data_marker()
into output/jellyfin_trickplay.py and pointed BOTH the Setup Health probe
and the new endpoint at them, so the field validator and the health check
can never disagree.
- servers.js: the editJellyfinConfigFolder field is wired to the live
validator (bound once; validates on input, on browse-pick, and on open when
off-media is on) and routed to the new endpoint with a "Valid Jellyfin
config folder" message. servers.html: added the invalid/valid feedback spans
+ has-validation to the field's input-group so messages render.
Tests: endpoint valid-via-data, valid-via-plugins, not-found, wrong-folder
(media dir) -> error, empty -> neutral, valid-but-read-only -> flagged.
Architecture Review run; the MED (read-only branch coverage) fixed before commit.
Claude-Session: https://claude.ai/code/session_01YC1Z1JFBVJ5xKi5YAqYKfc
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
title="Path inside THIS container where Jellyfin's config dir is bind-mounted read-write. This app writes trickplay into its data/trickplay subfolder. Must be mounted :rw, not :ro."><iclass="bi bi-info-circle"></i></button>
<divclass="alert alert-warning small mt-2 mb-0" id="editJellyfinOffMediaWarning">
183
185
<iclass="bi bi-exclamation-triangle me-1"></i>With this on, the app writes to Jellyfin's config dir (not your media). Jellyfin's <code>SaveTrickplayWithMedia</code> must be <strong>off</strong> — the <strong>Setup Health</strong> tab guides you and flags the plugin + read-write mount.
0 commit comments