using System.Net; using System.Threading.Tasks; using SpotifyAPI.Web.Http; using URLs = SpotifyAPI.Web.SpotifyUrls; namespace SpotifyAPI.Web { public class PlayerClient : APIClient, IPlayerClient { public PlayerClient(IAPIConnector apiConnector) : base(apiConnector) { } public async Task AddToQueue(PlayerAddToQueueRequest request) { Ensure.ArgumentNotNull(request, nameof(request)); var statusCode = await API.Post(URLs.PlayerQueue(), request.BuildQueryParams(), null).ConfigureAwait(false); return statusCode == HttpStatusCode.NoContent; } public Task GetQueue() { return API.Get(URLs.PlayerQueue()); } public Task GetAvailableDevices() { return API.Get(URLs.PlayerDevices()); } public Task GetCurrentlyPlaying(PlayerCurrentlyPlayingRequest request) { Ensure.ArgumentNotNull(request, nameof(request)); return API.Get(URLs.PlayerCurrentlyPlaying(), request.BuildQueryParams()); } public Task GetCurrentPlayback() { return API.Get(URLs.Player()); } public Task GetCurrentPlayback(PlayerCurrentPlaybackRequest request) { Ensure.ArgumentNotNull(request, nameof(request)); return API.Get(URLs.Player(), request.BuildQueryParams()); } public Task> GetRecentlyPlayed() { return API.Get>(URLs.PlayerRecentlyPlayed()); } public Task> GetRecentlyPlayed(PlayerRecentlyPlayedRequest request) { Ensure.ArgumentNotNull(request, nameof(request)); return API.Get>(URLs.PlayerRecentlyPlayed(), request.BuildQueryParams()); } public async Task PausePlayback() { var statusCode = await API.Put(URLs.PlayerPause(), null, null).ConfigureAwait(false); return statusCode == HttpStatusCode.NoContent; } public async Task PausePlayback(PlayerPausePlaybackRequest request) { Ensure.ArgumentNotNull(request, nameof(request)); var statusCode = await API.Put(URLs.PlayerPause(), request.BuildQueryParams(), null).ConfigureAwait(false); return statusCode == HttpStatusCode.NoContent; } public async Task ResumePlayback() { var statusCode = await API.Put(URLs.PlayerResume(), null, null).ConfigureAwait(false); return statusCode == HttpStatusCode.NoContent; } public async Task ResumePlayback(PlayerResumePlaybackRequest request) { Ensure.ArgumentNotNull(request, nameof(request)); var statusCode = await API .Put(URLs.PlayerResume(), request.BuildQueryParams(), request.BuildBodyParams()) .ConfigureAwait(false); return statusCode == HttpStatusCode.NoContent; } public async Task SeekTo(PlayerSeekToRequest request) { Ensure.ArgumentNotNull(request, nameof(request)); var statusCode = await API.Put(URLs.PlayerSeek(), request.BuildQueryParams(), null).ConfigureAwait(false); return statusCode == HttpStatusCode.NoContent; } public async Task SetRepeat(PlayerSetRepeatRequest request) { Ensure.ArgumentNotNull(request, nameof(request)); var statusCode = await API.Put(URLs.PlayerRepeat(), request.BuildQueryParams(), null).ConfigureAwait(false); return statusCode == HttpStatusCode.NoContent; } public async Task SetShuffle(PlayerShuffleRequest request) { Ensure.ArgumentNotNull(request, nameof(request)); var statusCode = await API.Put(URLs.PlayerShuffle(), request.BuildQueryParams(), null).ConfigureAwait(false); return statusCode == HttpStatusCode.NoContent; } public async Task SetVolume(PlayerVolumeRequest request) { Ensure.ArgumentNotNull(request, nameof(request)); var statusCode = await API.Put(URLs.PlayerVolume(), request.BuildQueryParams(), null).ConfigureAwait(false); return statusCode == HttpStatusCode.NoContent; } public async Task SkipNext() { var statusCode = await API.Post(URLs.PlayerNext(), null, null).ConfigureAwait(false); return statusCode == HttpStatusCode.NoContent; } public async Task SkipNext(PlayerSkipNextRequest request) { Ensure.ArgumentNotNull(request, nameof(request)); var statusCode = await API.Post(URLs.PlayerNext(), request.BuildQueryParams(), null).ConfigureAwait(false); return statusCode == HttpStatusCode.NoContent; } public async Task SkipPrevious() { var statusCode = await API.Post(URLs.PlayerPrevious(), null, null).ConfigureAwait(false); return statusCode == HttpStatusCode.NoContent; } public async Task SkipPrevious(PlayerSkipPreviousRequest request) { Ensure.ArgumentNotNull(request, nameof(request)); var statusCode = await API.Post(URLs.PlayerPrevious(), request.BuildQueryParams(), null).ConfigureAwait(false); return statusCode == HttpStatusCode.NoContent; } public async Task TransferPlayback(PlayerTransferPlaybackRequest request) { Ensure.ArgumentNotNull(request, nameof(request)); var statusCode = await API.Put(URLs.Player(), null, request.BuildBodyParams()).ConfigureAwait(false); return statusCode == HttpStatusCode.NoContent; } } }