Skip to content

Commit

Permalink
Quality and verbose validation
Browse files Browse the repository at this point in the history
  • Loading branch information
Lymphatus committed Feb 17, 2025
1 parent c1d077c commit 4c164aa
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 32 deletions.
17 changes: 13 additions & 4 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ repository = "https://github.com/Lymphatus/caesium-clt"
[dependencies]
indicatif = { version = "0.17", features = ["rayon"] }
walkdir = "2.5"
infer = "0.16"
infer = "0.19"
rayon = "1.10"
human_bytes = { version = "0.4", default-features = false }
kamadak-exif = "0.6"
imagesize = "0.13"
libcaesium = "0.17.1"
libcaesium = "0.17.2"
clap = { version = "4.5", features = ["derive"] }

[dev-dependencies]
Expand Down
19 changes: 9 additions & 10 deletions src/main.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
use crate::compressor::{start_compression, CompressionOptions, CompressionResult, CompressionStatus};
use crate::options::VerboseLevel::{All, Progress, Quiet};
use crate::options::{CommandLineArgs, VerboseLevel};
use crate::options::CommandLineArgs;
use crate::scan_files::scan_files;
use clap::Parser;
use human_bytes::human_bytes;
Expand All @@ -27,8 +26,8 @@ fn main() {
.build_global()
.unwrap_or_default();

let quiet = args.quiet || args.verbose == Quiet;
let verbose = if quiet { Quiet } else { args.verbose };
let quiet = args.quiet || args.verbose == 0;
let verbose = if quiet { 0 } else { args.verbose };
let (base_path, input_files) = scan_files(&args.files, args.recursive, quiet);
let total_files = input_files.len();

Expand All @@ -39,7 +38,7 @@ fn main() {
write_recap_message(&compression_results, verbose);
}

fn write_recap_message(compression_results: &[CompressionResult], verbose: VerboseLevel) {
fn write_recap_message(compression_results: &[CompressionResult], verbose: u8) {
let mut total_original_size = 0;
let mut total_compressed_size = 0;
let total_files = compression_results.len();
Expand All @@ -56,8 +55,8 @@ fn write_recap_message(compression_results: &[CompressionResult], verbose: Verbo
_ => total_success += 1,
}

if verbose > Progress {
if verbose < All && matches!(result.status, CompressionStatus::Success) {
if verbose > 1 {
if verbose < 3 && matches!(result.status, CompressionStatus::Success) {
continue;
}
println!(
Expand All @@ -80,7 +79,7 @@ fn write_recap_message(compression_results: &[CompressionResult], verbose: Verbo
let total_saved = total_original_size as f64 - total_compressed_size as f64;
let total_saved_percent = total_saved / total_original_size as f64 * 100.0;

if verbose > Quiet {
if verbose > 0 {
println!(
"Compressed {} files ({} success, {} skipped, {} errors)\n{} -> {} [Saved {} ({:.2}%)]",
total_files,
Expand All @@ -103,9 +102,9 @@ fn get_parallelism_count(requested_threads: u32, available_threads: usize) -> us
}
}

fn setup_progress_bar(len: usize, verbose: VerboseLevel) -> ProgressBar {
fn setup_progress_bar(len: usize, verbose: u8) -> ProgressBar {
let progress_bar = ProgressBar::new(len as u64);
if verbose == Quiet {
if verbose == 0 {
progress_bar.set_draw_target(ProgressDrawTarget::hidden());
} else {
progress_bar.set_draw_target(ProgressDrawTarget::stdout());
Expand Down
37 changes: 21 additions & 16 deletions src/options.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,6 @@ pub enum OutputFormat {
Tiff,
Original,
}

#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum, Debug)]
pub enum VerboseLevel {
/// Suppress all output
Quiet = 0,
/// Show only progress and final results
Progress = 1,
/// Show also skipped and error messages
WarningsAndErrors = 2,
/// Print all
All = 3,
}

#[derive(Parser, Debug)]
#[command(version, about, long_about = None)]
pub struct CommandLineArgs {
Expand Down Expand Up @@ -93,8 +80,8 @@ pub struct CommandLineArgs {
pub quiet: bool,

/// select how much output you want to see
#[arg(long, value_enum, default_value = "progress", group = "verbosity")]
pub verbose: VerboseLevel,
#[arg(long, default_value = "1", group = "verbosity", value_parser = verbose_validator)]
pub verbose: u8,

pub files: Vec<String>,
}
Expand All @@ -103,7 +90,7 @@ pub struct CommandLineArgs {
#[group(required = true, multiple = false)]
pub struct Compression {
/// sets output file quality between [0-100]
#[arg(short, long)]
#[arg(short, long, value_parser = quality_validator)]
pub quality: Option<u32>,

/// perform lossless compression
Expand Down Expand Up @@ -146,3 +133,21 @@ pub struct OutputDestination {
#[arg(long, default_value = "false", group = "output_destination")]
pub same_folder_as_input: bool,
}

fn quality_validator(val: &str) -> Result<u32, String> {
let value: u32 = val.parse().map_err(|_| format!("`{}` is not a valid number", val))?;
if value > 100 {
Err(format!("Quality must be between 0 and 100, but found `{}`", value))
} else {
Ok(value)
}
}

fn verbose_validator(val: &str) -> Result<u8, String> {
let value: u8 = val.parse().map_err(|_| format!("`{}` is not a valid number", val))?;
if value > 3 {
Err(format!("Verbosity must be between 0 and 3, but found `{}`", value))
} else {
Ok(value)
}
}

0 comments on commit 4c164aa

Please sign in to comment.