Each input file should output to its own file correctly

Fixes #15
This commit is contained in:
Joshua Holmer 2016-03-03 16:30:05 -05:00
parent 1b1a66fe6c
commit abedfc9c70
2 changed files with 11 additions and 9 deletions

View file

@ -16,6 +16,7 @@ pub mod deflate {
}
pub mod png;
#[derive(Clone,Debug)]
pub struct Options {
pub backup: bool,
pub out_file: PathBuf,

View file

@ -230,26 +230,27 @@ fn main() {
.iter()
.map(PathBuf::from)
.collect(),
&mut opts);
opts);
}
fn handle_optimization(inputs: Vec<PathBuf>, opts: &mut oxipng::Options) {
fn handle_optimization(inputs: Vec<PathBuf>, opts: oxipng::Options) {
for input in inputs {
let mut current_opts = opts.clone();
if input.is_dir() {
if opts.recursive {
if current_opts.recursive {
handle_optimization(input.read_dir().unwrap().map(|x| x.unwrap().path()).collect(),
opts)
current_opts)
} else {
println!("{} is a directory, skipping", input.display());
}
continue;
}
if let Some(out_dir) = opts.out_dir.clone() {
opts.out_file = out_dir.join(input.file_name().unwrap());
} else if opts.out_file.components().count() == 0 {
opts.out_file = input.clone();
if let Some(out_dir) = current_opts.out_dir.clone() {
current_opts.out_file = out_dir.join(input.file_name().unwrap());
} else if current_opts.out_file.components().count() == 0 {
current_opts.out_file = input.clone();
}
match oxipng::optimize(&input, opts) {
match oxipng::optimize(&input, &current_opts) {
Ok(_) => (),
Err(x) => println!("{}", x),
};