From 9b6ccb032ff85e89f6210dbf21eb76a2ee2c00c4 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 26 Oct 2025 19:49:30 +0000 Subject: [PATCH] Refactoring (#67) Reviewed-on: https://git.kundeng.us/phoenix/songparser/pulls/67 Co-authored-by: phoenix Co-committed-by: phoenix --- Cargo.lock | 6 +- Cargo.toml | 4 +- src/parser/mod.rs | 147 +++++++++++++++++++++++++++------------------- src/util.rs | 36 ------------ 4 files changed, 91 insertions(+), 102 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e67cdc1..76d9fbd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -520,8 +520,8 @@ dependencies = [ [[package]] name = "icarus_models" -version = "0.8.0" -source = "git+ssh://git@git.kundeng.us/phoenix/icarus_models.git?tag=v0.8.0#860d684e7b340b05d43d1fc3e6bd36b7cc45d81b" +version = "0.8.3" +source = "git+ssh://git@git.kundeng.us/phoenix/icarus_models.git?tag=v0.8.3#0a27b8ccb1ac40361df8d3131f567f37f06cdc08" dependencies = [ "josekit", "rand", @@ -1322,7 +1322,7 @@ dependencies = [ [[package]] name = "songparser" -version = "0.4.9" +version = "0.4.10" dependencies = [ "futures", "icarus_envy", diff --git a/Cargo.toml b/Cargo.toml index 4722650..73c6d5d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "songparser" -version = "0.4.9" +version = "0.4.10" edition = "2024" rust-version = "1.90" @@ -14,5 +14,5 @@ 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.3" } -icarus_models = { git = "ssh://git@git.kundeng.us/phoenix/icarus_models.git", tag = "v0.8.0" } +icarus_models = { git = "ssh://git@git.kundeng.us/phoenix/icarus_models.git", tag = "v0.8.3" } icarus_envy = { git = "ssh://git@git.kundeng.us/phoenix/icarus_envy.git", tag = "v0.5.0" } diff --git a/src/parser/mod.rs b/src/parser/mod.rs index f4c8260..2a3b3b9 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -139,67 +139,9 @@ pub async fn prep_song( .await { Ok(response) => { - let id = &response.data[0].id; - let created_at = &response.data[0].created_at; - let metadata = &response.data[0].metadata; - println!("Id: {id:?}"); - println!("Metadata: {metadata:?}"); - println!("Created at: {created_at:?}"); - - println!("Getting coverart queue"); - match crate::api::get_coverart_queue::get(app, &queued_song.id).await { - Ok(response) => { - match response.json::().await { - Ok(response) => { - let coverart_queue = &response.data[0]; - let coverart_queue_id = coverart_queue.id; - println!("Coverart queue Id: {coverart_queue_id:?}"); - - match crate::api::get_coverart_queue::get_data(app, &coverart_queue_id).await { - Ok(response) => match crate::api::parsing::parse_response_into_bytes(response).await { - Ok(coverart_queue_bytes) => { - let (directory, filename) = crate::util::generate_coverart_queue_dir_and_filename(&coverart_queue.file_type).await; - let coverart = icarus_models::coverart::CoverArt { - directory, - filename, - data: coverart_queue_bytes, - ..Default::default() - }; - coverart.save_to_filesystem().unwrap(); - let coverart_queue_fs_path = match coverart.get_path() { - Ok(path) => { - path - } - Err(err) => { - eprintln!("Error: {err:?}"); - std::process::exit(-1); - } - }; - - let queued_coverart = crate::queued_item::QueuedCoverArt { - id: coverart_queue_id, - coverart, - path: coverart_queue_fs_path - }; - - println!("Saved coverart queue file at: {:?}", queued_coverart.path); - - Ok((queued_song, queued_coverart, metadata.clone())) - } - Err(err) => { - Err(err) - } - } - Err(err) => { - Err(err) - } - } - } - Err(err) => { - Err(err) - } - } - } + let bod = &response.data[0]; + match process_coverart(app, &queued_song.id, bod).await { + Ok(qc) => Ok((queued_song, qc, bod.metadata.clone())), Err(err) => Err(err), } } @@ -216,6 +158,89 @@ pub async fn prep_song( } } +pub async fn process_coverart( + app: &crate::config::App, + queued_song_id: &uuid::Uuid, + queued_item: &crate::api::get_metadata_queue::response::QueueItem, +) -> Result { + let id = queued_item.id; + let created_at = queued_item.created_at; + let metadata = &queued_item.metadata; + println!("Id: {id:?}"); + println!("Metadata: {metadata:?}"); + println!("Created at: {created_at:?}"); + + println!("Getting coverart queue"); + match crate::api::get_coverart_queue::get(app, queued_song_id).await { + Ok(response) => { + match response + .json::() + .await + { + Ok(response) => { + let coverart_queue = &response.data[0]; + let coverart_queue_id = coverart_queue.id; + println!("Coverart queue Id: {coverart_queue_id:?}"); + + match crate::api::get_coverart_queue::get_data(app, &coverart_queue_id).await { + Ok(response) => { + match crate::api::parsing::parse_response_into_bytes(response).await { + Ok(coverart_queue_bytes) => { + let queued_coverart = init_queued_coverart( + &coverart_queue_id, + &coverart_queue.file_type, + coverart_queue_bytes, + ) + .await; + println!( + "Saved coverart queue file at: {:?}", + queued_coverart.path + ); + + Ok(queued_coverart) + } + Err(err) => Err(err), + } + } + Err(err) => Err(err), + } + } + Err(err) => Err(err), + } + } + Err(err) => Err(err), + } +} + +async fn init_queued_coverart( + coverart_queue_id: &uuid::Uuid, + file_type: &str, + bytes: Vec, +) -> crate::queued_item::QueuedCoverArt { + // TODO: Consider separating song and coverart when saving to the filesystem + let covart_type = if file_type == "png" { + icarus_models::types::CoverArtTypes::PngExtension + } else if file_type == "jpeg" { + icarus_models::types::CoverArtTypes::JpegExtension + } else { + // TODO: This doesn't seem right + icarus_models::types::CoverArtTypes::JpgExtension + }; + let coverart = icarus_models::coverart::CoverArt { + directory: icarus_envy::environment::get_root_directory().await.value, + filename: icarus_models::coverart::generate_filename(covart_type, true), + data: bytes, + ..Default::default() + }; + coverart.save_to_filesystem().unwrap(); + let coverart_queue_fs_path = coverart.get_path().unwrap(); + crate::queued_item::QueuedCoverArt { + id: *coverart_queue_id, + coverart, + path: coverart_queue_fs_path, + } +} + pub async fn cleanup( song: &icarus_models::song::Song, coverart: &icarus_models::coverart::CoverArt, diff --git a/src/util.rs b/src/util.rs index 57a2c60..3a873bc 100644 --- a/src/util.rs +++ b/src/util.rs @@ -4,39 +4,3 @@ pub fn path_buf_to_string(path: &std::path::Path) -> String { None => String::new(), } } - -// TODO: Consider having something like this in icarus_models -pub async fn generate_coverart_queue_dir_and_filename(file_type: &str) -> (String, String) { - use rand::Rng; - - let mut filename: String = String::new(); - let filename_len = 10; - - let some_chars: String = String::from("abcdefghij0123456789"); - let mut rng = rand::rng(); - - for _ in 0..filename_len { - let random_number: i32 = rng.random_range(0..=19); - let index = random_number as usize; - let rando_char = some_chars.chars().nth(index); - - if let Some(c) = rando_char { - filename.push(c); - } - } - - filename += if file_type == icarus_meta::detection::coverart::constants::JPEG_TYPE - || file_type == icarus_meta::detection::coverart::constants::JPG_TYPE - { - icarus_models::constants::file_extensions::image::JPEGEXTENSION - } else if file_type == icarus_meta::detection::coverart::constants::PNG_TYPE { - icarus_models::constants::file_extensions::image::PNGEXTENSION - } else { - "" - }; - - // TODO: Consider separating song and coverart when saving to the filesystem - let directory = icarus_envy::environment::get_root_directory().await.value; - - (directory, filename) -}