Show used storage and green usage bars

This commit is contained in:
2025-08-13 03:23:02 -06:00
parent 396b15aa4c
commit 199f233ad6

View File

@@ -294,43 +294,53 @@ export default function DeviceDetails({ device, onBack }) {
const rows = (details.storage || []).map((d) => { const rows = (details.storage || []).map((d) => {
const total = toNum(d.total); const total = toNum(d.total);
let usage = toNum(d.usage); let usagePct = toNum(d.usage);
let usedBytes = toNum(d.used);
let freeBytes = toNum(d.free);
let freePct; let freePct;
if (usage !== undefined) { if (usagePct !== undefined) {
if (usage <= 1) usage *= 100; if (usagePct <= 1) usagePct *= 100;
freePct = 100 - usage; freePct = 100 - usagePct;
} else {
const freeRaw = toNum(d.free);
if (freeRaw !== undefined) {
if (freeRaw > 1 && freeRaw > 100 && total) {
freePct = (freeRaw / total) * 100;
} else if (freeRaw <= 1) {
freePct = freeRaw * 100;
} else {
freePct = freeRaw;
} }
usage = freePct !== undefined ? 100 - freePct : undefined;
} else { if (usedBytes === undefined && total !== undefined && usagePct !== undefined) {
const usedRaw = toNum(d.used); usedBytes = (usagePct / 100) * total;
if (usedRaw !== undefined && total) {
usage = (usedRaw / total) * 100;
freePct = 100 - usage;
} }
if (freeBytes === undefined && total !== undefined && usedBytes !== undefined) {
freeBytes = total - usedBytes;
} }
if (freePct === undefined && total !== undefined && freeBytes !== undefined) {
freePct = (freeBytes / total) * 100;
}
if (usagePct === undefined && freePct !== undefined) {
usagePct = 100 - freePct;
} }
return { return {
drive: d.drive, drive: d.drive,
disk_type: d.disk_type, disk_type: d.disk_type,
usage, used: usedBytes,
freePct,
freeBytes,
total, total,
free: freePct, usage: usagePct,
}; };
}); });
if (!rows.length) if (!rows.length)
return placeholderTable(["Drive Letter", "Disk Type", "Usage", "Total Size", "Free %"]); return placeholderTable([
"Drive Letter",
"Disk Type",
"Used",
"Free %",
"Free GB",
"Total Size",
"Usage",
]);
return ( return (
<Box sx={{ maxHeight: 400, overflowY: "auto" }}> <Box sx={{ maxHeight: 400, overflowY: "auto" }}>
@@ -339,9 +349,11 @@ export default function DeviceDetails({ device, onBack }) {
<TableRow> <TableRow>
<TableCell>Drive Letter</TableCell> <TableCell>Drive Letter</TableCell>
<TableCell>Disk Type</TableCell> <TableCell>Disk Type</TableCell>
<TableCell>Usage</TableCell> <TableCell>Used</TableCell>
<TableCell>Total Size</TableCell>
<TableCell>Free %</TableCell> <TableCell>Free %</TableCell>
<TableCell>Free GB</TableCell>
<TableCell>Total Size</TableCell>
<TableCell>Usage</TableCell>
</TableRow> </TableRow>
</TableHead> </TableHead>
<TableBody> <TableBody>
@@ -349,6 +361,26 @@ export default function DeviceDetails({ device, onBack }) {
<TableRow key={`${d.drive}-${i}`}> <TableRow key={`${d.drive}-${i}`}>
<TableCell>{d.drive}</TableCell> <TableCell>{d.drive}</TableCell>
<TableCell>{d.disk_type}</TableCell> <TableCell>{d.disk_type}</TableCell>
<TableCell>
{d.used !== undefined && !Number.isNaN(d.used)
? formatBytes(d.used)
: "unknown"}
</TableCell>
<TableCell>
{d.freePct !== undefined && !Number.isNaN(d.freePct)
? `${d.freePct.toFixed(1)}%`
: "unknown"}
</TableCell>
<TableCell>
{d.freeBytes !== undefined && !Number.isNaN(d.freeBytes)
? formatBytes(d.freeBytes)
: "unknown"}
</TableCell>
<TableCell>
{d.total !== undefined && !Number.isNaN(d.total)
? formatBytes(d.total)
: "unknown"}
</TableCell>
<TableCell> <TableCell>
<Box sx={{ display: "flex", alignItems: "center" }}> <Box sx={{ display: "flex", alignItems: "center" }}>
<Box sx={{ flexGrow: 1, mr: 1 }}> <Box sx={{ flexGrow: 1, mr: 1 }}>
@@ -358,7 +390,7 @@ export default function DeviceDetails({ device, onBack }) {
sx={{ sx={{
height: 10, height: 10,
bgcolor: "#333", bgcolor: "#333",
"& .MuiLinearProgress-bar": { bgcolor: "#58a6ff" } "& .MuiLinearProgress-bar": { bgcolor: "#00d18c" }
}} }}
/> />
</Box> </Box>
@@ -369,16 +401,6 @@ export default function DeviceDetails({ device, onBack }) {
</Typography> </Typography>
</Box> </Box>
</TableCell> </TableCell>
<TableCell>
{d.total !== undefined && !Number.isNaN(d.total)
? formatBytes(d.total)
: "unknown"}
</TableCell>
<TableCell>
{d.free !== undefined && !Number.isNaN(d.free)
? `${d.free.toFixed(1)}%`
: "unknown"}
</TableCell>
</TableRow> </TableRow>
))} ))}
</TableBody> </TableBody>