From 351fa05466863c04b444e93df486de9d60c056d1 Mon Sep 17 00:00:00 2001 From: phoenix Date: Wed, 22 Oct 2025 13:56:01 -0400 Subject: [PATCH] tsk-54: More refactoring --- src/main.rs | 238 +--------------------------------------------- src/parser/mod.rs | 232 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 235 insertions(+), 235 deletions(-) create mode 100644 src/parser/mod.rs diff --git a/src/main.rs b/src/main.rs index f4d4497..a0d303d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,6 +2,7 @@ pub mod api; pub mod auth; pub mod config; pub mod metadata; +pub mod parser; pub mod queued_item; pub mod util; @@ -59,11 +60,11 @@ async fn main() -> Result<(), Box> { let song_queue_id = song_queue_item.data[0].id; let user_id = song_queue_item.data[0].user_id; - match some_work(&app, &song_queue_id, &user_id).await { + match parser::some_work(&app, &song_queue_id, &user_id).await { Ok((song, coverart, _metadata, queued_song, queued_coverart)) => { match wipe_data_from_queues(&app, &queued_song, &queued_coverart).await { - Ok(_) => match cleanup(&song, &coverart).await { + Ok(_) => match parser::cleanup(&song, &coverart).await { Ok(_) => { println!("Successful cleanup"); } @@ -126,23 +127,6 @@ async fn wipe_data_from_queues( } } -async fn cleanup( - song: &icarus_models::song::Song, - coverart: &icarus_models::coverart::CoverArt, -) -> Result<(), std::io::Error> { - match song.remove_from_filesystem() { - Ok(_) => {} - Err(err) => { - eprintln!("Error: Problem cleaning up SongQueue files {err:?}"); - } - } - - match coverart.remove_from_filesystem() { - Ok(_) => Ok(()), - Err(err) => Err(err), - } -} - async fn is_queue_empty( app: &config::App, ) -> Result<(bool, api::fetch_next_queue_item::response::SongQueueItem), reqwest::Error> { @@ -165,219 +149,3 @@ async fn is_queue_empty( Err(err) => Err(err), } } - -async fn some_work( - app: &crate::config::App, - song_queue_id: &uuid::Uuid, - user_id: &uuid::Uuid, -) -> Result< - ( - icarus_models::song::Song, - icarus_models::coverart::CoverArt, - api::get_metadata_queue::response::Metadata, - queued_item::QueuedSong, - queued_item::QueuedCoverArt, - ), - std::io::Error, -> { - match prep_song(app, song_queue_id).await { - Ok((queued_song, queued_coverart, metadata)) => { - println!("Prepping song"); - - match metadata::apply_metadata(&queued_song, &queued_coverart, &metadata).await { - Ok(_applied) => { - match api::update_queued_song::update_queued_song(app, &queued_song).await { - Ok(response) => { - match response - .json::() - .await - { - Ok(_inner_response) => { - println!("Updated queued song"); - println!("Response: {_inner_response:?}"); - - let song_type = String::from( - icarus_meta::detection::song::constants::FLAC_TYPE, - ); - - match api::create_song::create( - app, &metadata, user_id, &song_type, - ) - .await - { - Ok(response) => match response - .json::() - .await - { - Ok(resp) => { - println!("Response: {resp:?}"); - - let mut song = resp.data[0].clone(); - song.directory = queued_song.song.directory.clone(); - song.filename = queued_song.song.filename.clone(); - - match api::create_coverart::create(app, &song, &queued_coverart).await { - Ok(response) => match response.json::().await { - Ok(resp) => { - println!("CoverArt sent and successfully parsed response"); - println!("json: {resp:?}"); - let mut coverart = resp.data[0].clone(); - coverart.directory = queued_coverart.coverart.directory.clone(); - coverart.filename = queued_coverart.coverart.filename.clone(); - - Ok((song.clone(), coverart.clone(), metadata, queued_song.clone(), queued_coverart.clone())) - } - Err(err) => { - Err(std::io::Error::other(err.to_string())) - } - } - Err(err) => { - Err(std::io::Error::other(err.to_string())) - } - } - } - Err(err) => Err(std::io::Error::other(err.to_string())), - }, - Err(err) => Err(std::io::Error::other(err.to_string())), - } - } - Err(err) => Err(std::io::Error::other(err.to_string())), - } - } - Err(err) => Err(std::io::Error::other(err.to_string())), - } - } - Err(err) => Err(err), - } - } - Err(err) => Err(std::io::Error::other(err.to_string())), - } -} - -async fn prep_song( - app: &crate::config::App, - song_queue_id: &uuid::Uuid, -) -> Result< - ( - queued_item::QueuedSong, - queued_item::QueuedCoverArt, - api::get_metadata_queue::response::Metadata, - ), - reqwest::Error, -> { - match api::fetch_song_queue_data::get_data(app, song_queue_id).await { - Ok(response) => { - // Process data here... - match api::parsing::parse_response_into_bytes(response).await { - Ok(song_bytes) => { - let song = icarus_models::song::Song { - directory: icarus_envy::environment::get_root_directory().await.value, - filename: icarus_models::song::generate_filename( - icarus_models::types::MusicTypes::FlacExtension, - true, - ), - data: song_bytes, - ..Default::default() - }; - let songpath = song.song_path().unwrap_or_default(); - - let queued_song: crate::queued_item::QueuedSong = - match song.save_to_filesystem() { - Ok(_) => queued_item::QueuedSong { - id: *song_queue_id, - song, - path: songpath, - }, - Err(err) => { - eprintln!("Error: {err:?}"); - queued_item::QueuedSong { - ..Default::default() - } - } - }; - - println!("Saved at: {:?}", queued_song.path); - - match api::get_metadata_queue::get(app, &queued_song.id).await { - Ok(response) => { - match response - .json::() - .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 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 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) = 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 = 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) - } - } - } - Err(err) => Err(err), - } - } - Err(err) => Err(err), - } - } - Err(err) => Err(err), - } - } - Err(err) => Err(err), - } - } - Err(err) => Err(err), - } -} diff --git a/src/parser/mod.rs b/src/parser/mod.rs new file mode 100644 index 0000000..0edee95 --- /dev/null +++ b/src/parser/mod.rs @@ -0,0 +1,232 @@ +pub async fn some_work( + app: &crate::config::App, + song_queue_id: &uuid::Uuid, + user_id: &uuid::Uuid, +) -> Result< + ( + icarus_models::song::Song, + icarus_models::coverart::CoverArt, + crate::api::get_metadata_queue::response::Metadata, + crate::queued_item::QueuedSong, + crate::queued_item::QueuedCoverArt, + ), + std::io::Error, +> { + match prep_song(app, song_queue_id).await { + Ok((queued_song, queued_coverart, metadata)) => { + println!("Prepping song"); + + match crate::metadata::apply_metadata(&queued_song, &queued_coverart, &metadata).await { + Ok(_applied) => { + match crate::api::update_queued_song::update_queued_song(app, &queued_song).await { + Ok(response) => { + match response + .json::() + .await + { + Ok(_inner_response) => { + println!("Updated queued song"); + println!("Response: {_inner_response:?}"); + + let song_type = String::from( + icarus_meta::detection::song::constants::FLAC_TYPE, + ); + + match crate::api::create_song::create( + app, &metadata, user_id, &song_type, + ) + .await + { + Ok(response) => match response + .json::() + .await + { + Ok(resp) => { + println!("Response: {resp:?}"); + + let mut song = resp.data[0].clone(); + song.directory = queued_song.song.directory.clone(); + song.filename = queued_song.song.filename.clone(); + + match crate::api::create_coverart::create(app, &song, &queued_coverart).await { + Ok(response) => match response.json::().await { + Ok(resp) => { + println!("CoverArt sent and successfully parsed response"); + println!("json: {resp:?}"); + let mut coverart = resp.data[0].clone(); + coverart.directory = queued_coverart.coverart.directory.clone(); + coverart.filename = queued_coverart.coverart.filename.clone(); + + Ok((song.clone(), coverart.clone(), metadata, queued_song.clone(), queued_coverart.clone())) + } + Err(err) => { + Err(std::io::Error::other(err.to_string())) + } + } + Err(err) => { + Err(std::io::Error::other(err.to_string())) + } + } + } + Err(err) => Err(std::io::Error::other(err.to_string())), + }, + Err(err) => Err(std::io::Error::other(err.to_string())), + } + } + Err(err) => Err(std::io::Error::other(err.to_string())), + } + } + Err(err) => Err(std::io::Error::other(err.to_string())), + } + } + Err(err) => Err(err), + } + } + Err(err) => Err(std::io::Error::other(err.to_string())), + } +} + +pub async fn prep_song( + app: &crate::config::App, + song_queue_id: &uuid::Uuid, +) -> Result< + ( + crate::queued_item::QueuedSong, + crate::queued_item::QueuedCoverArt, + crate::api::get_metadata_queue::response::Metadata, + ), + reqwest::Error, +> { + match crate::api::fetch_song_queue_data::get_data(app, song_queue_id).await { + Ok(response) => { + // Process data here... + match crate::api::parsing::parse_response_into_bytes(response).await { + Ok(song_bytes) => { + let song = icarus_models::song::Song { + directory: icarus_envy::environment::get_root_directory().await.value, + filename: icarus_models::song::generate_filename( + icarus_models::types::MusicTypes::FlacExtension, + true, + ), + data: song_bytes, + ..Default::default() + }; + let songpath = song.song_path().unwrap_or_default(); + + let queued_song: crate::queued_item::QueuedSong = + match song.save_to_filesystem() { + Ok(_) => crate::queued_item::QueuedSong { + id: *song_queue_id, + song, + path: songpath, + }, + Err(err) => { + eprintln!("Error: {err:?}"); + crate::queued_item::QueuedSong { + ..Default::default() + } + } + }; + + println!("Saved at: {:?}", queued_song.path); + + match crate::api::get_metadata_queue::get(app, &queued_song.id).await { + Ok(response) => { + match response + .json::() + .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) + } + } + } + Err(err) => Err(err), + } + } + Err(err) => Err(err), + } + } + Err(err) => Err(err), + } + } + Err(err) => Err(err), + } + } + Err(err) => Err(err), + } +} + +pub async fn cleanup( + song: &icarus_models::song::Song, + coverart: &icarus_models::coverart::CoverArt, +) -> Result<(), std::io::Error> { + match song.remove_from_filesystem() { + Ok(_) => {} + Err(err) => { + eprintln!("Error: Problem cleaning up SongQueue files {err:?}"); + } + } + + match coverart.remove_from_filesystem() { + Ok(_) => Ok(()), + Err(err) => Err(err), + } +}