summaryrefslogtreecommitdiffstats
path: root/src/utils.rs
diff options
context:
space:
mode:
authorqkzk <qu3nt1n@gmail.com>2022-12-05 15:23:22 +0100
committerqkzk <qu3nt1n@gmail.com>2022-12-05 15:23:22 +0100
commitd0d34172f6e1646e7ff16c8361a3a9d0df021395 (patch)
treeb23ede7730363d7f4d0f7e4c3df6f03ccee38882 /src/utils.rs
parent4a3cb5946a1f11d58444343ee4a24771a9e1aac2 (diff)
add a shortcut to every mount point in system
Diffstat (limited to 'src/utils.rs')
-rw-r--r--src/utils.rs28
1 files changed, 20 insertions, 8 deletions
diff --git a/src/utils.rs b/src/utils.rs
index 3ce6685..51b1c01 100644
--- a/src/utils.rs
+++ b/src/utils.rs
@@ -1,3 +1,4 @@
+use std::path::PathBuf;
use std::sync::Arc;
use sysinfo::{Disk, DiskExt};
@@ -16,19 +17,30 @@ pub fn init_term() -> FmResult<Term> {
Ok(term)
}
-pub fn disk_space(disks: &[Disk], path_str: String) -> String {
- if path_str.is_empty() {
- return "".to_owned();
- }
- let mut size = 0_u64;
+fn disk_used_by_path<'a>(disks: &'a [Disk], path: &PathBuf) -> Option<&'a Disk> {
let mut disks: Vec<&Disk> = disks.iter().collect();
disks.sort_by_key(|disk| disk.mount_point().as_os_str().len());
+ disks.reverse();
for disk in disks {
- if path_str.contains(disk.mount_point().as_os_str().to_str().unwrap()) {
- size = disk.available_space();
+ if path.starts_with(disk.mount_point()) {
+ return Some(disk);
};
}
- human_size(size)
+ None
+}
+
+fn disk_space_used(disk: Option<&Disk>) -> String {
+ match disk {
+ None => "".to_owned(),
+ Some(disk) => human_size(disk.available_space()),
+ }
+}
+
+pub fn disk_space(disks: &[Disk], path: &PathBuf) -> String {
+ if path.as_os_str().is_empty() {
+ return "".to_owned();
+ }
+ disk_space_used(disk_used_by_path(disks, path))
}
pub fn print_on_quit(