diff options
Diffstat (limited to '')
-rw-r--r-- | src/scrobbles.rs | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/scrobbles.rs b/src/scrobbles.rs new file mode 100644 index 0000000..07b1ad1 --- /dev/null +++ b/src/scrobbles.rs @@ -0,0 +1,55 @@ +use listenbrainz::raw::response::UserPlayingNowResponse; +use serde::{Deserialize, Serialize}; + +use crate::error::BlossomError; + +pub async fn get_now_playing( + client: &listenbrainz::raw::Client, +) -> Result<NowPlayingData, BlossomError> { + let playingnow = client.user_playing_now("celblossom")?; + Ok(NowPlayingData::new(playingnow)) +} + +#[derive(Serialize, Deserialize)] +pub struct NowPlayingData { + pub is_scrobbling: bool, + pub song: Option<String>, + pub artist: Option<String>, +} + +impl NowPlayingData { + fn new(playingnow: UserPlayingNowResponse) -> Self { + let is_scrobbling = playingnow.payload.count > 0; + if is_scrobbling { + Self { + is_scrobbling, + song: Some( + playingnow + .payload + .listens + .first() + .unwrap() + .track_metadata + .track_name + .clone(), + ), + artist: Some( + playingnow + .payload + .listens + .first() + .unwrap() + .track_metadata + .artist_name + .clone(), + ), + } + } else { + Self { + is_scrobbling, + song: None, + artist: None, + } + } + } +} |