From 8c44ddbd039953a9aefa9ab93278ace488aaf69b Mon Sep 17 00:00:00 2001 From: phoenix Date: Thu, 26 Jun 2025 18:53:16 -0400 Subject: [PATCH 01/20] Starting work to update queued song --- src/main.rs | 17 ++++++++--------- src/the_rest.rs | 4 ++++ src/util.rs | 10 ++++++++++ 3 files changed, 22 insertions(+), 9 deletions(-) create mode 100644 src/the_rest.rs create mode 100644 src/util.rs diff --git a/src/main.rs b/src/main.rs index b29bc69..dff9769 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,6 @@ +pub mod the_rest; +pub mod util; + use std::io::Write; pub const SECONDS_TO_SLEEP: u64 = 5; @@ -97,8 +100,10 @@ async fn process_song(api_url: &String, song_queue_id: &uuid::Uuid) -> Result<() println!("Saved coverart queue file at: {:?}", coverart_queue_path); - match apply_metadata(song_queue_path, coverart_queue_path, metadata).await { + match apply_metadata(song_queue_path.clone(), coverart_queue_path, metadata).await { Ok(_) => { + let s_path = util::path_buf_to_string(&song_queue_path); + the_rest::update_queued_song(&s_path).await; // TODO: Update the queued song with the updated queued song // TODO: Create song // TODO: Create coverart @@ -211,10 +216,7 @@ pub async fn apply_metadata( metadata: &api::get_metadata_queue::response::Metadata, ) -> Result { // Apply metadata fields - let s_path = match song_queue_path.to_str() { - Some(val) => String::from(val), - None => String::new(), - }; + let s_path = util::path_buf_to_string(&song_queue_path); if s_path.is_empty() { println!("Song queue path is empty"); @@ -326,10 +328,7 @@ pub async fn apply_metadata( } // Apply coverart - let c_path: String = match coverart_queue_path.to_str() { - Some(val) => String::from(val), - None => String::new(), - }; + let c_path: String = util::path_buf_to_string(&coverart_queue_path); match icarus_meta::meta::coverart::contains_coverart(&s_path) { Ok((exists, size)) => { diff --git a/src/the_rest.rs b/src/the_rest.rs new file mode 100644 index 0000000..374fc31 --- /dev/null +++ b/src/the_rest.rs @@ -0,0 +1,4 @@ +// TODO: Refactor this file when this app is functional + +pub async fn update_queued_song(song_path: &String) { +} diff --git a/src/util.rs b/src/util.rs new file mode 100644 index 0000000..c55ded3 --- /dev/null +++ b/src/util.rs @@ -0,0 +1,10 @@ + +pub fn path_buf_to_string(path: &std::path::PathBuf) -> String { + let s_path = match path.to_str() { + Some(val) => String::from(val), + None => String::new(), + }; + + s_path +} + -- 2.43.0 From 4c1ee005e8f451f1b61bdda8c035e3b15539f2a4 Mon Sep 17 00:00:00 2001 From: phoenix Date: Thu, 26 Jun 2025 18:54:43 -0400 Subject: [PATCH 02/20] Reorganized TODO comments --- src/main.rs | 5 ----- src/the_rest.rs | 7 +++++++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main.rs b/src/main.rs index dff9769..db4147d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -104,11 +104,6 @@ async fn process_song(api_url: &String, song_queue_id: &uuid::Uuid) -> Result<() Ok(_) => { let s_path = util::path_buf_to_string(&song_queue_path); the_rest::update_queued_song(&s_path).await; - // TODO: Update the queued song with the updated queued song - // TODO: Create song - // TODO: Create coverart - // TODO: Wipe data from queued song - // TODO: Wipe data from queued coverart } Err(err) => { eprintln!("Error: {:?}", err); diff --git a/src/the_rest.rs b/src/the_rest.rs index 374fc31..5f5754d 100644 --- a/src/the_rest.rs +++ b/src/the_rest.rs @@ -1,4 +1,11 @@ // TODO: Refactor this file when this app is functional + +// TODO: Update the queued song with the updated queued song pub async fn update_queued_song(song_path: &String) { } + +// TODO: Create song +// TODO: Create coverart +// TODO: Wipe data from queued song +// TODO: Wipe data from queued coverart -- 2.43.0 From 79a4f514061b41ef10f53926bb0ab97ee630e24b Mon Sep 17 00:00:00 2001 From: phoenix Date: Fri, 27 Jun 2025 20:50:38 -0400 Subject: [PATCH 03/20] Saving changes --- src/main.rs | 63 ++++++++++++++++++++++++++++++--------- src/the_rest.rs | 3 -- src/update_queued_song.rs | 44 +++++++++++++++++++++++++++ 3 files changed, 93 insertions(+), 17 deletions(-) create mode 100644 src/update_queued_song.rs diff --git a/src/main.rs b/src/main.rs index db4147d..d36bebc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,5 @@ pub mod the_rest; +pub mod update_queued_song; pub mod util; use std::io::Write; @@ -20,7 +21,8 @@ async fn main() -> Result<(), Box> { let song_queue_id = song_queue_item.data[0].id; // TODO: Do something with the result later - let _ = process_song(&app_base_url, &song_queue_id).await; + let _ = prep_song(&app_base_url, &song_queue_id).await; + let _ = some_work(&app_base_url, &song_queue_id).await; } else { println!("Queue is empty"); } @@ -58,7 +60,41 @@ async fn is_queue_empty( } } -async fn process_song(api_url: &String, song_queue_id: &uuid::Uuid) -> Result<(), reqwest::Error> { +async fn some_work(app_base_url: &String, song_queue_id: &uuid::Uuid) -> Result<(), std::io::Error> { + match prep_song(app_base_url, song_queue_id).await { + Ok((song_queue_path, coverart_queue_path, metadata)) => { + match apply_metadata(song_queue_path.clone(), coverart_queue_path, metadata).await { + Ok(song_path) => { + // let s_path = util::path_buf_to_string(&song_queue_path); + Ok(()) + // Ok((s_path)) + } + Err(err) => { + eprintln!("Error: {:?}", err); + Err(err) + } + } + } + Err(_err) => { + Ok(()) + } + } +} + +/* + // let s_err: reqwest::Error = err.into(); + // let error = reqwest::Error::new( + // reqwest::ErrorKind::Request, // Error kind + // err.to_string() // Error message +// ); + // Err(error) + Err(err) + } + } +* +*/ + +async fn prep_song(api_url: &String, song_queue_id: &uuid::Uuid) -> Result<(String, String, api::get_metadata_queue::response::Metadata), reqwest::Error> { match api::fetch_song_queue_data::get_data(api_url, song_queue_id).await { Ok(response) => { // Process data here... @@ -77,8 +113,8 @@ async fn process_song(api_url: &String, song_queue_id: &uuid::Uuid) -> Result<() { Ok(response) => { let id = &response.data[0].id; - let metadata = &response.data[0].metadata; 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); @@ -100,35 +136,34 @@ async fn process_song(api_url: &String, song_queue_id: &uuid::Uuid) -> Result<() println!("Saved coverart queue file at: {:?}", coverart_queue_path); - match apply_metadata(song_queue_path.clone(), coverart_queue_path, metadata).await { - Ok(_) => { - let s_path = util::path_buf_to_string(&song_queue_path); - the_rest::update_queued_song(&s_path).await; - } - Err(err) => { - eprintln!("Error: {:?}", err); - } - } + let c_path = util::path_buf_to_string(&coverart_queue_path); + let s_path = util::path_buf_to_string(&song_queue_path); + Ok((s_path, c_path, metadata.clone())) } Err(err) => { eprintln!("Error: {:?}", err); + Err(err) } } Err(err) => { eprintln!("Error: {:?}", err); + Err(err) } } } Err(err) => { eprintln!("Error: {:?}", err); + Err(err) } } } Err(err) => { eprintln!("Error: {:?}", err); + Err(err) + // Err(reqwest::Error) } } - Ok(()) + // Ok(()) } Err(err) => { eprintln!("Error: {:?}", err); @@ -433,7 +468,7 @@ mod api { pub mod response { use serde::{Deserialize, Serialize}; - #[derive(Debug, Deserialize, Serialize)] + #[derive(Clone, Debug, Deserialize, Serialize)] pub struct Metadata { pub song_queue_id: uuid::Uuid, pub album: String, diff --git a/src/the_rest.rs b/src/the_rest.rs index 5f5754d..125aab4 100644 --- a/src/the_rest.rs +++ b/src/the_rest.rs @@ -1,9 +1,6 @@ // TODO: Refactor this file when this app is functional -// TODO: Update the queued song with the updated queued song -pub async fn update_queued_song(song_path: &String) { -} // TODO: Create song // TODO: Create coverart diff --git a/src/update_queued_song.rs b/src/update_queued_song.rs new file mode 100644 index 0000000..e21c97b --- /dev/null +++ b/src/update_queued_song.rs @@ -0,0 +1,44 @@ + +use reqwest::multipart; + +// TODO: Update the queued song with the updated queued song +pub async fn update_queued_song(base_url: &String, song_path: &String, song_queue_id: &uuid::Uuid) -> Result { + + /* + let client = reqwest::Client::builder() + .build()?; + + let form = reqwest::multipart::Form::new() + .part("file", reqwest::multipart::Part::bytes(std::fs::read(song_path).unwrap()).file_name("track01.flac")); + + let method = "PATCH"; + let url = format!("{}/api/v2/song/queue/{}", base_url, song_queue_id); + let request = client.request(reqwest::Method::from_bytes(method.as_bytes()).unwrap(), url) + .multipart(form); + + let response = request.send().await?; + */ + // let body = response.text().await?; + + let client = reqwest::Client::builder() + .build()?; + + let form = reqwest::multipart::Form::new() + .part("file", + reqwest::multipart::Part::bytes(std::fs::read(song_path).unwrap()).file_name("track01.flac")); + + let method = "PATCH"; + let url = format!("{}/api/v2/song/queue/{}", base_url, song_queue_id); + let request = client.request(reqwest::Method::from_bytes(method.as_bytes()).unwrap(), url) + .multipart(form); + + let response = request.send().await?; + + + Ok(response) +} + + +pub mod response { + use serde::{Deserialize, Serialize}; +} -- 2.43.0 From 00a9d88ea2fce6b58c6c8bc714285742264e44a7 Mon Sep 17 00:00:00 2001 From: phoenix Date: Fri, 27 Jun 2025 20:50:52 -0400 Subject: [PATCH 04/20] Added feature for reqwest --- Cargo.lock | 17 +++++++++++++++++ Cargo.toml | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index a2cd917..fc99adf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -749,6 +749,16 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + [[package]] name = "miniz_oxide" version = "0.8.8" @@ -1023,6 +1033,7 @@ dependencies = [ "js-sys", "log", "mime", + "mime_guess", "native-tls", "once_cell", "percent-encoding", @@ -1512,6 +1523,12 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "unicase" +version = "2.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" + [[package]] name = "unicode-ident" version = "1.0.18" diff --git a/Cargo.toml b/Cargo.toml index 9ec7ef6..9cf368d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ rust-version = "1.86" [dependencies] tokio = { version = "1.44.1", features = ["full"] } futures = { version = "0.3.31" } -reqwest = { version = "0.12.19", features = ["json", "stream"] } +reqwest = { version = "0.12.19", features = ["json", "stream", "multipart"] } serde = { version = "1.0.218", features = ["derive"] } serde_json = { version = "1.0.139" } time = { version = "0.3.41", features = ["macros", "serde"] } -- 2.43.0 From eafbb7f24accb3fd32726c65c6d2b2d275afd5f1 Mon Sep 17 00:00:00 2001 From: phoenix Date: Fri, 27 Jun 2025 21:02:25 -0400 Subject: [PATCH 05/20] Code changes --- src/main.rs | 75 +++++++++++++++++++++++------------------------------ 1 file changed, 33 insertions(+), 42 deletions(-) diff --git a/src/main.rs b/src/main.rs index d36bebc..8852fd9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -21,8 +21,14 @@ async fn main() -> Result<(), Box> { let song_queue_id = song_queue_item.data[0].id; // TODO: Do something with the result later - let _ = prep_song(&app_base_url, &song_queue_id).await; - let _ = some_work(&app_base_url, &song_queue_id).await; + // let _ = prep_song(&app_base_url, &song_queue_id).await; + match some_work(&app_base_url, &song_queue_id).await { + Ok(_) => { + } + Err(err) => { + eprintln!("Error: {:?}", err); + } + } } else { println!("Queue is empty"); } @@ -63,10 +69,17 @@ async fn is_queue_empty( async fn some_work(app_base_url: &String, song_queue_id: &uuid::Uuid) -> Result<(), std::io::Error> { match prep_song(app_base_url, song_queue_id).await { Ok((song_queue_path, coverart_queue_path, metadata)) => { - match apply_metadata(song_queue_path.clone(), coverart_queue_path, metadata).await { - Ok(song_path) => { + match apply_metadata(&song_queue_path, &coverart_queue_path, &metadata).await { + Ok(_applied) => { // let s_path = util::path_buf_to_string(&song_queue_path); - Ok(()) + match update_queued_song::update_queued_song(app_base_url, &song_queue_path, song_queue_id).await { + Ok(_response) => { + Ok(()) + } + Err(err) => { + Err(std::io::Error::new(std::io::ErrorKind::Other, err.to_string())) + } + } // Ok((s_path)) } Err(err) => { @@ -81,19 +94,6 @@ async fn some_work(app_base_url: &String, song_queue_id: &uuid::Uuid) -> Result< } } -/* - // let s_err: reqwest::Error = err.into(); - // let error = reqwest::Error::new( - // reqwest::ErrorKind::Request, // Error kind - // err.to_string() // Error message -// ); - // Err(error) - Err(err) - } - } -* -*/ - async fn prep_song(api_url: &String, song_queue_id: &uuid::Uuid) -> Result<(String, String, api::get_metadata_queue::response::Metadata), reqwest::Error> { match api::fetch_song_queue_data::get_data(api_url, song_queue_id).await { Ok(response) => { @@ -241,18 +241,11 @@ pub async fn save_file_to_fs( } pub async fn apply_metadata( - song_queue_path: std::path::PathBuf, - coverart_queue_path: std::path::PathBuf, + song_queue_path: &String, + coverart_queue_path: &String, metadata: &api::get_metadata_queue::response::Metadata, ) -> Result { // Apply metadata fields - let s_path = util::path_buf_to_string(&song_queue_path); - - if s_path.is_empty() { - println!("Song queue path is empty"); - return Ok(false); - } - let types = icarus_meta::types::all_metadata_types(); for t in types { @@ -260,7 +253,7 @@ pub async fn apply_metadata( icarus_meta::types::Type::Album => { let meta_type = icarus_meta::types::MetadataType::from_string(metadata.album.clone()); - match icarus_meta::meta::metadata::set_meta_value(t, &s_path, meta_type) { + match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { Ok(_) => {} Err(_err) => { return Err(_err); @@ -270,7 +263,7 @@ pub async fn apply_metadata( icarus_meta::types::Type::AlbumArtist => { let meta_type = icarus_meta::types::MetadataType::from_string(metadata.album_artist.clone()); - match icarus_meta::meta::metadata::set_meta_value(t, &s_path, meta_type) { + match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { Ok(_) => {} Err(_err) => { return Err(_err); @@ -280,7 +273,7 @@ pub async fn apply_metadata( icarus_meta::types::Type::Artist => { let meta_type = icarus_meta::types::MetadataType::from_string(metadata.artist.clone()); - match icarus_meta::meta::metadata::set_meta_value(t, &s_path, meta_type) { + match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { Ok(_) => {} Err(_err) => { return Err(_err); @@ -291,7 +284,7 @@ pub async fn apply_metadata( // TODO: Do something about this discrepancy let meta_type = icarus_meta::types::MetadataType::from_string(metadata.year.to_string()); - match icarus_meta::meta::metadata::set_meta_value(t, &s_path, meta_type) { + match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { Ok(_) => {} Err(_err) => { return Err(_err); @@ -300,7 +293,7 @@ pub async fn apply_metadata( } icarus_meta::types::Type::Disc => { let meta_type = icarus_meta::types::MetadataType::from_int(metadata.disc); - match icarus_meta::meta::metadata::set_meta_value(t, &s_path, meta_type) { + match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { Ok(_) => {} Err(_err) => { return Err(_err); @@ -310,7 +303,7 @@ pub async fn apply_metadata( icarus_meta::types::Type::Genre => { let meta_type = icarus_meta::types::MetadataType::from_string(metadata.genre.clone()); - match icarus_meta::meta::metadata::set_meta_value(t, &s_path, meta_type) { + match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { Ok(_) => {} Err(_err) => { return Err(_err); @@ -320,7 +313,7 @@ pub async fn apply_metadata( icarus_meta::types::Type::Title => { let meta_type = icarus_meta::types::MetadataType::from_string(metadata.title.clone()); - match icarus_meta::meta::metadata::set_meta_value(t, &s_path, meta_type) { + match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { Ok(_) => {} Err(_err) => { return Err(_err); @@ -329,7 +322,7 @@ pub async fn apply_metadata( } icarus_meta::types::Type::Track => { let meta_type = icarus_meta::types::MetadataType::from_int(metadata.track); - match icarus_meta::meta::metadata::set_meta_value(t, &s_path, meta_type) { + match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { Ok(_) => {} Err(_err) => { return Err(_err); @@ -338,7 +331,7 @@ pub async fn apply_metadata( } icarus_meta::types::Type::TrackCount => { let meta_type = icarus_meta::types::MetadataType::from_int(metadata.track_count); - match icarus_meta::meta::metadata::set_meta_value(t, &s_path, meta_type) { + match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { Ok(_) => {} Err(_err) => { return Err(_err); @@ -347,7 +340,7 @@ pub async fn apply_metadata( } icarus_meta::types::Type::DiscCount => { let meta_type = icarus_meta::types::MetadataType::from_int(metadata.disc_count); - match icarus_meta::meta::metadata::set_meta_value(t, &s_path, meta_type) { + match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { Ok(_) => {} Err(_err) => { return Err(_err); @@ -358,13 +351,11 @@ pub async fn apply_metadata( } // Apply coverart - let c_path: String = util::path_buf_to_string(&coverart_queue_path); - - match icarus_meta::meta::coverart::contains_coverart(&s_path) { + match icarus_meta::meta::coverart::contains_coverart(song_queue_path) { Ok((exists, size)) => { if exists { println!("Coverart exists: {:?} size", size); - match icarus_meta::meta::coverart::remove_coverart(&s_path) { + match icarus_meta::meta::coverart::remove_coverart(song_queue_path) { Ok(_data) => {} Err(err) => { return Err(err); @@ -372,7 +363,7 @@ pub async fn apply_metadata( } } - match icarus_meta::meta::coverart::set_coverart(&s_path, &c_path) { + match icarus_meta::meta::coverart::set_coverart(song_queue_path, coverart_queue_path) { Ok(_data) => { if _data.is_empty() { println!("There was an issue"); -- 2.43.0 From 0ae6214969ba7dd5cb8411c3a88fd04e3545a9cc Mon Sep 17 00:00:00 2001 From: phoenix Date: Fri, 27 Jun 2025 21:03:22 -0400 Subject: [PATCH 06/20] Removing commented code --- src/update_queued_song.rs | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/src/update_queued_song.rs b/src/update_queued_song.rs index e21c97b..d731096 100644 --- a/src/update_queued_song.rs +++ b/src/update_queued_song.rs @@ -3,23 +3,6 @@ use reqwest::multipart; // TODO: Update the queued song with the updated queued song pub async fn update_queued_song(base_url: &String, song_path: &String, song_queue_id: &uuid::Uuid) -> Result { - - /* - let client = reqwest::Client::builder() - .build()?; - - let form = reqwest::multipart::Form::new() - .part("file", reqwest::multipart::Part::bytes(std::fs::read(song_path).unwrap()).file_name("track01.flac")); - - let method = "PATCH"; - let url = format!("{}/api/v2/song/queue/{}", base_url, song_queue_id); - let request = client.request(reqwest::Method::from_bytes(method.as_bytes()).unwrap(), url) - .multipart(form); - - let response = request.send().await?; - */ - // let body = response.text().await?; - let client = reqwest::Client::builder() .build()?; @@ -34,7 +17,6 @@ pub async fn update_queued_song(base_url: &String, song_path: &String, song_queu let response = request.send().await?; - Ok(response) } -- 2.43.0 From 47a3b60b8d03caaa53c32024d3e8cabbe80ed864 Mon Sep 17 00:00:00 2001 From: phoenix Date: Fri, 27 Jun 2025 21:03:56 -0400 Subject: [PATCH 07/20] Code formatting --- src/main.rs | 36 ++++++++++++++++++++++-------------- src/the_rest.rs | 2 -- src/update_queued_song.rs | 22 +++++++++++++--------- src/util.rs | 2 -- 4 files changed, 35 insertions(+), 27 deletions(-) diff --git a/src/main.rs b/src/main.rs index 8852fd9..5b2cd4d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -23,8 +23,7 @@ async fn main() -> Result<(), Box> { // TODO: Do something with the result later // let _ = prep_song(&app_base_url, &song_queue_id).await; match some_work(&app_base_url, &song_queue_id).await { - Ok(_) => { - } + Ok(_) => {} Err(err) => { eprintln!("Error: {:?}", err); } @@ -66,19 +65,27 @@ async fn is_queue_empty( } } -async fn some_work(app_base_url: &String, song_queue_id: &uuid::Uuid) -> Result<(), std::io::Error> { +async fn some_work( + app_base_url: &String, + song_queue_id: &uuid::Uuid, +) -> Result<(), std::io::Error> { match prep_song(app_base_url, song_queue_id).await { Ok((song_queue_path, coverart_queue_path, metadata)) => { match apply_metadata(&song_queue_path, &coverart_queue_path, &metadata).await { Ok(_applied) => { // let s_path = util::path_buf_to_string(&song_queue_path); - match update_queued_song::update_queued_song(app_base_url, &song_queue_path, song_queue_id).await { - Ok(_response) => { - Ok(()) - } - Err(err) => { - Err(std::io::Error::new(std::io::ErrorKind::Other, err.to_string())) - } + match update_queued_song::update_queued_song( + app_base_url, + &song_queue_path, + song_queue_id, + ) + .await + { + Ok(_response) => Ok(()), + Err(err) => Err(std::io::Error::new( + std::io::ErrorKind::Other, + err.to_string(), + )), } // Ok((s_path)) } @@ -88,13 +95,14 @@ async fn some_work(app_base_url: &String, song_queue_id: &uuid::Uuid) -> Result< } } } - Err(_err) => { - Ok(()) - } + Err(_err) => Ok(()), } } -async fn prep_song(api_url: &String, song_queue_id: &uuid::Uuid) -> Result<(String, String, api::get_metadata_queue::response::Metadata), reqwest::Error> { +async fn prep_song( + api_url: &String, + song_queue_id: &uuid::Uuid, +) -> Result<(String, String, api::get_metadata_queue::response::Metadata), reqwest::Error> { match api::fetch_song_queue_data::get_data(api_url, song_queue_id).await { Ok(response) => { // Process data here... diff --git a/src/the_rest.rs b/src/the_rest.rs index 125aab4..ae021fd 100644 --- a/src/the_rest.rs +++ b/src/the_rest.rs @@ -1,7 +1,5 @@ // TODO: Refactor this file when this app is functional - - // TODO: Create song // TODO: Create coverart // TODO: Wipe data from queued song diff --git a/src/update_queued_song.rs b/src/update_queued_song.rs index d731096..56cb753 100644 --- a/src/update_queued_song.rs +++ b/src/update_queued_song.rs @@ -1,18 +1,23 @@ - use reqwest::multipart; // TODO: Update the queued song with the updated queued song -pub async fn update_queued_song(base_url: &String, song_path: &String, song_queue_id: &uuid::Uuid) -> Result { - let client = reqwest::Client::builder() - .build()?; +pub async fn update_queued_song( + base_url: &String, + song_path: &String, + song_queue_id: &uuid::Uuid, +) -> Result { + let client = reqwest::Client::builder().build()?; - let form = reqwest::multipart::Form::new() - .part("file", - reqwest::multipart::Part::bytes(std::fs::read(song_path).unwrap()).file_name("track01.flac")); + let form = reqwest::multipart::Form::new().part( + "file", + reqwest::multipart::Part::bytes(std::fs::read(song_path).unwrap()) + .file_name("track01.flac"), + ); let method = "PATCH"; let url = format!("{}/api/v2/song/queue/{}", base_url, song_queue_id); - let request = client.request(reqwest::Method::from_bytes(method.as_bytes()).unwrap(), url) + let request = client + .request(reqwest::Method::from_bytes(method.as_bytes()).unwrap(), url) .multipart(form); let response = request.send().await?; @@ -20,7 +25,6 @@ pub async fn update_queued_song(base_url: &String, song_path: &String, song_queu Ok(response) } - pub mod response { use serde::{Deserialize, Serialize}; } diff --git a/src/util.rs b/src/util.rs index c55ded3..77a0b4e 100644 --- a/src/util.rs +++ b/src/util.rs @@ -1,4 +1,3 @@ - pub fn path_buf_to_string(path: &std::path::PathBuf) -> String { let s_path = match path.to_str() { Some(val) => String::from(val), @@ -7,4 +6,3 @@ pub fn path_buf_to_string(path: &std::path::PathBuf) -> String { s_path } - -- 2.43.0 From e4a235e15acf7d3715575702bf3fdf17a79e28a3 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 28 Jun 2025 16:55:31 -0400 Subject: [PATCH 08/20] Added body serializing --- src/main.rs | 10 +++++++++- src/update_queued_song.rs | 6 ++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 5b2cd4d..f243265 100644 --- a/src/main.rs +++ b/src/main.rs @@ -81,7 +81,15 @@ async fn some_work( ) .await { - Ok(_response) => Ok(()), + Ok(response) => { + match response.json::().await { + Ok(_inner_response) => { + Ok(()) + } + Err(err) => Err(std::io::Error::new(std::io::ErrorKind::Other, + err.to_string())) + } + } Err(err) => Err(std::io::Error::new( std::io::ErrorKind::Other, err.to_string(), diff --git a/src/update_queued_song.rs b/src/update_queued_song.rs index 56cb753..bde96b3 100644 --- a/src/update_queued_song.rs +++ b/src/update_queued_song.rs @@ -27,4 +27,10 @@ pub async fn update_queued_song( pub mod response { use serde::{Deserialize, Serialize}; + + #[derive(Debug, Deserialize, Serialize)] + pub struct Response { + pub message: String, + pub data: Vec, + } } -- 2.43.0 From 440c3202250e5983aeebe6cf90ab04ff83c2a2b1 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 28 Jun 2025 16:56:01 -0400 Subject: [PATCH 09/20] Removing unsed import --- src/update_queued_song.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/update_queued_song.rs b/src/update_queued_song.rs index bde96b3..e0081e0 100644 --- a/src/update_queued_song.rs +++ b/src/update_queued_song.rs @@ -1,5 +1,3 @@ -use reqwest::multipart; - // TODO: Update the queued song with the updated queued song pub async fn update_queued_song( base_url: &String, -- 2.43.0 From 6e3d4a76efa35d98dfc92e7287d0ffff88c063b9 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 28 Jun 2025 17:00:39 -0400 Subject: [PATCH 10/20] Improvements to util module --- src/util.rs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/util.rs b/src/util.rs index 77a0b4e..3a873bc 100644 --- a/src/util.rs +++ b/src/util.rs @@ -1,8 +1,6 @@ -pub fn path_buf_to_string(path: &std::path::PathBuf) -> String { - let s_path = match path.to_str() { +pub fn path_buf_to_string(path: &std::path::Path) -> String { + match path.to_str() { Some(val) => String::from(val), None => String::new(), - }; - - s_path + } } -- 2.43.0 From e33d1e6cd7c171979389f05611a878683edcab9f Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 28 Jun 2025 17:01:18 -0400 Subject: [PATCH 11/20] Warning fixes --- src/main.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main.rs b/src/main.rs index f243265..e705e73 100644 --- a/src/main.rs +++ b/src/main.rs @@ -86,12 +86,11 @@ async fn some_work( Ok(_inner_response) => { Ok(()) } - Err(err) => Err(std::io::Error::new(std::io::ErrorKind::Other, + Err(err) => Err(std::io::Error::other( err.to_string())) } } - Err(err) => Err(std::io::Error::new( - std::io::ErrorKind::Other, + Err(err) => Err(std::io::Error::other( err.to_string(), )), } -- 2.43.0 From 5c139da99e6107fae216510624b2d0e75b58d271 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 28 Jun 2025 17:02:05 -0400 Subject: [PATCH 12/20] Cleanup --- src/main.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index e705e73..97bc56f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -73,7 +73,6 @@ async fn some_work( Ok((song_queue_path, coverart_queue_path, metadata)) => { match apply_metadata(&song_queue_path, &coverart_queue_path, &metadata).await { Ok(_applied) => { - // let s_path = util::path_buf_to_string(&song_queue_path); match update_queued_song::update_queued_song( app_base_url, &song_queue_path, @@ -94,7 +93,6 @@ async fn some_work( err.to_string(), )), } - // Ok((s_path)) } Err(err) => { eprintln!("Error: {:?}", err); -- 2.43.0 From 76024eeae905c5e4d2fb5b614ebc382e64c2eb8f Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 28 Jun 2025 17:02:26 -0400 Subject: [PATCH 13/20] Code formatting --- src/main.rs | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/main.rs b/src/main.rs index 97bc56f..afe7ca9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -81,17 +81,15 @@ async fn some_work( .await { Ok(response) => { - match response.json::().await { - Ok(_inner_response) => { - Ok(()) - } - Err(err) => Err(std::io::Error::other( - err.to_string())) + match response + .json::() + .await + { + Ok(_inner_response) => Ok(()), + 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) => { -- 2.43.0 From 1aec73639fe9ff8718b0b0cd26941285119b6d8a Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 28 Jun 2025 19:04:40 -0400 Subject: [PATCH 14/20] Functionality is working --- src/main.rs | 5 ++++- src/update_queued_song.rs | 19 +++++++++++++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/main.rs b/src/main.rs index afe7ca9..5ba6707 100644 --- a/src/main.rs +++ b/src/main.rs @@ -85,7 +85,10 @@ async fn some_work( .json::() .await { - Ok(_inner_response) => Ok(()), + Ok(_inner_response) => { + println!("Response: {:?}", _inner_response); + Ok(()) + } Err(err) => Err(std::io::Error::other(err.to_string())), } } diff --git a/src/update_queued_song.rs b/src/update_queued_song.rs index e0081e0..a471ff4 100644 --- a/src/update_queued_song.rs +++ b/src/update_queued_song.rs @@ -6,20 +6,35 @@ pub async fn update_queued_song( ) -> Result { let client = reqwest::Client::builder().build()?; + println!("Song path: {:?}", song_path); + let form = reqwest::multipart::Form::new().part( "file", reqwest::multipart::Part::bytes(std::fs::read(song_path).unwrap()) .file_name("track01.flac"), ); - let method = "PATCH"; + // let method = "PATCH"; let url = format!("{}/api/v2/song/queue/{}", base_url, song_queue_id); + println!("Url: {:?}", url); + + let content_type = "audio/flac"; + // let mut headers = reqwest::header::HeaderMap::new(); + // headers.insert(reqwest::header::CONTENT_TYPE, reqwest::header::HeaderValue::from_static(content_type)); + let request = client - .request(reqwest::Method::from_bytes(method.as_bytes()).unwrap(), url) + // .request(reqwest::Method::from_bytes(method.as_bytes()).unwrap(), url) + .patch(url) + // .headers(headers) .multipart(form); + println!("Request prepared"); + println!("Request {:?}", request); + let response = request.send().await?; + println!("Sent"); + Ok(response) } -- 2.43.0 From 2cd11fd0d3f8f9b426194dae86c14d08f73de324 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 28 Jun 2025 19:08:27 -0400 Subject: [PATCH 15/20] Code cleanup --- src/update_queued_song.rs | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/update_queued_song.rs b/src/update_queued_song.rs index a471ff4..6c04a37 100644 --- a/src/update_queued_song.rs +++ b/src/update_queued_song.rs @@ -1,4 +1,3 @@ -// TODO: Update the queued song with the updated queued song pub async fn update_queued_song( base_url: &String, song_path: &String, @@ -14,27 +13,15 @@ pub async fn update_queued_song( .file_name("track01.flac"), ); - // let method = "PATCH"; let url = format!("{}/api/v2/song/queue/{}", base_url, song_queue_id); println!("Url: {:?}", url); - let content_type = "audio/flac"; - // let mut headers = reqwest::header::HeaderMap::new(); - // headers.insert(reqwest::header::CONTENT_TYPE, reqwest::header::HeaderValue::from_static(content_type)); - let request = client - // .request(reqwest::Method::from_bytes(method.as_bytes()).unwrap(), url) .patch(url) - // .headers(headers) .multipart(form); - println!("Request prepared"); - println!("Request {:?}", request); - let response = request.send().await?; - println!("Sent"); - Ok(response) } -- 2.43.0 From 60dd60ad478d67744411762137572216e0c92d94 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 28 Jun 2025 19:08:43 -0400 Subject: [PATCH 16/20] Code formatting --- src/update_queued_song.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/update_queued_song.rs b/src/update_queued_song.rs index 6c04a37..f3c8e8c 100644 --- a/src/update_queued_song.rs +++ b/src/update_queued_song.rs @@ -16,9 +16,7 @@ pub async fn update_queued_song( let url = format!("{}/api/v2/song/queue/{}", base_url, song_queue_id); println!("Url: {:?}", url); - let request = client - .patch(url) - .multipart(form); + let request = client.patch(url).multipart(form); let response = request.send().await?; -- 2.43.0 From 6e0d0c3882254a4940d6720bfe0276956214f684 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 28 Jun 2025 19:09:53 -0400 Subject: [PATCH 17/20] Added TODO --- src/update_queued_song.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/update_queued_song.rs b/src/update_queued_song.rs index f3c8e8c..ba51eeb 100644 --- a/src/update_queued_song.rs +++ b/src/update_queued_song.rs @@ -7,6 +7,7 @@ pub async fn update_queued_song( println!("Song path: {:?}", song_path); + // TODO: Make the filename random let form = reqwest::multipart::Form::new().part( "file", reqwest::multipart::Part::bytes(std::fs::read(song_path).unwrap()) -- 2.43.0 From 8d2d3c892c8e73517a0b6b312fbc3ec541e09b37 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 28 Jun 2025 19:12:31 -0400 Subject: [PATCH 18/20] Cleanup --- src/main.rs | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main.rs b/src/main.rs index 5ba6707..e3d15ee 100644 --- a/src/main.rs +++ b/src/main.rs @@ -21,7 +21,6 @@ async fn main() -> Result<(), Box> { let song_queue_id = song_queue_item.data[0].id; // TODO: Do something with the result later - // let _ = prep_song(&app_base_url, &song_queue_id).await; match some_work(&app_base_url, &song_queue_id).await { Ok(_) => {} Err(err) => { @@ -174,10 +173,8 @@ async fn prep_song( Err(err) => { eprintln!("Error: {:?}", err); Err(err) - // Err(reqwest::Error) } } - // Ok(()) } Err(err) => { eprintln!("Error: {:?}", err); -- 2.43.0 From bf209b5348fad5ce9cae3b0c88b6892416dd2fa2 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 28 Jun 2025 19:18:52 -0400 Subject: [PATCH 19/20] Tidying up error related code --- src/main.rs | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/main.rs b/src/main.rs index e3d15ee..d0c811c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -95,12 +95,11 @@ async fn some_work( } } Err(err) => { - eprintln!("Error: {:?}", err); Err(err) } } } - Err(_err) => Ok(()), + Err(err) => Err(std::io::Error::other(err.to_string())), } } @@ -154,36 +153,30 @@ async fn prep_song( Ok((s_path, c_path, metadata.clone())) } Err(err) => { - eprintln!("Error: {:?}", err); Err(err) } } Err(err) => { - eprintln!("Error: {:?}", err); Err(err) } } } Err(err) => { - eprintln!("Error: {:?}", err); Err(err) } } } Err(err) => { - eprintln!("Error: {:?}", err); Err(err) } } } Err(err) => { - eprintln!("Error: {:?}", err); Err(err) } } } Err(err) => { - eprintln!("Error: {:?}", err); Err(err) } } -- 2.43.0 From 8753e254ace76e5a98d4b6bc5b3c54b66e2268dd Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 28 Jun 2025 19:19:39 -0400 Subject: [PATCH 20/20] Code formatting --- src/main.rs | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/src/main.rs b/src/main.rs index d0c811c..429eac7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -94,9 +94,7 @@ async fn some_work( Err(err) => Err(std::io::Error::other(err.to_string())), } } - Err(err) => { - Err(err) - } + Err(err) => Err(err), } } Err(err) => Err(std::io::Error::other(err.to_string())), @@ -166,19 +164,13 @@ async fn prep_song( } } } - 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), -- 2.43.0