From f44272de79ae3846d05ca2d8a61e238c16a011f6 Mon Sep 17 00:00:00 2001 From: Max Bradbury Date: Mon, 21 Aug 2023 09:07:07 +0100 Subject: [PATCH] allow editing artist name --- Cargo.lock | 85 ++++++++++++++++++++++++++++++++++++++++++----------- Cargo.toml | 4 +-- src/main.rs | 29 +++++++++++++----- 3 files changed, 91 insertions(+), 27 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 48d8392..527d55d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -25,27 +25,28 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "dirs" -version = "4.0.0" +version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" dependencies = [ "dirs-sys", ] [[package]] name = "dirs-sys" -version = "0.3.6" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" dependencies = [ "libc", + "option-ext", "redox_users", - "winapi", + "windows-sys", ] [[package]] name = "download-organiser" -version = "0.1.1" +version = "0.1.2" dependencies = [ "dirs", "fs_extra", @@ -95,6 +96,12 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb969bc3573726b0bf60238d5d70f1aa6cc0f9e87f8db3e047b8309317319699" +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + [[package]] name = "redox_syscall" version = "0.2.10" @@ -138,23 +145,67 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" [[package]] -name = "winapi" -version = "0.3.9" +name = "windows-sys" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", + "windows-targets", ] [[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" +name = "windows-targets" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] [[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" +name = "windows_aarch64_gnullvm" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" diff --git a/Cargo.toml b/Cargo.toml index f8a4492..fa6aeff 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "download-organiser" -version = "0.1.1" +version = "0.1.2" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -dirs = "^4.0.0" +dirs = "^5.0.1" fs_extra = "^1.2.0" lazy_static = "^1.4.0" mp3-metadata = "^0.3.3" diff --git a/src/main.rs b/src/main.rs index 0999d6a..adbb3ad 100644 --- a/src/main.rs +++ b/src/main.rs @@ -52,13 +52,18 @@ fn move_file(file: PathBuf, mut destination: PathBuf) { } } -fn yes() -> bool { +fn user_input() -> String { let mut answer = String::new(); io::stdin().read_line(&mut answer) .expect("Failed to read input"); - answer.to_lowercase().starts_with("y") + answer +} + +// todo: add other input options e.g. "d" for delete, "a" for "yes to this whole album" +fn yes() -> bool { + user_input().to_lowercase().starts_with("y") } fn handle_document(file: DirEntry) { @@ -91,16 +96,24 @@ fn handle_mp3(file: DirEntry) { if meta.is_err() { println!("Couldn't read ID3 metadata for file {:?}", file.path()); - } + } else if let Some(tag) = meta.unwrap().tag { + let mut artist = tag.artist.trim().to_string(); + let album = tag.album.trim(); + let title = tag.title.trim(); - if let Some(tag) = meta.unwrap().tag { println!("----------------------"); println!("file: {:?}", file.path()); - println!("artist: {}", tag.artist.trim()); - println!("album: {}", tag.album.trim()); - println!("title: {}", tag.title.trim()); + println!("artist: {}", artist); + println!("album: {}", album); + println!("title: {}", title); - println!("move to: ~/Music/{}/{}/?", tag.artist.trim(), tag.album.trim()); + if artist.len() == 0 { + println!("Enter artist name?"); + artist = user_input(); + // is there a way to update mp3 metadata here? + } + + println!("move to: ~/Music/{}/{}/?", artist.clone(), album); if yes() { move_file(