diff --git a/src/main.rs b/src/main.rs index 6a41d11..5720fd9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -18,11 +18,12 @@ async fn main() -> Result<(), Box> { Ok(song_queue_item) => { if !song_queue_item.data.is_empty() { println!("Song queue item: {:?}", song_queue_item); + let song_queue_id = song_queue_item.data[0].id; println!("Fetching song queue data"); match api::fetch_song_queue_data::get_data( &app_base_url, - &song_queue_item.data[0].id, + &song_queue_id, ) .await { @@ -41,15 +42,35 @@ async fn main() -> Result<(), Box> { println!("Saved at: {:?}", save_path); - // TODO: Get queued song's metadata - // TODO: Get queued coverart - // TODO: Get queued coverart's data - // TODO: Apply metadata to the queued song - // 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 + match api::get_metadata_queue::get(&app_base_url, &song_queue_id).await { + Ok(response) => { + match response.json::().await { + Ok(response) => { + let id = &response.data[0].id; + let metadata = &response.data[0].metadata; + let created_at = &response.data[0].created_at; + println!("Id: {:?}", id); + println!("Metadata: {:?}", metadata); + println!("Created at: {:?}", created_at); + // TODO: Get queued song's metadata + // TODO: Get queued coverart + // TODO: Get queued coverart's data + // TODO: Apply metadata to the queued song + // 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); + } + } + } + Err(err) => { + eprintln!("Error: {:?}", err); + } + } } Err(err) => { eprintln!("Error fetching song queue data: {:?}", err); @@ -159,4 +180,68 @@ mod api { } } } + + pub mod get_metadata_queue { + pub async fn get(base_url: &String, song_queue_id: &uuid::Uuid) -> Result { + let client = reqwest::Client::new(); + let endpoint = String::from("api/v2/song/metadata/queue"); + let api_url = format!("{}/{}", base_url, endpoint); + client.get(api_url).query(&[("song_queue_id", song_queue_id)]).send().await + } + + pub mod response { + use serde::{Deserialize, Serialize}; + + /* + * "id": "31ed2464-f311-47b0-90ed-8d5925c20fb1", + "metadata": { + "album": "Are You Experienced?", + "album_artist": "The Jimi Hendrix Experience", + "artist": "The Jimi Hendrix Experience", + "disc": 1, + "disc_count": 1, + "duration": 213, + "genre": "Psychadelic Rock", + "id": "09b36815-b69d-41ae-888f-f2cffdd15c4d", + "title": "Hey Joe", + "track": 1, + "track_count": 17, + "year": 1967 + }, + "created_at": "2025-06-13T23:19:50.980388Z", + "song_queue_id": "09b36815-b69d-41ae-888f-f2cffdd15c4d" + */ + + #[derive(Debug, Deserialize, Serialize)] + pub struct Metadata { + pub id: uuid::Uuid, + pub album: String, + pub album_artist: String, + pub artist: String, + pub disc: i32, + pub disc_count: i32, + pub duration: i64, + pub genre: String, + pub title: String, + pub track: i32, + pub track_count: i32, + pub year: i32, + } + + #[derive(Debug, Deserialize, Serialize)] + pub struct QueueItem { + pub id: uuid::Uuid, + pub metadata: Metadata, + #[serde(with = "time::serde::rfc3339")] + pub created_at: time::OffsetDateTime, + pub song_queue_id: uuid::Uuid, + } + + #[derive(Debug, Deserialize, Serialize)] + pub struct Response { + pub message: String, + pub data: Vec, + } + } + } }