diff --git a/src/main.rs b/src/main.rs index 1455b63..e00a419 100644 --- a/src/main.rs +++ b/src/main.rs @@ -57,7 +57,7 @@ fn replace_extra_tags(original_file_name: &str, new_file_name: &str) -> String { let name = path.file_stem().unwrap().to_str().unwrap(); let extension = path.extension().unwrap().to_str().unwrap(); - let re = Regex::new(r"(\{[^\{\}]+\})").unwrap(); + let re = Regex::new(r"(\{[^{}]+})").unwrap(); re.find_iter(new_file_name) .map(|m| { let tag = m.as_str(); @@ -71,6 +71,23 @@ fn replace_extra_tags(original_file_name: &str, new_file_name: &str) -> String { .fold(String::new(), |result, s| result + &s) } +fn replace_name(file_name: &str, pattern: &str, replacement: &str) -> String { + let mut new_file_name = String::from(file_name); + let re = Regex::new(pattern).unwrap(); + for captures in re.captures_iter(file_name) { + let mut replaced_text = String::from(replacement); + for (i, capture) in captures.iter().enumerate() { + if let Some(capture) = capture { + let capture_text = capture.as_str().to_string(); + let replace_key = format!("\\{}", i); + replaced_text = replaced_text.replace(&replace_key, &capture_text); + } + } + new_file_name = replaced_text + } + replace_extra_tags(file_name, &new_file_name) +} + fn main() { let args = Args::parse(); let dir_path = &args.path; @@ -78,21 +95,42 @@ fn main() { let replacement = &args.replacement; let wildcard = &args.wildcard; - let re = Regex::new(pattern).unwrap(); let files = get_file_list(dir_path, wildcard); - for file_name in files { - for captures in re.captures_iter(&file_name) { - let mut replaced_text = String::from(replacement); - for (i, capture) in captures.iter().enumerate() { - if let Some(capture) = capture { - let capture_text = capture.as_str().to_string(); - let replace_key = format!("\\{}", i); - replaced_text = replaced_text.replace(&replace_key, &capture_text); - } - } - replaced_text = replace_extra_tags(&file_name, &replaced_text); - println!("mv \"{}\" \"{}\"", file_name, replaced_text); - } + let replaced_name = replace_name(&file_name, pattern, replacement); + println!("mv \"{}\" \"{}\"", file_name, replaced_name); } } + +#[test] +fn groups_and_ext_test() { + const INPUT: &str = "The Best Show - S01E16 - Bla Bla Bla HDTV-720p.mkv"; + const RESULT: &str = "Season 1 - Episode 16 - The Best Show - Bla Bla Bla - 720p-HDTV.mkv"; + + const PATTERN: &str = r"(.*) - S0?(\d+)E0?(\d+) - (.*) (HDTV|WEBDL)-(720p|1080p)"; + const REPLACEMENT: &str = r"Season \2 - Episode \3 - \1 - \4 - \6-\5.{ext}"; + + assert_eq!(replace_name(INPUT, PATTERN, REPLACEMENT), RESULT); +} + +#[test] +fn name_test() { + const INPUT: &str = "The Best Show - S01E16 - Bla Bla Bla HDTV-720p.mkv"; + const RESULT: &str = "The Best Show - S01E16 - Bla Bla Bla HDTV-720p.crap"; + + const PATTERN: &str = r""; + const REPLACEMENT: &str = r"{name}.crap"; + + assert_eq!(replace_name(INPUT, PATTERN, REPLACEMENT), RESULT); +} + +#[test] +fn full_name_test() { + const INPUT: &str = "The Best Show - S01E16 - Bla Bla Bla HDTV-720p.mkv"; + const RESULT: &str = "REVIEW - The Best Show - S01E16 - Bla Bla Bla HDTV-720p.mkv"; + + const PATTERN: &str = r""; + const REPLACEMENT: &str = r"REVIEW - {full_name}"; + + assert_eq!(replace_name(INPUT, PATTERN, REPLACEMENT), RESULT); +}