From 1dac8cc13ac3ab70668f8991e997ec79e69c0804 Mon Sep 17 00:00:00 2001 From: Paul Campbell Date: Fri, 11 Oct 2024 22:39:18 +0100 Subject: [PATCH] feat: group authors by first character --- src/main.rs | 9 +++++---- src/tests.rs | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main.rs b/src/main.rs index b7cc25a..f0218a6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -78,12 +78,13 @@ fn rename_files(directory: &str, base: &str, args: &Arguments) -> Result { let (Some(title), Some(artist)) = (tag.title(), tag.artist()) else { continue; }; + let (bucket, _) = artist.split_at(1); let album = parse_album(&title); count += 1; let new_name = if album.is_empty() { - format!("{artist}/{title}/{title}.m4b") + format!("{bucket}/{artist}/{title}/{title}.m4b") } else { - build_series_name(&artist, &album, &title) + build_series_name(bucket, &artist, &album, &title) }; println!("=============================="); println!("- artist: {artist}"); @@ -107,10 +108,10 @@ fn rename_files(directory: &str, base: &str, args: &Arguments) -> Result { Ok(count) } -fn build_series_name(artist: &str, album: &str, title: &str) -> String { +fn build_series_name(bucket: &str, artist: &str, album: &str, title: &str) -> String { let index = parse_index(title); let title = parse_title(title); - format!("{artist}/{album}/{index}. {title}/{index}. {title}.m4b") + format!("{bucket}/{artist}/{album}/{index}. {title}/{index}. {title}.m4b") } fn parse_index(title: &str) -> String { diff --git a/src/tests.rs b/src/tests.rs index 2f59c16..bff7a24 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -11,8 +11,8 @@ use pretty_assertions::assert_eq; "3. A Conjuring of Light" )] fn parse_series_details(#[case] album: &str, #[case] title: &str, #[case] expected: &str) { - let expected_result = format!("Bob/{album}/{expected}/{expected}.m4b"); - let result = build_series_name("Bob", album, title); + let expected_result = format!("B/Bob/{album}/{expected}/{expected}.m4b"); + let result = build_series_name("B", "Bob", album, title); assert_eq!(result, expected_result); }