Web UI: fix Plex status text, PLEX_URL/PLEX_TOKEN env, local stem server auto-detect, WEB=0
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
2a4e848788
commit
4b53a720c4
5 files changed
+47
-2
No files matched your search
+24
-2
@@ -782,7 +782,7 @@ const routes = {
|
||||
if (S.plex) secs = ((await px("/library/sections").catch(() => ({}))).Directory || []).filter(d => d.type === "artist");
|
||||
view.innerHTML = `<h1>Settings</h1>
|
||||
<h2>Plex</h2><div class="form">
|
||||
<p class="note">${S.plex ? `Connected to <b>${esc(S.plex.name || S.plex.url)}</b> at ${esc(S.plex.url)}` : "Not signed in."}</p>
|
||||
<p class="note">${S.plex ? `Plex: <b>${esc(S.plex.name && S.plex.name !== S.plex.url ? S.plex.name + " (" + S.plex.url + ")" : S.plex.url)}</b>${S.plex.env ? " (set by the server)" : ""}` : "Not signed in."}</p>
|
||||
<div class="row"><button class="btn primary" id="signin">Sign in with Plex</button>${S.plex ? `<button class="btn" id="signout">Sign out</button>` : ""}<span class="note" id="sstatus"></span></div>
|
||||
${secs.length > 1 ? `<label>Music library<select id="sec">${secs.map(d => `<option value="${d.key}" ${d.key == S.section ? "selected" : ""}>${esc(d.title)}</option>`).join("")}</select></label>` : ""}
|
||||
<details><summary class="note">Enter a server and token by hand</summary><div class="form" style="margin-top:12px">
|
||||
@@ -835,10 +835,32 @@ $("#search").onsubmit = ev => {
|
||||
if (q) location.hash = "#/search/" + encodeURIComponent(q);
|
||||
};
|
||||
|
||||
// Plex from the server's PLEX_URL / PLEX_TOKEN when nothing was signed in by hand, and a
|
||||
// local stemserve when this page's own server has none.
|
||||
async function autoConnect() {
|
||||
const ok = await Stems.refresh();
|
||||
if (!ok && !Stems.ok && !S.stemUrl && !/^(localhost|127\.0\.0\.1)$/.test(location.hostname)) {
|
||||
for (const u of ["http://localhost:8765", "http://127.0.0.1:8765"]) {
|
||||
try {
|
||||
const r = await fetch(u + "/api/info" + stemQuery(), { signal: AbortSignal.timeout(1500) });
|
||||
if (r.ok) { S.stemUrl = u; save(); await Stems.refresh(); break; }
|
||||
} catch {}
|
||||
}
|
||||
}
|
||||
if (!S.plex || S.plex.env) {
|
||||
try {
|
||||
const c = await fetch(stemBase() + "/api/config" + stemQuery()).then(r => r.ok ? r.json() : null);
|
||||
if (c?.plex) S.plex = { ...c.plex, name: "", env: true };
|
||||
else if (S.plex?.env) S.plex = null;
|
||||
save();
|
||||
} catch {}
|
||||
}
|
||||
}
|
||||
|
||||
// ---- start -----------------------------------------------------------------------------
|
||||
|
||||
(async () => {
|
||||
await Promise.race([Stems.refresh(), new Promise(r => setTimeout(r, 4000))]);
|
||||
await Promise.race([autoConnect(), new Promise(r => setTimeout(r, 4000))]);
|
||||
const saved = load(KEY + "-queue");
|
||||
if (saved?.items?.length) {
|
||||
Q.items = saved.items; Q.orig = saved.orig; Q.i = Math.min(saved.i, saved.items.length - 1);
|
||||
|
||||
Reference in new issue
Block a user