use crate::detect::{Row, Rows};
pub fn detect() -> Rows {
let Ok(entries) = std::fs::read_dir("/sys/class/power_supply") else {
return Vec::new();
};
let mut names: Vec<String> = entries
.filter_map(|e| e.ok())
.filter_map(|e| e.file_name().into_string().ok())
.collect();
names.sort();
let mut rows = Vec::new();
for name in names {
let base = format!("/sys/class/power_supply/{name}");
match crate::util::read_trim(&format!("{base}/type")).as_deref() {
Some("Battery") => {}
_ => continue,
}
let Some(capacity) = crate::util::read_trim(&format!("{base}/capacity")) else {
continue;
};
let status = crate::util::read_trim(&format!("{base}/status"))
.unwrap_or_else(|| "Unknown".to_string());
rows.push(Row::val(format!("{capacity}% ({status})")));
}
rows
}