diff options
author | Jakub Trzeciak <jp3@jptrzy.xyz> | 2024-02-15 22:41:54 +0100 |
---|---|---|
committer | Jakub Trzeciak <jp3@jptrzy.xyz> | 2024-02-15 22:41:54 +0100 |
commit | 988945ca8917b9ddbc5f2101f6ca49342a7c2661 (patch) | |
tree | ec862423bae54bc127c6abf45562971edab59543 /src | |
parent | 2d3d297f1411e88de69423b4888d1c8132416a5d (diff) | |
download | ogg-tagger-988945ca8917b9ddbc5f2101f6ca49342a7c2661.tar.gz ogg-tagger-988945ca8917b9ddbc5f2101f6ca49342a7c2661.tar.bz2 ogg-tagger-988945ca8917b9ddbc5f2101f6ca49342a7c2661.zip |
add parallel file processing
Diffstat (limited to 'src')
-rw-r--r-- | src/main.rs | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/main.rs b/src/main.rs index 0c65b30..0dc65bc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,6 +2,7 @@ use std::{env, fs::{self, File}, path::Path, fmt::format, os::fd::IntoRawFd}; use std::io::{Error, ErrorKind, BufReader, Read}; use lofty::{Probe, TaggedFileExt, LoftyError, TagExt, Tag, Picture, Accessor, PictureType}; use clap::Parser; +use rayon::prelude::*; #[derive(Parser, Debug)] #[command(version, about, long_about = None)] @@ -121,15 +122,20 @@ fn main() -> Result<(), Box<dyn std::error::Error>> { println!("💡 Start scanning \"{}\" dir for ogg file", music_path.as_str()); - for entry in music_dir { - let path = entry?.path(); + + let paths: Vec<_> = music_dir.filter_map(Result::ok) + .map(|entry| entry.path()) + .filter(|path| path.extension().and_then(std::ffi::OsStr::to_str) == Some("ogg")) + .collect(); + + paths.par_iter().for_each(|path| { if path.is_file() { - // Improved error handling - if let Err(e) = tag_ogg_file(&path) { + if let Err(e) = tag_ogg_file(path) { eprintln!("🔥 Error tagging file {:?}: {}", path, e); } } - } + }); + println!("💡 Ended successfully"); Ok(()) |