diff --git a/Data/Server/WebUI/src/Device_Details.jsx b/Data/Server/WebUI/src/Device_Details.jsx index 5309b8a..6c61e2b 100644 --- a/Data/Server/WebUI/src/Device_Details.jsx +++ b/Data/Server/WebUI/src/Device_Details.jsx @@ -283,13 +283,33 @@ export default function DeviceDetails({ device, onBack }) { }; const renderStorage = () => { - const rows = (details.storage || []).map((d) => ({ - drive: d.drive, - disk_type: d.disk_type, - usage: d.usage !== undefined ? Number(d.usage) : undefined, - total: d.total !== undefined ? Number(d.total) : undefined, - free: d.free !== undefined ? Number(d.free) : undefined, - })); + const parseNum = (val) => { + if (val === undefined || val === null) return undefined; + const n = Number(String(val).replace(/[^0-9.]/g, "")); + return Number.isNaN(n) ? undefined : n; + }; + const rows = (details.storage || []).map((d) => { + const total = parseNum(d.total); + const rawFree = parseNum(d.free); + const freePct = rawFree !== undefined + ? rawFree <= 100 + ? rawFree + : total + ? (rawFree / total) * 100 + : undefined + : undefined; + let usage = parseNum(d.usage); + if ((usage === undefined || Number.isNaN(usage)) && freePct !== undefined) { + usage = 100 - freePct; + } + return { + drive: d.drive, + disk_type: d.disk_type, + usage, + total, + free: freePct, + }; + }); if (!rows.length) return placeholderTable(["Drive Letter", "Disk Type", "Usage", "Total Size", "Free %"]); return ( diff --git a/Data/Server/WebUI/src/Device_List.jsx b/Data/Server/WebUI/src/Device_List.jsx index 0799c4c..adf87c7 100644 --- a/Data/Server/WebUI/src/Device_List.jsx +++ b/Data/Server/WebUI/src/Device_List.jsx @@ -172,18 +172,20 @@ export default function DeviceList({ onSelectDevice }) { sx={{ cursor: onSelectDevice ? "pointer" : "default" }} > - - {r.status} + + + {r.status} + {r.hostname} {timeSince(r.lastSeen)}