mirror of
https://github.com/sreedevk/deduplicator.git
synced 2026-09-07 10:34:22 +00:00
added more progress bars to avoid blank states
This commit is contained in:
@@ -5,6 +5,7 @@ use chrono::offset::Utc;
|
|||||||
use chrono::DateTime;
|
use chrono::DateTime;
|
||||||
use colored::Colorize;
|
use colored::Colorize;
|
||||||
use dashmap::DashMap;
|
use dashmap::DashMap;
|
||||||
|
use indicatif::{ProgressBar, ProgressIterator, ProgressStyle};
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
use prettytable::{format, row, Table};
|
use prettytable::{format, row, Table};
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
@@ -153,10 +154,18 @@ pub fn print(duplicates: DashMap<String, Vec<File>>, opts: &Params) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let mut output_table = Table::new();
|
let mut output_table = Table::new();
|
||||||
|
let progress_bar = ProgressBar::new(duplicates.len() as u64);
|
||||||
|
let progress_style = ProgressStyle::default_bar()
|
||||||
|
.template("{spinner:.green} [generating output] [{wide_bar:.cyan/blue}] {pos}/{len} files")
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
progress_bar.set_style(progress_style);
|
||||||
output_table.set_titles(row!["hash", "duplicates"]);
|
output_table.set_titles(row!["hash", "duplicates"]);
|
||||||
|
|
||||||
duplicates
|
duplicates
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.sorted_unstable_by_key(|(_, f)| f.first().and_then(|ff| ff.size).unwrap_or_default())
|
.sorted_unstable_by_key(|(_, f)| f.first().and_then(|ff| ff.size).unwrap_or_default())
|
||||||
|
.progress_with(progress_bar)
|
||||||
.for_each(|(hash, group)| {
|
.for_each(|(hash, group)| {
|
||||||
let mut inner_table = Table::new();
|
let mut inner_table = Table::new();
|
||||||
inner_table.set_format(*format::consts::FORMAT_NO_BORDER_LINE_SEPARATOR);
|
inner_table.set_format(*format::consts::FORMAT_NO_BORDER_LINE_SEPARATOR);
|
||||||
|
|||||||
@@ -2,10 +2,11 @@ use crate::{file_manager::File, filters, params::Params};
|
|||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use dashmap::DashMap;
|
use dashmap::DashMap;
|
||||||
use fxhash::hash64 as hasher;
|
use fxhash::hash64 as hasher;
|
||||||
use indicatif::{ParallelProgressIterator, ProgressStyle};
|
use indicatif::{ParallelProgressIterator, ProgressBar, ProgressIterator, ProgressStyle};
|
||||||
use memmap2::Mmap;
|
use memmap2::Mmap;
|
||||||
use rayon::prelude::*;
|
use rayon::prelude::*;
|
||||||
use std::hash::Hasher;
|
use std::hash::Hasher;
|
||||||
|
use std::time::Duration;
|
||||||
use std::{fs, path::PathBuf};
|
use std::{fs, path::PathBuf};
|
||||||
|
|
||||||
#[derive(Clone, Copy)]
|
#[derive(Clone, Copy)]
|
||||||
@@ -40,14 +41,21 @@ pub fn duplicates(app_opts: &Params) -> Result<DashMap<String, Vec<File>>> {
|
|||||||
|
|
||||||
fn scan(app_opts: &Params) -> Result<Vec<File>> {
|
fn scan(app_opts: &Params) -> Result<Vec<File>> {
|
||||||
let walker = app_opts.get_glob_walker()?;
|
let walker = app_opts.get_glob_walker()?;
|
||||||
|
let progress = ProgressBar::new_spinner();
|
||||||
|
let progress_style =
|
||||||
|
ProgressStyle::with_template("{spinner:.green} [mapping paths] {pos} paths")?;
|
||||||
|
progress.set_style(progress_style);
|
||||||
|
progress.enable_steady_tick(Duration::from_millis(100));
|
||||||
|
|
||||||
let files = walker
|
let files = walker
|
||||||
|
.progress_with(progress)
|
||||||
.filter_map(Result::ok)
|
.filter_map(Result::ok)
|
||||||
.map(|file| file.into_path())
|
.map(|file| file.into_path())
|
||||||
.filter(|fpath| fpath.is_file())
|
.filter(|fpath| fpath.is_file())
|
||||||
.collect::<Vec<PathBuf>>()
|
.collect::<Vec<PathBuf>>()
|
||||||
.into_par_iter()
|
.into_par_iter()
|
||||||
.progress_with_style(ProgressStyle::with_template(
|
.progress_with_style(ProgressStyle::with_template(
|
||||||
"{spinner:.green} [processing scan results] [{wide_bar:.cyan/blue}] {pos}/{len} files",
|
"{spinner:.green} [processing mapped paths] [{wide_bar:.cyan/blue}] {pos}/{len} files",
|
||||||
)?)
|
)?)
|
||||||
.map(|fpath| fpath.display().to_string())
|
.map(|fpath| fpath.display().to_string())
|
||||||
.map(|fpath| File {
|
.map(|fpath| File {
|
||||||
|
|||||||
Reference in New Issue
Block a user