diff options
author | DLFW <daniel@llin.info> | 2021-06-22 03:31:45 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-21 21:31:45 -0400 |
commit | a4b4a1b4b9c7827f756e9950d73dc885d2954ff9 (patch) | |
tree | 55e2ca0d4db9d9a1a47420efa8d7613723bc1a43 | |
parent | 26a5ce4f627195d0f075d6ae102c0110e8bd83f1 (diff) |
show size of directories (#76)
The middle column shows the size of directories in terms of contained
files and sub-directories in the right label for each entry.
Invalid symlinks and hidden files/dirs are included in the count.
-rw-r--r-- | src/fs/metadata.rs | 12 | ||||
-rw-r--r-- | src/ui/widgets/tui_dirlist_detailed.rs | 6 |
2 files changed, 14 insertions, 4 deletions
diff --git a/src/fs/metadata.rs b/src/fs/metadata.rs index 809c205..cc3e0c6 100644 --- a/src/fs/metadata.rs +++ b/src/fs/metadata.rs @@ -15,6 +15,7 @@ pub enum LinkType { #[derive(Clone, Debug)] pub struct JoshutoMetadata { _len: u64, + _directory_size: Option<usize>, _modified: time::SystemTime, _permissions: fs::Permissions, _file_type: FileType, @@ -38,10 +39,10 @@ impl JoshutoMetadata { let _len = metadata.len(); let _modified = metadata.modified()?; let _permissions = metadata.permissions(); - let _file_type = if metadata.file_type().is_dir() { - FileType::Directory + let (_file_type, _directory_size) = if metadata.file_type().is_dir() { + (FileType::Directory, Some(fs::read_dir(path)?.count())) } else { - FileType::File + (FileType::File, None) }; let _link_type = match symlink_metadata.file_type().is_symlink() { true => { @@ -66,6 +67,7 @@ impl JoshutoMetadata { Ok(Self { _len, + _directory_size, _modified, _permissions, _file_type, @@ -83,6 +85,10 @@ impl JoshutoMetadata { self._len } + pub fn directory_size(&self) -> Option<usize> { + self._directory_size + } + pub fn modified(&self) -> time::SystemTime { self._modified } diff --git a/src/ui/widgets/tui_dirlist_detailed.rs b/src/ui/widgets/tui_dirlist_detailed.rs index 08772bc..08777ed 100644 --- a/src/ui/widgets/tui_dirlist_detailed.rs +++ b/src/ui/widgets/tui_dirlist_detailed.rs @@ -81,7 +81,11 @@ fn print_entry( drawing_width: usize, ) { let size_string = match entry.metadata.file_type() { - FileType::Directory => String::from(""), + FileType::Directory => entry + .metadata + .directory_size() + .expect("Directory doesn't have size") + .to_string(), FileType::File => format::file_size_to_string(entry.metadata.len()), }; let symlink_string = match entry.metadata.link_type() { |