From 6e412fc59c9c895842dfb2485aeb33cd0df028e7 Mon Sep 17 00:00:00 2001 From: sreedev Date: Mon, 9 Jan 2023 22:40:37 -0500 Subject: [PATCH] table display improvements --- src/output.rs | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/src/output.rs b/src/output.rs index 0724bd8..0fedfea 100644 --- a/src/output.rs +++ b/src/output.rs @@ -8,7 +8,7 @@ use humansize::{format_size, DECIMAL}; use crate::database::File; use crate::params::Params; -use prettytable::{row, Cell, Row, Table}; +use prettytable::{row, Cell, Row, format, Table}; fn format_path(path: &str, opts: &Params) -> Result { let display_path = path.replace(&opts.get_directory()?, ""); @@ -22,12 +22,12 @@ fn format_path(path: &str, opts: &Params) -> Result { display_path }; - Ok(format!("...{}", display_range)) + Ok(format!("...{:<32}", display_range)) } fn file_size(path: &String) -> Result { let mdata = fs::metadata(path)?; - let formatted_size = format_size(mdata.len(), DECIMAL); + let formatted_size = format!("{:>12}", format_size(mdata.len(), DECIMAL)); Ok(formatted_size) } @@ -38,20 +38,28 @@ fn modified_time(path: &String) -> Result { Ok(modified_time.format("%Y-%m-%d %H:%M:%S").to_string()) } -pub fn print(duplicates: Vec, opts: &Params) { - let mut output_table = Table::new(); - let mut dup_index: HashMap> = HashMap::new(); - output_table.add_row(row!["hash", "duplicates"]); +fn group_duplicates(duplicates: Vec) -> HashMap> { + let mut duplicate_mapper: HashMap> = HashMap::new(); duplicates.into_iter().for_each(|file| { - dup_index + duplicate_mapper .entry(file.hash.clone()) .and_modify(|value| value.push(file.clone())) .or_insert_with(|| vec![file]); }); - dup_index.iter().for_each(|(hash, group)| { + duplicate_mapper +} + +pub fn print(duplicates: Vec, opts: &Params) { + let mut output_table = Table::new(); + let grouped_duplicates: HashMap> = group_duplicates(duplicates); + + output_table.set_titles(row!["hash", "duplicates"]); + grouped_duplicates.iter().for_each(|(hash, group)| { let mut inner_table = Table::new(); - inner_table.add_row(row!["filename", "size", "updated_at"]); + // inner_table.set_format(inner_table_format); + inner_table.set_format(*format::consts::FORMAT_NO_BORDER_LINE_SEPARATOR); + //inner_table.set_titles(row!["filename", "size", "updated_at"]); group.iter().for_each(|file| { inner_table.add_row(row![ format_path(&file.path, opts).unwrap_or_default().blue(), @@ -59,7 +67,7 @@ pub fn print(duplicates: Vec, opts: &Params) { modified_time(&file.path).unwrap_or_default().yellow() ]); }); - output_table.add_row(row![hash, inner_table]); + output_table.add_row(row![hash.green(), inner_table]); }); output_table.printstd();