From 11b8cc21d33484099783220086198642cacc4e2f Mon Sep 17 00:00:00 2001 From: KD Date: Sat, 30 Aug 2025 13:06:04 -0400 Subject: [PATCH] Delete song (#67) * Changed code to comply with async * Able to delete song * Updated readme * Code formatting and cleanup * Version bump --- Cargo.lock | 2 +- Cargo.toml | 2 +- README.md | 2 +- src/managers/commit_manager.rs | 9 +++------ src/syncers/delete.rs | 34 ++++++++++++++++++++++++++++------ 5 files changed, 34 insertions(+), 15 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1befee6..f3df95b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -479,7 +479,7 @@ dependencies = [ [[package]] name = "icarus-dm" -version = "0.6.7" +version = "0.6.8" dependencies = [ "futures", "http", diff --git a/Cargo.toml b/Cargo.toml index 261a223..4a06ac9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "icarus-dm" -version = "0.6.7" +version = "0.6.8" rust-version = "1.88" edition = "2024" diff --git a/README.md b/README.md index 064638d..b07bf32 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ icarus-dm retrieve -u spacecadet -p stellar40 -h https://icarus.com -ha https:// ### Deleting Song ```BASH -icarus-dm delete -u spacecadet -p stellar40 -h https://icarus.com -D e8407fc6-edd2-44c1-993f-08dd7324d91a +icarus-dm delete -u spacecadet -p stellar40 -h https://icarus.com -ha https://auth.icarus.com -D e8407fc6-edd2-44c1-993f-08dd7324d91a ``` diff --git a/src/managers/commit_manager.rs b/src/managers/commit_manager.rs index 1c787b5..71e82b1 100644 --- a/src/managers/commit_manager.rs +++ b/src/managers/commit_manager.rs @@ -5,7 +5,6 @@ use std::io::{Result, Write}; use std::str::FromStr; use serde::{Deserialize, Serialize}; -use tokio::runtime::Runtime; use crate::managers; use crate::models::{self}; @@ -169,11 +168,9 @@ impl CommitManager { println!("Deleting song.."); - let res_fut = del.delete_song(&token, &song); - let result = Runtime::new().unwrap().block_on(res_fut); - match result { - Ok(o) => { - println!("Song (Id {:?}) has been successfully deleted", o.id); + match del.delete_song(&token, &song).await { + Ok((song, _coverart)) => { + println!("Song (Id {:?}) has been successfully deleted", song.id); } Err(er) => { println!("Error {er:?}"); diff --git a/src/syncers/delete.rs b/src/syncers/delete.rs index 101d19f..2531f03 100644 --- a/src/syncers/delete.rs +++ b/src/syncers/delete.rs @@ -3,21 +3,39 @@ use std::default::Default; use reqwest; use crate::models; -use crate::syncers; #[derive(Clone, Debug, Default)] pub struct Delete { pub api: models::api::Api, } +mod response { + pub mod delete_song { + #[derive(Debug, serde::Deserialize)] + pub struct SongAndCoverArt { + pub song: icarus_models::song::Song, + pub coverart: icarus_models::coverart::CoverArt, + } + + #[derive(Debug, serde::Deserialize)] + pub struct Response { + pub message: String, + pub data: Vec, + } + } +} + impl Delete { pub async fn delete_song( &mut self, token: &icarus_models::token::AccessToken, song: &icarus_models::song::Song, - ) -> Result { - self.api.endpoint = "song/data/delete".to_owned(); - let url = syncers::common::retrieve_url(&self.api, true, &song.id); + ) -> Result<(icarus_models::song::Song, icarus_models::coverart::CoverArt), std::io::Error> + { + self.api.endpoint = "api/v2/song".to_owned(); + let url = format!("{}{}/{}", self.api.url, self.api.endpoint, song.id); + println!("Url: {url:?}"); + let client = reqwest::Client::builder().build().unwrap(); let access_token = token.bearer_token(); let response = client @@ -31,8 +49,12 @@ impl Delete { reqwest::StatusCode::OK => { println!("Success!"); - match response.json::().await { - Ok(sng) => Ok(sng), + match response.json::().await { + Ok(resp) => { + println!("Response message: {:?}", resp.message); + let data = &resp.data[0]; + Ok((data.song.clone(), data.coverart.clone())) + } Err(er) => Err(std::io::Error::other(er.to_string())), } }