diff --git a/apps/admin-ui/src/app/nodes/page.tsx b/apps/admin-ui/src/app/nodes/page.tsx index ff0fc33..69963f3 100644 --- a/apps/admin-ui/src/app/nodes/page.tsx +++ b/apps/admin-ui/src/app/nodes/page.tsx @@ -64,11 +64,16 @@ export default function NodesPage() { const [editScanAt, setEditScanAt] = useState("03:30"); const [editRoots, setEditRoots] = useState([]); const [editBusy, setEditBusy] = useState(false); + const [upgradingId, setUpgradingId] = useState(null); + const [targetNodeVersion, setTargetNodeVersion] = useState("1.3.3"); function loadNodes() { fetch("/api/v1/admin/nodes", { credentials: "include" }) .then((r) => r.json()) - .then((d) => setNodes(d.nodes ?? [])); + .then((d) => { + setNodes(d.nodes ?? []); + if (d.targetNodeVersion) setTargetNodeVersion(d.targetNodeVersion); + }); } function loadShelves() { @@ -164,24 +169,30 @@ export default function NodesPage() { } async function upgradeNode(id: string, name: string) { - const res = await fetch(`/api/v1/admin/nodes/${id}/upgrade-command`, { - credentials: "include", - }); - if (!res.ok) { + if (!confirm(`Node "${name}" upgraden naar ${targetNodeVersion}?`)) return; + setUpgradingId(id); + try { + const res = await fetch(`/api/v1/admin/nodes/${id}/upgrade`, { + method: "POST", + credentials: "include", + }); const data = await res.json(); - alert(data.error?.message ?? "Upgrade-commando ophalen mislukt"); - return; + if (data.manualRequired) { + await navigator.clipboard.writeText(data.command); + alert( + `${data.message ?? "Handmatige upgrade nodig."}\n\nCommando gekopieerd — plak in SSH op de ${data.platform === "synology" ? "Synology" : "Unraid"}-host:\n\n${data.command}` + ); + return; + } + if (!res.ok) { + alert(data.error?.message ?? "Upgrade mislukt"); + return; + } + alert(data.message ?? `Upgrade naar ${targetNodeVersion} gestart.`); + loadNodes(); + } finally { + setUpgradingId(null); } - const data = (await res.json()) as { - command: string; - currentVersion: string | null; - targetVersion: string; - platform: string; - }; - await navigator.clipboard.writeText(data.command); - alert( - `Upgrade-commando gekopieerd voor "${name}".\n\nPlak in SSH/terminal op de ${data.platform === "synology" ? "Synology" : "Unraid"}-host:\n\n${data.command}\n\nHuidig: ${data.currentVersion ?? "?"} → ${data.targetVersion}` - ); } async function revokeNode(id: string) { @@ -536,16 +547,20 @@ export default function NodesPage() { {node.activeStreams} {node.version ?? "-"} - {node.version && node.version !== "1.3.2" && ( + {node.version && node.version !== targetNodeVersion && ( update )} - {node.version !== "1.3.2" && ( - )}