From 209f82f0989187da49c44a3092c330711adf2914 Mon Sep 17 00:00:00 2001 From: Koen Bolhuis Date: Mon, 16 Jan 2023 18:45:30 +0100 Subject: [PATCH 1/7] Fix user/{user_name}/playing-now response --- src/raw/response.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/raw/response.rs b/src/raw/response.rs index e420454..13835d7 100644 --- a/src/raw/response.rs +++ b/src/raw/response.rs @@ -210,15 +210,14 @@ pub struct UserPlayingNowPayload { pub count: u8, pub user_id: String, pub listens: Vec, + pub playing_now: bool, } /// Type of the [`UserPlayingNowPayload::listens`] field. #[derive(Debug, Deserialize)] pub struct UserPlayingNowListen { - pub user_name: String, - pub inserted_at: String, - pub recording_msid: String, pub track_metadata: UserPlayingNowTrackMetadata, + pub playing_now: bool, } /// Type of the [`UserPlayingNowListen::track_metadata`] field. From b5b6b4cd9943507349b466c1b158cbd0a8418fb2 Mon Sep 17 00:00:00 2001 From: Koen Bolhuis Date: Mon, 16 Jan 2023 18:46:05 +0100 Subject: [PATCH 2/7] Fix user/{user_name}/listens response --- src/raw/response.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/raw/response.rs b/src/raw/response.rs index 13835d7..0e85d8e 100644 --- a/src/raw/response.rs +++ b/src/raw/response.rs @@ -252,7 +252,7 @@ pub struct UserListensPayload { #[derive(Debug, Deserialize)] pub struct UserListensListen { pub user_name: String, - pub inserted_at: String, + pub inserted_at: i64, pub listened_at: i64, pub recording_msid: String, pub track_metadata: UserListensTrackMetadata, From 7e967a931baf1a679ad459e729f108f65000762f Mon Sep 17 00:00:00 2001 From: Koen Bolhuis Date: Mon, 16 Jan 2023 20:13:40 +0100 Subject: [PATCH 3/7] Fix stats/sitewide/artists response --- src/raw/response.rs | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/src/raw/response.rs b/src/raw/response.rs index 0e85d8e..57ee307 100644 --- a/src/raw/response.rs +++ b/src/raw/response.rs @@ -301,7 +301,7 @@ response_type! { /// Type of the [`StatsSitewideArtistsResponse::payload`] field. #[derive(Debug, Deserialize)] pub struct StatsSitewideArtistsPayload { - pub time_ranges: Vec, + pub artists: Vec, pub offset: u64, pub count: u64, pub range: String, @@ -310,20 +310,10 @@ pub struct StatsSitewideArtistsPayload { pub to_ts: i64, } -/// Type of the [`StatsSitewideArtistsPayload::time_ranges`] field. -#[derive(Debug, Deserialize)] -pub struct StatsSitewideArtistsTimeRange { - pub time_range: String, - pub artists: Vec, - pub from_ts: i64, - pub to_ts: i64, -} - /// Type of the [`StatsSitewideArtistsTimeRange::artists`] field. #[derive(Debug, Deserialize)] pub struct StatsSitewideArtistsArtist { pub artist_mbids: Option>, - pub artist_msid: String, pub artist_name: String, pub listen_count: u64, } From 50b7f917df86c29d2a7f32e1fed2edf76da7e0f4 Mon Sep 17 00:00:00 2001 From: Koen Bolhuis Date: Mon, 16 Jan 2023 20:43:16 +0100 Subject: [PATCH 4/7] Fix return type of Client::stats_user_artist_map --- src/raw/client.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/raw/client.rs b/src/raw/client.rs index 90e5e16..d34cc6d 100644 --- a/src/raw/client.rs +++ b/src/raw/client.rs @@ -287,7 +287,7 @@ impl Client { user_name: &str, range: Option<&str>, force_recalculate: Option, - ) -> Result { + ) -> Result, Error> { let endpoint = format!( "{}{}", API_ROOT_URL, @@ -305,7 +305,12 @@ impl Client { let response = request.send()?; - ResponseType::from_response(response) + // API returns 204 and an empty document if there are no statistics + if response.status() == 204 { + Ok(None) + } else { + ResponseType::from_response(response).map(Some) + } } /// Endpoint: [`stats/user/{user_name}/releases`](https://listenbrainz.readthedocs.io/en/production/dev/api/#get--1-stats-user-(user_name)-releases) From 9b2989aef823c5dd3cd4d906db2886561fe79e98 Mon Sep 17 00:00:00 2001 From: Koen Bolhuis Date: Mon, 16 Jan 2023 20:52:21 +0100 Subject: [PATCH 5/7] Removed users/{user_list}/recent-listens --- examples/users_recent_listens.rs | 11 ---------- src/raw/client.rs | 8 ------- src/raw/endpoint.rs | 11 ---------- src/raw/response.rs | 37 -------------------------------- 4 files changed, 67 deletions(-) delete mode 100644 examples/users_recent_listens.rs diff --git a/examples/users_recent_listens.rs b/examples/users_recent_listens.rs deleted file mode 100644 index ef457b4..0000000 --- a/examples/users_recent_listens.rs +++ /dev/null @@ -1,11 +0,0 @@ -use listenbrainz::raw::Client; - -fn main() { - let users: Vec = std::env::args().skip(1).collect(); - let users_ref: Vec<&str> = users.iter().map(String::as_str).collect(); - - let client = Client::new(); - - let result = client.users_recent_listens(&users_ref); - println!("{:#?}", result); -} diff --git a/src/raw/client.rs b/src/raw/client.rs index d34cc6d..5dd25a0 100644 --- a/src/raw/client.rs +++ b/src/raw/client.rs @@ -130,14 +130,6 @@ impl Client { self.post(Endpoint::DeleteListen, token, data) } - /// Endpoint: [`users/{user_list}/recent-listens`](https://listenbrainz.readthedocs.io/en/production/dev/api/#get--1-users-(user_list)-recent-listens) - pub fn users_recent_listens( - &self, - user_list: &[&str], - ) -> Result { - self.get(Endpoint::UsersRecentListens(user_list)) - } - /// Endpoint: [`user/{user_name}/listen-count`](https://listenbrainz.readthedocs.io/en/production/dev/api/#get--1-user-(user_name)-listen-count) pub fn user_listen_count(&self, user_name: &str) -> Result { self.get(Endpoint::UserListenCount(user_name)) diff --git a/src/raw/endpoint.rs b/src/raw/endpoint.rs index 1c79374..33812e3 100644 --- a/src/raw/endpoint.rs +++ b/src/raw/endpoint.rs @@ -4,7 +4,6 @@ pub enum Endpoint<'a> { SubmitListens, ValidateToken, DeleteListen, - UsersRecentListens(&'a [&'a str]), UserListenCount(&'a str), UserPlayingNow(&'a str), UserListens(&'a str), @@ -25,16 +24,6 @@ impl<'a> fmt::Display for Endpoint<'a> { Self::SubmitListens => "submit-listens", Self::ValidateToken => "validate-token", Self::DeleteListen => "delete-listen", - Self::UsersRecentListens(users) => { - let users = users.iter().fold(String::new(), |mut result, user| { - result.reserve(user.len() + 1); - result.push_str(&user.replace(',', "%2C")); - result.push(','); - result - }); - println!("{:?}", users); - return write!(f, "users/{}/recent-listens", users); - } Self::UserListenCount(user) => return write!(f, "user/{}/listen-count", user), Self::UserPlayingNow(user) => return write!(f, "user/{}/playing-now", user), Self::UserListens(user) => return write!(f, "user/{}/listens", user), diff --git a/src/raw/response.rs b/src/raw/response.rs index 57ee307..a2c7fec 100644 --- a/src/raw/response.rs +++ b/src/raw/response.rs @@ -141,43 +141,6 @@ response_type! { } } -// --------- users/{user_list}/recent-listens - -response_type! { - /// Response type for [`Client::users_recent_listens`](super::Client::users_recent_listens). - #[derive(Debug, Deserialize)] - pub struct UsersRecentListensResponse { - pub payload: UsersRecentListensPayload, - } -} - -/// Type of the [`UsersRecentListensResponse::payload`] field. -#[derive(Debug, Deserialize)] -pub struct UsersRecentListensPayload { - pub count: u64, - pub listens: Vec, - pub user_list: String, -} - -/// Type of the [`UsersRecentListensPayload::listens`] field. -#[derive(Debug, Deserialize)] -pub struct UsersRecentListensListen { - pub user_name: String, - pub inserted_at: String, - pub listened_at: i64, - pub recording_msid: String, - pub track_metadata: UsersRecentListensTrackMetadata, -} - -/// Type of the [`UsersRecentListensListen::track_metadata`] field. -#[derive(Debug, Deserialize)] -pub struct UsersRecentListensTrackMetadata { - pub artist_name: String, - pub track_name: String, - pub release_name: Option, - pub additional_info: HashMap, -} - // --------- user/{user_name}/listen-count response_type! { From a2c72110d7203f18020e3c94e22e146718d3e183 Mon Sep 17 00:00:00 2001 From: Koen Bolhuis Date: Mon, 16 Jan 2023 20:52:51 +0100 Subject: [PATCH 6/7] Update changelog --- CHANGELOG.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 296e347..7deb877 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,30 @@ # Changelog +## v0.6.0 (unreleased) + +- Updated response schemas to match the ListenBrainz API: + - `user/{user_name}/playing-now`: + - Added `UserPlayingNowPayload::playing_now`; + - Added `UserPlayingNowListen::playing_now`; + - Removed `UserPlayingNowListen::{user_name, inserted_at, recording_msid}. + - `user/{user_name}/listens`: + - Changed the type of `UserListensListen::inserted_at` from `String` to `i64`. + - `stats/sitewide/artists`: + - Removed `StatsSitewideArtistsPayload::time_ranges`; + - Added `StatsSitewideArtistsPayload::artists`; + - Removed `StatsSitewideArtistsTimeRange`; + - Removed `StatsSitewideArtistsArtist::artist_msid`. + - `stats/user/{user_name}/artist-map`: + - Changed the return type of `Client::stats_user_artist_map` from `Result` + to `Result, Error>`. + - `users/{user_list}/recent-listens`: + - Removed `Client::users_recent_listens`; + - Removed `UsersRecentListensResponse`; + - Removed `UsersRecentListensPayload`; + - Removed `UsersRecentListensListen`; + - Removed `UsersRecentListensTrackMetadata`; + - Removed `examples/users_recent_listens.rs`. + ## v0.5.0 (2022-12-05) - Made the `release` parameter of `ListenBrainz` methods optional ([#11], [@mgziminsky]). From 18f2a4e0475331d28d16ee00bb2b939f5e1dc4af Mon Sep 17 00:00:00 2001 From: Koen Bolhuis Date: Fri, 20 Jan 2023 09:56:24 +0100 Subject: [PATCH 7/7] Indicate breakage in changelog --- CHANGELOG.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7deb877..18799d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,8 @@ ## v0.6.0 (unreleased) -- Updated response schemas to match the ListenBrainz API: +- Updated response schemas to match the ListenBrainz API ([#12], [@cellularnetwork]): + - **These are breaking changes.** - `user/{user_name}/playing-now`: - Added `UserPlayingNowPayload::playing_now`; - Added `UserPlayingNowListen::playing_now`; @@ -25,10 +26,13 @@ - Removed `UsersRecentListensTrackMetadata`; - Removed `examples/users_recent_listens.rs`. +[#12]: https://github.com/InputUsername/listenbrainz-rs/pull/12 +[@cellularnetwork]: https://github.com/cellularnetwork + ## v0.5.0 (2022-12-05) - Made the `release` parameter of `ListenBrainz` methods optional ([#11], [@mgziminsky]). - - This is a breaking change. + - **This is a breaking change.** [#11]: https://github.com/InputUsername/listenbrainz-rs/pull/11 [@mgziminsky]: https://github.com/mgziminsky