mirror of
https://github.com/bootandy/dust.git
synced 2026-06-08 11:29:05 +03:00
feat: Reverse direction of bars
Add bars on right option Add tests
This commit is contained in:
@@ -73,6 +73,12 @@ pub fn build_cli() -> Command<'static> {
|
||||
.long("no-percent-bars")
|
||||
.help("No percent bars or percentages will be displayed"),
|
||||
)
|
||||
.arg(
|
||||
Arg::new("bars_on_right")
|
||||
.short('B')
|
||||
.long("bars-on-right")
|
||||
.help("percent bars moved to right side of screen"),
|
||||
)
|
||||
.arg(
|
||||
Arg::new("min_size")
|
||||
.short('z')
|
||||
|
||||
@@ -25,6 +25,7 @@ pub struct Config {
|
||||
pub only_file: Option<bool>,
|
||||
pub disable_progress: Option<bool>,
|
||||
pub depth: Option<usize>,
|
||||
pub bars_on_right: Option<bool>,
|
||||
}
|
||||
|
||||
impl Config {
|
||||
@@ -93,6 +94,9 @@ impl Config {
|
||||
pub fn get_only_file(&self, options: &ArgMatches) -> bool {
|
||||
Some(true) == self.only_file || options.is_present("only_file")
|
||||
}
|
||||
pub fn get_bars_on_right(&self, options: &ArgMatches) -> bool {
|
||||
Some(true) == self.bars_on_right || options.is_present("bars_on_right")
|
||||
}
|
||||
}
|
||||
|
||||
fn convert_min_size(input: &str, iso: bool) -> Option<usize> {
|
||||
|
||||
+68
-2
@@ -24,6 +24,7 @@ pub struct InitialDisplayData {
|
||||
pub by_filecount: bool,
|
||||
pub is_screen_reader: bool,
|
||||
pub iso: bool,
|
||||
pub bars_on_right: bool,
|
||||
}
|
||||
|
||||
pub struct DisplayData {
|
||||
@@ -98,7 +99,13 @@ impl DrawData<'_> {
|
||||
let mut new_bar = "".to_string();
|
||||
let idx = 5 - level.clamp(1, 4);
|
||||
|
||||
for c in self.percent_bar.chars() {
|
||||
let itr: Box<dyn Iterator<Item = char>> = if self.display_data.initial.bars_on_right {
|
||||
Box::new(self.percent_bar.chars())
|
||||
} else {
|
||||
Box::new(self.percent_bar.chars().rev())
|
||||
};
|
||||
|
||||
for c in itr {
|
||||
num_not_my_bar -= 1;
|
||||
if num_not_my_bar <= 0 {
|
||||
new_bar.push(BLOCKS[0]);
|
||||
@@ -108,7 +115,11 @@ impl DrawData<'_> {
|
||||
new_bar.push(c);
|
||||
}
|
||||
}
|
||||
new_bar
|
||||
if self.display_data.initial.bars_on_right {
|
||||
new_bar
|
||||
} else {
|
||||
new_bar.chars().rev().collect()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -426,6 +437,7 @@ mod tests {
|
||||
by_filecount: false,
|
||||
is_screen_reader: false,
|
||||
iso: false,
|
||||
bars_on_right: false,
|
||||
};
|
||||
DisplayData {
|
||||
initial,
|
||||
@@ -508,4 +520,58 @@ mod tests {
|
||||
"1.0T"
|
||||
);
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
fn build_draw_data<'a>(disp: &'a DisplayData, size: u32) -> (DrawData<'a>, DisplayNode) {
|
||||
let n = DisplayNode {
|
||||
name: PathBuf::from("/short"),
|
||||
size: 2_u64.pow(size),
|
||||
children: vec![],
|
||||
};
|
||||
let first_size_bar = repeat(BLOCKS[0]).take(13).collect();
|
||||
let dd = DrawData {
|
||||
indent: "".into(),
|
||||
percent_bar: first_size_bar,
|
||||
display_data: disp,
|
||||
};
|
||||
(dd, n)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_draw_data() {
|
||||
let disp = &get_fake_display_data(20);
|
||||
let (dd, n) = build_draw_data(disp, 12);
|
||||
let bar = dd.generate_bar(&n, 1);
|
||||
assert_eq!(bar, "█████████████");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_draw_data2() {
|
||||
let disp = &get_fake_display_data(20);
|
||||
let (dd, n) = build_draw_data(disp, 11);
|
||||
let bar = dd.generate_bar(&n, 2);
|
||||
assert_eq!(bar, "███████░░░░░░");
|
||||
}
|
||||
#[test]
|
||||
fn test_draw_data3() {
|
||||
let mut disp = get_fake_display_data(20);
|
||||
let (dd, n) = build_draw_data(&disp, 11);
|
||||
let bar = dd.generate_bar(&n, 3);
|
||||
assert_eq!(bar, "███████▒▒▒▒▒▒");
|
||||
|
||||
disp.initial.bars_on_right = true;
|
||||
let (dd, n) = build_draw_data(&disp, 11);
|
||||
let bar = dd.generate_bar(&n, 3);
|
||||
assert_eq!(bar, "▒▒▒▒▒▒███████")
|
||||
}
|
||||
#[test]
|
||||
fn test_draw_data4() {
|
||||
let disp = &get_fake_display_data(20);
|
||||
let (dd, n) = build_draw_data(disp, 10);
|
||||
// After 4 we have no more levels of shading so 4+ is the same
|
||||
let bar = dd.generate_bar(&n, 4);
|
||||
assert_eq!(bar, "████▓▓▓▓▓▓▓▓▓");
|
||||
let bar = dd.generate_bar(&n, 5);
|
||||
assert_eq!(bar, "████▓▓▓▓▓▓▓▓▓");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -214,6 +214,7 @@ fn main() {
|
||||
by_filecount,
|
||||
iso,
|
||||
is_screen_reader: config.get_screen_reader(&options),
|
||||
bars_on_right: config.get_bars_on_right(&options),
|
||||
};
|
||||
draw_it(
|
||||
idd,
|
||||
|
||||
Reference in New Issue
Block a user