show - for size when if it is not a file

This commit is contained in:
Abin Simon 2018-12-08 14:51:05 +05:30 committed by Pierre Peltier
parent 55546fbc50
commit 355091b301
3 changed files with 44 additions and 24 deletions

View file

@ -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();
}
}
}

View file

@ -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),

View file

@ -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");