using System.Net; using System.Collections.Generic; using System.Threading.Tasks; using SpotifyAPI.Web.Http; using URLs = SpotifyAPI.Web.SpotifyUrls; using System.Threading; namespace SpotifyAPI.Web { public class FollowClient : APIClient, IFollowClient { public FollowClient(IAPIConnector apiConnector) : base(apiConnector) { } public Task> CheckCurrentUser(FollowCheckCurrentUserRequest request, CancellationToken cancel = default) { Ensure.ArgumentNotNull(request, nameof(request)); return API.Get>(URLs.CurrentUserFollowerContains(), request.BuildQueryParams(), cancel); } public Task> CheckPlaylist(string playlistId, FollowCheckPlaylistRequest request, CancellationToken cancel = default) { Ensure.ArgumentNotNullOrEmptyString(playlistId, nameof(playlistId)); Ensure.ArgumentNotNull(request, nameof(request)); return API.Get>(URLs.PlaylistFollowersContains(playlistId), request.BuildQueryParams(), cancel); } public async Task Follow(FollowRequest request, CancellationToken cancel = default) { Ensure.ArgumentNotNull(request, nameof(request)); var statusCode = await API .Put(URLs.CurrentUserFollower(), request.BuildQueryParams(), request.BuildBodyParams(), cancel) .ConfigureAwait(false); return statusCode == HttpStatusCode.NoContent; } public async Task FollowPlaylist(string playlistId, CancellationToken cancel = default) { Ensure.ArgumentNotNullOrEmptyString(playlistId, nameof(playlistId)); var statusCode = await API .Put(URLs.PlaylistFollowers(playlistId), null, null, cancel) .ConfigureAwait(false); return statusCode == HttpStatusCode.OK; } public async Task FollowPlaylist(string playlistId, FollowPlaylistRequest request, CancellationToken cancel = default) { Ensure.ArgumentNotNullOrEmptyString(playlistId, nameof(playlistId)); Ensure.ArgumentNotNull(request, nameof(request)); var statusCode = await API .Put(URLs.PlaylistFollowers(playlistId), null, request.BuildBodyParams(), cancel) .ConfigureAwait(false); return statusCode == HttpStatusCode.OK; } public Task OfCurrentUser(CancellationToken cancel = default) { var request = new FollowOfCurrentUserRequest(); return OfCurrentUser(request, cancel); } public Task OfCurrentUser(FollowOfCurrentUserRequest request, CancellationToken cancel = default) { Ensure.ArgumentNotNull(request, nameof(request)); return API.Get(URLs.CurrentUserFollower(), request.BuildQueryParams(), cancel); } public async Task Unfollow(UnfollowRequest request, CancellationToken cancel = default) { Ensure.ArgumentNotNull(request, nameof(request)); var statusCode = await API .Delete(URLs.CurrentUserFollower(), request.BuildQueryParams(), request.BuildBodyParams(), cancel) .ConfigureAwait(false); return statusCode == HttpStatusCode.NoContent; } public async Task UnfollowPlaylist(string playlistId, CancellationToken cancel = default) { Ensure.ArgumentNotNullOrEmptyString(playlistId, nameof(playlistId)); var statusCode = await API .Delete(URLs.PlaylistFollowers(playlistId), null, null, cancel) .ConfigureAwait(false); return statusCode == HttpStatusCode.OK; } } }