From 74c41727724dcf739a79483e72bce5b8d9b24fb0 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 26 Oct 2025 14:39:08 -0400 Subject: [PATCH 1/9] icarus_models version bump --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e67cdc1..0066613 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", diff --git a/Cargo.toml b/Cargo.toml index 4722650..f609ae8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -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" } -- 2.43.0 From af2b53cd5a55f03814e32735e4728d224a8890f4 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 26 Oct 2025 14:53:02 -0400 Subject: [PATCH 2/9] Commenting out code --- src/util.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/util.rs b/src/util.rs index 57a2c60..5e86be4 100644 --- a/src/util.rs +++ b/src/util.rs @@ -6,6 +6,7 @@ pub fn path_buf_to_string(path: &std::path::Path) -> String { } // 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; @@ -40,3 +41,4 @@ pub async fn generate_coverart_queue_dir_and_filename(file_type: &str) -> (Strin (directory, filename) } +*/ -- 2.43.0 From e59ba4486d8b6efb3ddc687e42699ee2ca1f59e6 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 26 Oct 2025 14:53:27 -0400 Subject: [PATCH 3/9] Using code from icarus_models Left a todo there for later --- src/parser/mod.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/parser/mod.rs b/src/parser/mod.rs index f4c8260..4df6eda 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -158,10 +158,19 @@ pub async fn prep_song( 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; + // TODO: Consider separating song and coverart when saving to the filesystem + // let (directory, filename) = crate::util::generate_coverart_queue_dir_and_filename(&coverart_queue.file_type).await; + let covart_type = if coverart_queue.file_type == "png" { + icarus_models::types::CoverArtTypes::PngExtension + } else if coverart_queue.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, - filename, + directory: icarus_envy::environment::get_root_directory().await.value, + filename: icarus_models::coverart::generate_filename(covart_type, true), data: coverart_queue_bytes, ..Default::default() }; -- 2.43.0 From 259b4ace2d774f826bb2aeaeabd7e0623230ae63 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 26 Oct 2025 14:56:28 -0400 Subject: [PATCH 4/9] Removed code --- src/util.rs | 38 -------------------------------------- 1 file changed, 38 deletions(-) diff --git a/src/util.rs b/src/util.rs index 5e86be4..3a873bc 100644 --- a/src/util.rs +++ b/src/util.rs @@ -4,41 +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) -} -*/ -- 2.43.0 From b0394c54bb10d2f9ec3a289bce92ce85661c6375 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 26 Oct 2025 14:56:54 -0400 Subject: [PATCH 5/9] Some cleanup --- src/parser/mod.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 4df6eda..58111b2 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -159,7 +159,6 @@ pub async fn prep_song( Ok(response) => match crate::api::parsing::parse_response_into_bytes(response).await { Ok(coverart_queue_bytes) => { // TODO: Consider separating song and coverart when saving to the filesystem - // let (directory, filename) = crate::util::generate_coverart_queue_dir_and_filename(&coverart_queue.file_type).await; let covart_type = if coverart_queue.file_type == "png" { icarus_models::types::CoverArtTypes::PngExtension } else if coverart_queue.file_type == "jpeg" { -- 2.43.0 From 6d2de0a21a82c370b89a1b4cfa425a31f7554f48 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 26 Oct 2025 15:32:35 -0400 Subject: [PATCH 6/9] Refactoring parsing --- src/parser/mod.rs | 147 ++++++++++++++++++++++++---------------------- 1 file changed, 78 insertions(+), 69 deletions(-) diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 58111b2..3084d04 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -139,76 +139,14 @@ 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) => { - // TODO: Consider separating song and coverart when saving to the filesystem - let covart_type = if coverart_queue.file_type == "png" { - icarus_models::types::CoverArtTypes::PngExtension - } else if coverart_queue.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: 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) } - Err(err) => Err(err), } } Err(err) => Err(err), @@ -224,6 +162,77 @@ 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< + crate::queued_item::QueuedCoverArt + , reqwest::Error> { + + 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(); + let queued_coverart = crate::queued_item::QueuedCoverArt { + id: *coverart_queue_id, + coverart, + path: coverart_queue_fs_path + }; + + queued_coverart +} + pub async fn cleanup( song: &icarus_models::song::Song, coverart: &icarus_models::coverart::CoverArt, -- 2.43.0 From be18ba8254231bbd18ae092f928460a7ae206366 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 26 Oct 2025 15:32:49 -0400 Subject: [PATCH 7/9] Code formatting --- src/parser/mod.rs | 142 +++++++++++++++++++++++++--------------------- 1 file changed, 76 insertions(+), 66 deletions(-) diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 3084d04..4c9b513 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -141,12 +141,8 @@ pub async fn prep_song( Ok(response) => { 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) - } + Ok(qc) => Ok((queued_song, qc, bod.metadata.clone())), + Err(err) => Err(err), } } Err(err) => Err(err), @@ -165,72 +161,86 @@ 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< - crate::queued_item::QueuedCoverArt - , reqwest::Error> { + 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:?}"); - 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:?}"); - 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 + ); - 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), - } + 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(); - let queued_coverart = crate::queued_item::QueuedCoverArt { - id: *coverart_queue_id, - coverart, - path: coverart_queue_fs_path - }; +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(); + let queued_coverart = crate::queued_item::QueuedCoverArt { + id: *coverart_queue_id, + coverart, + path: coverart_queue_fs_path, + }; - queued_coverart + queued_coverart } pub async fn cleanup( -- 2.43.0 From 3c8c2aff0d586d8ef133ac05609e32bf39a2c633 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 26 Oct 2025 15:33:13 -0400 Subject: [PATCH 8/9] Version bump --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0066613..76d9fbd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -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 f609ae8..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" -- 2.43.0 From 2368f1330b2fe2dae785bcee10a212edb359134c Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 26 Oct 2025 15:43:25 -0400 Subject: [PATCH 9/9] Warning fix --- src/parser/mod.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 4c9b513..2a3b3b9 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -234,13 +234,11 @@ async fn init_queued_coverart( }; coverart.save_to_filesystem().unwrap(); let coverart_queue_fs_path = coverart.get_path().unwrap(); - let queued_coverart = crate::queued_item::QueuedCoverArt { + crate::queued_item::QueuedCoverArt { id: *coverart_queue_id, coverart, path: coverart_queue_fs_path, - }; - - queued_coverart + } } pub async fn cleanup( -- 2.43.0