From 8f6f992670fcc772dfbf94abeef856e325e355c0 Mon Sep 17 00:00:00 2001 From: BoulderBadgeDad Date: Mon, 15 Jun 2026 15:10:53 -0700 Subject: [PATCH] video: self-contained video Source section; hide music's server settings on video MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Per the desired model: video Settings has its OWN server settings, separate from music. The 'Video Source' group now holds the Plex/Jellyfin pick AND the Movies/TV library mapping (moved out of music's Plex panel so it's not coupled to the music active server). The whole MUSIC 'Server Connections' group is hidden on the video side. Video reuses the shared Plex/Jellyfin credentials: the picker shows both servers, the configured ones selectable, the rest 'not connected — set up in Music settings'. Music settings keep their own server settings, untouched. --- webui/index.html | 28 ++++++++++++---------------- webui/static/video/video-settings.js | 25 ++++++++++++++----------- webui/static/video/video-side.css | 9 +++++++++ 3 files changed, 35 insertions(+), 27 deletions(-) diff --git a/webui/index.html b/webui/index.html index 48268eb0..92fe0871 100644 --- a/webui/index.html +++ b/webui/index.html @@ -5133,12 +5133,23 @@ - +

Video Source

Checking…
+
+ + + + + + Which libraries the video side scans. + +

API Configuration

@@ -5300,21 +5311,6 @@ Select which music library to use (doesn't affect config file)
- -
- - - - - - Which libraries the video side scans. - -
diff --git a/webui/static/video/video-settings.js b/webui/static/video/video-settings.js index 4b5d1dda..7f70caf5 100644 --- a/webui/static/video/video-settings.js +++ b/webui/static/video/video-settings.js @@ -28,24 +28,27 @@ .then(function (d) { renderServer(host, d || {}); }) .catch(function () { renderServer(host, {}); }); } - function srvBtn(id, label, active) { - return ''; + } + return ''; } function renderServer(host, d) { var plex = !!d.plex, jelly = !!d.jellyfin; + var html = '
' + + srvOpt('plex', 'Plex', plex, d.server) + srvOpt('jellyfin', 'Jellyfin', jelly, d.server) + '
'; if (!plex && !jelly) { - host.innerHTML = '
No video server connected. ' + - 'Connect Plex or Jellyfin under Server Connections ' + - 'below to scan and browse your video library. (Navidrome and Standalone are music-only.)
'; - } else if (plex && jelly) { - host.innerHTML = '
' + - srvBtn('plex', 'Plex', d.server) + srvBtn('jellyfin', 'Jellyfin', d.server) + '
' + - '
Both are connected — pick which one the video side uses.
'; + html += '
Neither is connected yet. Set up Plex or Jellyfin in ' + + 'Music → Settings → Server Connections — the video side reuses those credentials.
'; } else { - host.innerHTML = '
' + - 'Video uses ' + (plex ? 'Plex' : 'Jellyfin') + '
'; + html += '
The video side uses this server, independent of Music. ' + + 'Greyed-out options aren\'t connected — set them up in Music settings.
'; } + host.innerHTML = html; } function pickServer(id) { fetch(SERVER_URL, { diff --git a/webui/static/video/video-side.css b/webui/static/video/video-side.css index 48163c35..484e7ba9 100644 --- a/webui/static/video/video-side.css +++ b/webui/static/video/video-side.css @@ -140,6 +140,12 @@ body[data-side="video"] [data-music-only] { body[data-side="video"] [data-stg="library"]:not([data-video-only]) { display: none !important; } +/* The video side has its OWN server section (Video Source above) and reuses the + shared Plex/Jellyfin credentials — so hide music's Server Connections group + entirely on the video side. Video never configures or selects the MUSIC server. */ +body[data-side="video"] .settings-group[data-stg="connections"]:not([data-video-only]) { + display: none !important; +} /* ── Dashboard header: match music, minus the sweep animation ──────────── */ /* The header reuses music's .dashboard-header markup/CSS for an identical look; @@ -1479,6 +1485,9 @@ a.vd-guest:hover .vd-guest-name { color: rgb(var(--vd-accent-rgb)); } } .vid-source-btn:hover { background: rgba(255, 255, 255, 0.12); color: #fff; } .vid-source-btn.active { background: rgba(56, 189, 248, 0.9); border-color: transparent; color: #fff; } +.vid-source-btn--off { opacity: 0.45; cursor: not-allowed; } +.vid-source-btn--off:hover { background: rgba(255, 255, 255, 0.06); color: rgba(255, 255, 255, 0.8); } +.vid-source-off { font-size: 11px; opacity: 0.85; } /* library: no-server gate banner */ .video-noserver {