using System.Net; using System.Collections.Generic; using System.Threading.Tasks; using SpotifyAPI.Web.Http; using System.Threading; namespace SpotifyAPI.Web { public class LibraryClient : APIClient, ILibraryClient { public LibraryClient(IAPIConnector apiConnector) : base(apiConnector) { } public Task> CheckAlbums(LibraryCheckAlbumsRequest request, CancellationToken cancel = default) { Ensure.ArgumentNotNull(request, nameof(request)); return API.Get>(SpotifyUrls.LibraryAlbumsContains(), request.BuildQueryParams(), cancel); } public Task> CheckShows(LibraryCheckShowsRequest request, CancellationToken cancel = default) { Ensure.ArgumentNotNull(request, nameof(request)); return API.Get>(SpotifyUrls.LibraryShowsContains(), request.BuildQueryParams(), cancel); } public Task> CheckTracks(LibraryCheckTracksRequest request, CancellationToken cancel = default) { Ensure.ArgumentNotNull(request, nameof(request)); return API.Get>(SpotifyUrls.LibraryTracksContains(), request.BuildQueryParams(), cancel); } public Task> CheckEpisodes(LibraryCheckEpisodesRequest request, CancellationToken cancel = default) { Ensure.ArgumentNotNull(request, nameof(request)); return API.Get>(SpotifyUrls.LibraryEpisodesContains(), request.BuildQueryParams(), cancel); } public Task> GetAlbums(CancellationToken cancel = default) { return API.Get>(SpotifyUrls.LibraryAlbums(), cancel); } public Task> GetAlbums(LibraryAlbumsRequest request, CancellationToken cancel = default) { Ensure.ArgumentNotNull(request, nameof(request)); return API.Get>(SpotifyUrls.LibraryAlbums(), request.BuildQueryParams(), cancel); } public Task> GetShows(CancellationToken cancel = default) { return API.Get>(SpotifyUrls.LibraryShows(), cancel); } public Task> GetShows(LibraryShowsRequest request, CancellationToken cancel = default) { Ensure.ArgumentNotNull(request, nameof(request)); return API.Get>(SpotifyUrls.LibraryShows(), request.BuildQueryParams(), cancel); } public Task> GetTracks(CancellationToken cancel = default) { return API.Get>(SpotifyUrls.LibraryTracks(), cancel); } public Task> GetTracks(LibraryTracksRequest request, CancellationToken cancel = default) { Ensure.ArgumentNotNull(request, nameof(request)); return API.Get>(SpotifyUrls.LibraryTracks(), request.BuildQueryParams(), cancel); } public Task> GetEpisodes(CancellationToken cancel = default) { return API.Get>(SpotifyUrls.LibraryEpisodes(), cancel); } public Task> GetEpisodes(LibraryEpisodesRequest request, CancellationToken cancel = default) { Ensure.ArgumentNotNull(request, nameof(request)); return API.Get>(SpotifyUrls.LibraryEpisodes(), request.BuildQueryParams(), cancel); } public async Task RemoveAlbums(LibraryRemoveAlbumsRequest request, CancellationToken cancel = default) { Ensure.ArgumentNotNull(request, nameof(request)); var statusCode = await API.Delete(SpotifyUrls.LibraryAlbums(), request.BuildQueryParams(), null, cancel).ConfigureAwait(false); return statusCode == HttpStatusCode.OK; } public async Task RemoveShows(LibraryRemoveShowsRequest request, CancellationToken cancel = default) { Ensure.ArgumentNotNull(request, nameof(request)); var statusCode = await API.Delete(SpotifyUrls.LibraryShows(), null, request.BuildBodyParams(), cancel).ConfigureAwait(false); return statusCode == HttpStatusCode.OK; } public async Task RemoveTracks(LibraryRemoveTracksRequest request, CancellationToken cancel = default) { Ensure.ArgumentNotNull(request, nameof(request)); var statusCode = await API.Delete(SpotifyUrls.LibraryTracks(), null, request.BuildBodyParams(), cancel).ConfigureAwait(false); return statusCode == HttpStatusCode.OK; } public async Task RemoveEpisodes(LibraryRemoveEpisodesRequest request, CancellationToken cancel = default) { Ensure.ArgumentNotNull(request, nameof(request)); var statusCode = await API.Delete(SpotifyUrls.LibraryEpisodes(), null, request.BuildBodyParams(), cancel).ConfigureAwait(false); return statusCode == HttpStatusCode.OK; } public async Task SaveAlbums(LibrarySaveAlbumsRequest request, CancellationToken cancel = default) { Ensure.ArgumentNotNull(request, nameof(request)); var statusCode = await API.Put(SpotifyUrls.LibraryAlbums(), request.BuildQueryParams(), null, cancel).ConfigureAwait(false); return statusCode == HttpStatusCode.OK; } public async Task SaveShows(LibrarySaveShowsRequest request, CancellationToken cancel = default) { Ensure.ArgumentNotNull(request, nameof(request)); var statusCode = await API.Put(SpotifyUrls.LibraryShows(), request.BuildQueryParams(), null, cancel).ConfigureAwait(false); return statusCode == HttpStatusCode.OK; } public async Task SaveTracks(LibrarySaveTracksRequest request, CancellationToken cancel = default) { Ensure.ArgumentNotNull(request, nameof(request)); var statusCode = await API.Put(SpotifyUrls.LibraryTracks(), request.BuildQueryParams(), null, cancel).ConfigureAwait(false); return statusCode == HttpStatusCode.OK; } public async Task SaveEpisodes(LibrarySaveEpisodesRequest request, CancellationToken cancel = default) { Ensure.ArgumentNotNull(request, nameof(request)); var statusCode = await API.Put(SpotifyUrls.LibraryEpisodes(), request.BuildQueryParams(), null, cancel).ConfigureAwait(false); return statusCode == HttpStatusCode.OK; } } }