diff --git a/Cargo.lock b/Cargo.lock index b7ba8fc..f78343e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -69,6 +69,17 @@ dependencies = [ "shlex", ] +[[package]] +name = "cfb" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" +dependencies = [ + "byteorder", + "fnv", + "uuid", +] + [[package]] name = "cfg-if" version = "1.0.4" @@ -498,10 +509,13 @@ dependencies = [ [[package]] name = "icarus_meta" -version = "0.4.0" -source = "git+ssh://git@git.kundeng.us/phoenix/icarus_meta.git?tag=v0.4.0#f372d059155691c0bac52594fa0d14867078e461" +version = "0.4.3" +source = "git+ssh://git@git.kundeng.us/phoenix/icarus_meta.git?tag=v0.4.3#c0607597f196eb71f8069f23c91359968ef639ad" dependencies = [ + "imghdr", + "infer", "lofty", + "rand", ] [[package]] @@ -625,6 +639,12 @@ dependencies = [ "icu_properties", ] +[[package]] +name = "imghdr" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8b35f3ad95576ac81603375dfe47a0450b70a368aa34d2b6e5bb0a0d7f02428" + [[package]] name = "indexmap" version = "2.12.0" @@ -637,6 +657,15 @@ dependencies = [ "serde_core", ] +[[package]] +name = "infer" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a588916bfdfd92e71cacef98a63d9b1f0d74d6599980d11894290e7ddefffcf7" +dependencies = [ + "cfb", +] + [[package]] name = "ipnet" version = "2.11.0" @@ -1293,7 +1322,7 @@ dependencies = [ [[package]] name = "songparser" -version = "0.4.3" +version = "0.4.4" dependencies = [ "futures", "icarus_envy", diff --git a/Cargo.toml b/Cargo.toml index a08daae..50c4c38 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "songparser" -version = "0.4.3" +version = "0.4.4" edition = "2024" rust-version = "1.90" @@ -13,6 +13,6 @@ serde_json = { version = "1.0.145" } time = { version = "0.3.44", features = ["macros", "serde"] } uuid = { version = "1.18.1", features = ["v4", "serde"] } rand = { version = "0.9.2" } -icarus_meta = { git = "ssh://git@git.kundeng.us/phoenix/icarus_meta.git", tag = "v0.4.0" } +icarus_meta = { git = "ssh://git@git.kundeng.us/phoenix/icarus_meta.git", tag = "v0.4.3" } icarus_models = { git = "ssh://git@git.kundeng.us/phoenix/icarus_models.git", tag = "v0.8.0" } icarus_envy = { git = "ssh://git@git.kundeng.us/phoenix/icarus_envy.git", tag = "v0.5.0" } diff --git a/src/api.rs b/src/api.rs index 7beaec0..ae4d756 100644 --- a/src/api.rs +++ b/src/api.rs @@ -158,6 +158,7 @@ pub mod get_coverart_queue { #[derive(Debug, Deserialize, Serialize)] pub struct CoverArtQueue { pub id: uuid::Uuid, + pub file_type: String, pub song_queue_id: uuid::Uuid, } diff --git a/src/main.rs b/src/main.rs index 5190565..19bc2f8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -341,13 +341,14 @@ async fn prep_song( Ok(response) => { match response.json::().await { Ok(response) => { - let coverart_queue_id = &response.data[0].id; + let coverart_queue = &response.data[0]; + let coverart_queue_id = coverart_queue.id; println!("Coverart queue Id: {coverart_queue_id:?}"); - match api::get_coverart_queue::get_data(app, coverart_queue_id).await { + match api::get_coverart_queue::get_data(app, &coverart_queue_id).await { Ok(response) => match api::parsing::parse_response_into_bytes(response).await { Ok(coverart_queue_bytes) => { - let (directory, filename) = generate_coverart_queue_dir_and_filename().await; + let (directory, filename) = generate_coverart_queue_dir_and_filename(&coverart_queue.file_type).await; let coverart = icarus_models::coverart::CoverArt { directory, filename, @@ -367,7 +368,7 @@ async fn prep_song( let coverart_queue_path = std::path::Path::new(&coverart_queue_fs_path); println!("Saved coverart queue file at: {coverart_queue_path:?}"); - Ok(((song.directory, song.filename), (coverart.directory, coverart.filename), metadata.clone(), *coverart_queue_id)) + Ok(((song.directory, song.filename), (coverart.directory, coverart.filename), metadata.clone(), coverart_queue_id)) } Err(err) => { Err(err) @@ -413,7 +414,7 @@ pub async fn generate_song_queue_dir_and_filename() -> (String, String) { } // TODO: Consider having something like this in icarus_models -pub async fn generate_coverart_queue_dir_and_filename() -> (String, String) { +pub async fn generate_coverart_queue_dir_and_filename(file_type: &str) -> (String, String) { use rand::Rng; let mut filename: String = String::new(); @@ -432,8 +433,15 @@ pub async fn generate_coverart_queue_dir_and_filename() -> (String, String) { } } - // TODO: Do not hard code the file extension - filename += ".jpeg"; + filename += if file_type == icarus_meta::detection::coverart::constants::JPEG_TYPE + || file_type == icarus_meta::detection::coverart::constants::JPG_TYPE + { + ".jpeg" + } else if file_type == icarus_meta::detection::coverart::constants::PNG_TYPE { + ".png" + } else { + "" + }; // TODO: Consider separating song and coverart when saving to the filesystem let directory = icarus_envy::environment::get_root_directory().await.value;