mirror of
https://github.com/lsd-rs/lsd
synced 2025-03-04 23:17:15 +00:00
show - for size when if it is not a file
This commit is contained in:
parent
55546fbc50
commit
355091b301
3 changed files with 44 additions and 24 deletions
29
src/batch.rs
29
src/batch.rs
|
@ -57,6 +57,20 @@ impl Batch {
|
|||
for meta in &self.0 {
|
||||
let icon = icons.get(&meta.name);
|
||||
|
||||
let mut size_str;
|
||||
if let Some(ref size) = meta.size {
|
||||
size_str = size.render(colors, max_size_value_length, max_size_unit_length);
|
||||
} else {
|
||||
size_str = ANSIString::from(
|
||||
" ".repeat(max_size_value_length + max_size_unit_length) + "-",
|
||||
);
|
||||
}
|
||||
|
||||
let mut link_str = ANSIString::from("");
|
||||
if let Some(ref symlink) = meta.symlink {
|
||||
link_str = symlink.render(colors);
|
||||
}
|
||||
|
||||
let strings: &[ANSIString] = &[
|
||||
meta.file_type.render(colors),
|
||||
meta.permissions.render(colors),
|
||||
|
@ -65,8 +79,7 @@ impl Batch {
|
|||
ANSIString::from(" "),
|
||||
meta.owner.render_group(colors, max_group_length),
|
||||
ANSIString::from(" "),
|
||||
meta.size
|
||||
.render(colors, max_size_value_length, max_size_unit_length),
|
||||
size_str,
|
||||
ANSIString::from(" "),
|
||||
meta.date.render(colors),
|
||||
ANSIString::from(" "),
|
||||
|
@ -112,12 +125,14 @@ impl Batch {
|
|||
let mut max_unit_size: usize = 0;
|
||||
|
||||
for meta in &self.0 {
|
||||
if meta.size.render_value().len() > max_value_length {
|
||||
max_value_length = meta.size.render_value().len();
|
||||
}
|
||||
if let Some(ref size) = meta.size {
|
||||
if size.render_value().len() > max_value_length {
|
||||
max_value_length = size.render_value().len();
|
||||
}
|
||||
|
||||
if meta.size.render_unit().len() > max_unit_size {
|
||||
max_unit_size = meta.size.render_unit().len();
|
||||
if size.render_unit().len() > max_unit_size {
|
||||
max_unit_size = size.render_unit().len();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -26,8 +26,13 @@ pub struct Meta {
|
|||
pub date: Date,
|
||||
pub owner: Owner,
|
||||
pub file_type: FileType,
|
||||
<<<<<<< HEAD
|
||||
pub size: Size,
|
||||
pub symlink: SymLink,
|
||||
=======
|
||||
pub size: Option<Size>,
|
||||
pub symlink: Option<SymLink>,
|
||||
>>>>>>> show - for size when if it is not a file
|
||||
}
|
||||
|
||||
impl Meta {
|
||||
|
@ -53,7 +58,7 @@ impl Meta {
|
|||
Some(Meta {
|
||||
path: path.to_path_buf(),
|
||||
symlink: SymLink::from(path.as_path()),
|
||||
size: Size::from(&metadata),
|
||||
size: Size::from_bytes(&metadata),
|
||||
permissions: Permissions::from(&metadata),
|
||||
date: Date::from(&metadata),
|
||||
owner: Owner::from(&metadata),
|
||||
|
|
|
@ -16,16 +16,16 @@ pub struct Size {
|
|||
unit: Unit,
|
||||
}
|
||||
|
||||
impl<'a> From<&'a Metadata> for Size {
|
||||
fn from(meta: &Metadata) -> Self {
|
||||
let len = meta.len();
|
||||
|
||||
Size::from_bytes(len as i64)
|
||||
}
|
||||
}
|
||||
|
||||
impl Size {
|
||||
fn from_bytes(len: i64) -> Self {
|
||||
pub fn from_bytes(meta: &Metadata) -> Option<Self> {
|
||||
if !meta.is_file() {
|
||||
return None;
|
||||
}
|
||||
|
||||
Some(Size::get_file_size(meta.len() as i64))
|
||||
}
|
||||
|
||||
fn get_file_size(len: i64) -> Self {
|
||||
if len < 1024 {
|
||||
Size {
|
||||
value: len * 1024,
|
||||
|
@ -127,7 +127,7 @@ mod tests {
|
|||
|
||||
#[test]
|
||||
fn render_byte() {
|
||||
let size = Size::from_bytes(42); // == 42 bytes
|
||||
let size = Size::get_file_size(42); // == 42 bytes
|
||||
|
||||
assert_eq!(size.render_value().as_str(), "42");
|
||||
assert_eq!(size.render_unit().as_str(), "B");
|
||||
|
@ -135,7 +135,7 @@ mod tests {
|
|||
|
||||
#[test]
|
||||
fn render_kilobyte() {
|
||||
let size = Size::from_bytes(42 * 1024); // 42 kilobytes
|
||||
let size = Size::get_file_size(42 * 1024); // 42 kilobytes
|
||||
|
||||
assert_eq!(size.render_value().as_str(), "42");
|
||||
assert_eq!(size.render_unit().as_str(), "KB");
|
||||
|
@ -143,7 +143,7 @@ mod tests {
|
|||
|
||||
#[test]
|
||||
fn render_megabyte() {
|
||||
let size = Size::from_bytes(42 * 1024 * 1024); // 42 megabytes
|
||||
let size = Size::get_file_size(42 * 1024 * 1024); // 42 megabytes
|
||||
|
||||
assert_eq!(size.render_value().as_str(), "42");
|
||||
assert_eq!(size.render_unit().as_str(), "MB");
|
||||
|
@ -151,7 +151,7 @@ mod tests {
|
|||
|
||||
#[test]
|
||||
fn render_gigabyte() {
|
||||
let size = Size::from_bytes(42 * 1024 * 1024 * 1024); // 42 gigabytes
|
||||
let size = Size::get_file_size(42 * 1024 * 1024 * 1024); // 42 gigabytes
|
||||
|
||||
assert_eq!(size.render_value().as_str(), "42");
|
||||
assert_eq!(size.render_unit().as_str(), "GB");
|
||||
|
@ -159,7 +159,7 @@ mod tests {
|
|||
|
||||
#[test]
|
||||
fn render_terabyte() {
|
||||
let size = Size::from_bytes(42 * 1024 * 1024 * 1024 * 1024); // 42 terabytes
|
||||
let size = Size::get_file_size(42 * 1024 * 1024 * 1024 * 1024); // 42 terabytes
|
||||
|
||||
assert_eq!(size.render_value().as_str(), "42");
|
||||
assert_eq!(size.render_unit().as_str(), "TB");
|
||||
|
@ -167,7 +167,7 @@ mod tests {
|
|||
|
||||
#[test]
|
||||
fn render_with_a_fraction() {
|
||||
let size = Size::from_bytes(42 * 1024 + 103); // 42.1 kilobytes
|
||||
let size = Size::get_file_size(42 * 1024 + 103); // 42.1 kilobytes
|
||||
|
||||
assert_eq!(size.render_value().as_str(), "42.1");
|
||||
assert_eq!(size.render_unit().as_str(), "KB");
|
||||
|
@ -175,7 +175,7 @@ mod tests {
|
|||
|
||||
#[test]
|
||||
fn render_with_a_truncated_fraction() {
|
||||
let size = Size::from_bytes(42 * 1024 + 1); // 42.001 kilobytes == 42 kilobytes
|
||||
let size = Size::get_file_size(42 * 1024 + 1); // 42.001 kilobytes == 42 kilobytes
|
||||
|
||||
assert_eq!(size.render_value().as_str(), "42");
|
||||
assert_eq!(size.render_unit().as_str(), "KB");
|
||||
|
|
Loading…
Add table
Reference in a new issue