From bd29978b2a0d0d6def486fcdaa63bc8934d68045 Mon Sep 17 00:00:00 2001 From: salmonik Date: Tue, 5 May 2026 21:12:32 +0200 Subject: fix(daemon): robust auto-advance; ensure next track starts even if playback fails --- src/scrobbler.rs | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 src/scrobbler.rs (limited to 'src/scrobbler.rs') diff --git a/src/scrobbler.rs b/src/scrobbler.rs new file mode 100644 index 0000000..09a7f55 --- /dev/null +++ b/src/scrobbler.rs @@ -0,0 +1,75 @@ +use reqwest::Client; + +#[allow(dead_code)] +pub struct Scrobbler { + lastfm_api_key: Option, + lastfm_api_secret: Option, + lastfm_session_key: Option, + listenbrainz_token: Option, + client: Client, +} + +#[allow(dead_code)] +impl Scrobbler { + pub fn new( + lastfm_api_key: Option, + lastfm_api_secret: Option, + lastfm_session_key: Option, + listenbrainz_token: Option, + ) -> Self { + Scrobbler { + lastfm_api_key, + lastfm_api_secret, + lastfm_session_key, + listenbrainz_token, + client: Client::new(), + } + } + + pub fn now_playing(&self, artist: &str, track: &str, album: Option<&str>) { + if let Some(api_key) = &self.lastfm_api_key { + let _ = self.send_lastfm_now_playing(api_key, artist, track, album); + } + } + + pub fn scrobble(&self, artist: &str, track: &str, album: Option<&str>, timestamp: u64) { + if let Some(api_key) = &self.lastfm_api_key { + let _ = self.send_lastfm_scrobble(api_key, artist, track, album, timestamp); + } + if let Some(token) = &self.listenbrainz_token { + let _ = self.send_listenbrainz_scrobble(token, artist, track, album, timestamp); + } + } + + fn send_lastfm_now_playing( + &self, + _api_key: &str, + _artist: &str, + _track: &str, + _album: Option<&str>, + ) -> Result<(), Box> { + Ok(()) + } + + fn send_lastfm_scrobble( + &self, + _api_key: &str, + _artist: &str, + _track: &str, + _album: Option<&str>, + _timestamp: u64, + ) -> Result<(), Box> { + Ok(()) + } + + fn send_listenbrainz_scrobble( + &self, + _token: &str, + _artist: &str, + _track: &str, + _album: Option<&str>, + _timestamp: u64, + ) -> Result<(), Box> { + Ok(()) + } +} -- cgit v1.2.3