Fix device detection, tree indentation, and hide Single storage type

- Replace findmnt with lsblk for efficient device name detection
- Fix tree indentation to align consistently with status icon text
- Hide '(Single)' label for single disk storage pools
- Device detection returns actual names (nvme0n1, sda) not UUID paths
This commit is contained in:
Christoffer Martinsson 2025-10-23 19:06:52 +02:00
parent 9f34c67bfa
commit ad298ac70c
2 changed files with 21 additions and 14 deletions

View File

@ -262,10 +262,10 @@ impl DiskCollector {
}
}
/// Detect device backing a mount point using findmnt (static version for startup)
/// Detect device backing a mount point using lsblk (static version for startup)
fn detect_device_for_mount_point_static(mount_point: &str) -> Result<Vec<String>> {
let output = Command::new("findmnt")
.args(&["-n", "-o", "SOURCE", mount_point])
let output = Command::new("lsblk")
.args(&["-n", "-o", "NAME,MOUNTPOINT"])
.output()?;
if !output.status.success() {
@ -273,14 +273,16 @@ impl DiskCollector {
}
let output_str = String::from_utf8_lossy(&output.stdout);
let device_path = output_str.trim();
// Extract device name from path (e.g., /dev/nvme0n1 -> nvme0n1)
if let Some(device_name) = device_path.strip_prefix("/dev/") {
Ok(vec![device_name.to_string()])
} else {
Ok(Vec::new())
for line in output_str.lines() {
let parts: Vec<&str> = line.split_whitespace().collect();
if parts.len() >= 2 && parts[1] == mount_point {
let device_name = parts[0].trim();
return Ok(vec![device_name.to_string()]);
}
}
Ok(Vec::new())
}
/// Get directory size using du command (efficient for single directory)

View File

@ -254,9 +254,14 @@ impl SystemWidget {
_ => "—% —GB/—GB".to_string(),
};
let pool_label = if pool.pool_type.to_lowercase() == "single" {
format!("{}:", pool.mount_point)
} else {
format!("{} ({}):", pool.mount_point, pool.pool_type)
};
let pool_spans = StatusIcons::create_status_spans(
pool.status.clone(),
&format!("{} ({}):", pool.mount_point, pool.pool_type)
&pool_label
);
lines.push(Line::from(pool_spans));
@ -280,7 +285,7 @@ impl SystemWidget {
};
let mut drive_spans = vec![
Span::raw(" "),
Span::raw(" "),
Span::raw(tree_symbol),
Span::raw(" "),
];
@ -292,7 +297,7 @@ impl SystemWidget {
if pool.usage_percent.is_some() {
let tree_symbol = "└─";
let mut usage_spans = vec![
Span::raw(" "),
Span::raw(" "),
Span::raw(tree_symbol),
Span::raw(" "),
];
@ -429,7 +434,7 @@ impl Widget for SystemWidget {
let freq_text = self.format_cpu_frequency();
lines.push(Line::from(vec![
Span::raw("└─ "),
Span::raw(" └─ "),
Span::styled(format!("Freq: {}", freq_text), Typography::secondary())
]));
@ -443,7 +448,7 @@ impl Widget for SystemWidget {
let tmp_text = self.format_tmp_usage();
let mut tmp_spans = vec![
Span::raw(" └─ "),
Span::raw(" └─ "),
];
tmp_spans.extend(StatusIcons::create_status_spans(
self.memory_status.clone(),