aboutsummaryrefslogtreecommitdiffstats
path: root/src/scrobbles.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/scrobbles.rs')
-rw-r--r--src/scrobbles.rs55
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,
+ }
+ }
+ }
+}