Merge branch 'playlist_change_28_02_19'

This commit is contained in:
Jonas Dellinger 2019-03-16 14:52:34 +01:00
commit 278927f704
2 changed files with 462 additions and 4 deletions

View File

@ -1319,6 +1319,7 @@ namespace SpotifyAPI.Web
/// <param name="market">An ISO 3166-1 alpha-2 country code. Provide this parameter if you want to apply Track Relinking.</param> /// <param name="market">An ISO 3166-1 alpha-2 country code. Provide this parameter if you want to apply Track Relinking.</param>
/// <returns></returns> /// <returns></returns>
/// <remarks>AUTH NEEDED</remarks> /// <remarks>AUTH NEEDED</remarks>
[Obsolete("Calling GetPlaylist with a userId is deprecated, remove the parameter")]
public FullPlaylist GetPlaylist(string userId, string playlistId, string fields = "", string market = "") public FullPlaylist GetPlaylist(string userId, string playlistId, string fields = "", string market = "")
{ {
if (!UseAuth) if (!UseAuth)
@ -1326,6 +1327,24 @@ namespace SpotifyAPI.Web
return DownloadData<FullPlaylist>(_builder.GetPlaylist(userId, playlistId, fields, market)); return DownloadData<FullPlaylist>(_builder.GetPlaylist(userId, playlistId, fields, market));
} }
/// <summary>
/// Get a playlist owned by a Spotify user.
/// </summary>
/// <param name="playlistId">The Spotify ID for the playlist.</param>
/// <param name="fields">
/// Filters for the query: a comma-separated list of the fields to return. If omitted, all fields are
/// returned.
/// </param>
/// <param name="market">An ISO 3166-1 alpha-2 country code. Provide this parameter if you want to apply Track Relinking.</param>
/// <returns></returns>
/// <remarks>AUTH NEEDED</remarks>
public FullPlaylist GetPlaylist(string playlistId, string fields = "", string market = "")
{
if (!UseAuth)
throw new InvalidOperationException("Auth is required for GetPlaylist");
return DownloadData<FullPlaylist>(_builder.GetPlaylist(playlistId, fields, market));
}
/// <summary> /// <summary>
/// Get a playlist owned by a Spotify user asynchronously. /// Get a playlist owned by a Spotify user asynchronously.
/// </summary> /// </summary>
@ -1338,6 +1357,7 @@ namespace SpotifyAPI.Web
/// <param name="market">An ISO 3166-1 alpha-2 country code. Provide this parameter if you want to apply Track Relinking.</param> /// <param name="market">An ISO 3166-1 alpha-2 country code. Provide this parameter if you want to apply Track Relinking.</param>
/// <returns></returns> /// <returns></returns>
/// <remarks>AUTH NEEDED</remarks> /// <remarks>AUTH NEEDED</remarks>
[Obsolete("Calling GetPlaylist with a userId is deprecated, remove the parameter")]
public Task<FullPlaylist> GetPlaylistAsync(string userId, string playlistId, string fields = "", string market = "") public Task<FullPlaylist> GetPlaylistAsync(string userId, string playlistId, string fields = "", string market = "")
{ {
if (!UseAuth) if (!UseAuth)
@ -1345,6 +1365,24 @@ namespace SpotifyAPI.Web
return DownloadDataAsync<FullPlaylist>(_builder.GetPlaylist(userId, playlistId, fields, market)); return DownloadDataAsync<FullPlaylist>(_builder.GetPlaylist(userId, playlistId, fields, market));
} }
/// <summary>
/// Get a playlist owned by a Spotify user asynchronously.
/// </summary>
/// <param name="playlistId">The Spotify ID for the playlist.</param>
/// <param name="fields">
/// Filters for the query: a comma-separated list of the fields to return. If omitted, all fields are
/// returned.
/// </param>
/// <param name="market">An ISO 3166-1 alpha-2 country code. Provide this parameter if you want to apply Track Relinking.</param>
/// <returns></returns>
/// <remarks>AUTH NEEDED</remarks>
public Task<FullPlaylist> GetPlaylistAsync(string playlistId, string fields = "", string market = "")
{
if (!UseAuth)
throw new InvalidOperationException("Auth is required for GetPlaylist");
return DownloadDataAsync<FullPlaylist>(_builder.GetPlaylist(playlistId, fields, market));
}
/// <summary> /// <summary>
/// Get full details of the tracks of a playlist owned by a Spotify user. /// Get full details of the tracks of a playlist owned by a Spotify user.
/// </summary> /// </summary>
@ -1359,6 +1397,7 @@ namespace SpotifyAPI.Web
/// <param name="market">An ISO 3166-1 alpha-2 country code. Provide this parameter if you want to apply Track Relinking.</param> /// <param name="market">An ISO 3166-1 alpha-2 country code. Provide this parameter if you want to apply Track Relinking.</param>
/// <returns></returns> /// <returns></returns>
/// <remarks>AUTH NEEDED</remarks> /// <remarks>AUTH NEEDED</remarks>
[Obsolete("Calling GetPlaylistTracks with a userId is deprecated, remove the parameter")]
public Paging<PlaylistTrack> GetPlaylistTracks(string userId, string playlistId, string fields = "", int limit = 100, int offset = 0, string market = "") public Paging<PlaylistTrack> GetPlaylistTracks(string userId, string playlistId, string fields = "", int limit = 100, int offset = 0, string market = "")
{ {
if (!UseAuth) if (!UseAuth)
@ -1366,6 +1405,26 @@ namespace SpotifyAPI.Web
return DownloadData<Paging<PlaylistTrack>>(_builder.GetPlaylistTracks(userId, playlistId, fields, limit, offset, market)); return DownloadData<Paging<PlaylistTrack>>(_builder.GetPlaylistTracks(userId, playlistId, fields, limit, offset, market));
} }
/// <summary>
/// Get full details of the tracks of a playlist owned by a Spotify user.
/// </summary>
/// <param name="playlistId">The Spotify ID for the playlist.</param>
/// <param name="fields">
/// Filters for the query: a comma-separated list of the fields to return. If omitted, all fields are
/// returned.
/// </param>
/// <param name="limit">The maximum number of tracks to return. Default: 100. Minimum: 1. Maximum: 100.</param>
/// <param name="offset">The index of the first object to return. Default: 0 (i.e., the first object)</param>
/// <param name="market">An ISO 3166-1 alpha-2 country code. Provide this parameter if you want to apply Track Relinking.</param>
/// <returns></returns>
/// <remarks>AUTH NEEDED</remarks>
public Paging<PlaylistTrack> GetPlaylistTracks(string playlistId, string fields = "", int limit = 100, int offset = 0, string market = "")
{
if (!UseAuth)
throw new InvalidOperationException("Auth is required for GetPlaylistTracks");
return DownloadData<Paging<PlaylistTrack>>(_builder.GetPlaylistTracks(playlistId, fields, limit, offset, market));
}
/// <summary> /// <summary>
/// Get full details of the tracks of a playlist owned by a Spotify user asyncronously. /// Get full details of the tracks of a playlist owned by a Spotify user asyncronously.
/// </summary> /// </summary>
@ -1380,6 +1439,7 @@ namespace SpotifyAPI.Web
/// <param name="market">An ISO 3166-1 alpha-2 country code. Provide this parameter if you want to apply Track Relinking.</param> /// <param name="market">An ISO 3166-1 alpha-2 country code. Provide this parameter if you want to apply Track Relinking.</param>
/// <returns></returns> /// <returns></returns>
/// <remarks>AUTH NEEDED</remarks> /// <remarks>AUTH NEEDED</remarks>
[Obsolete("Calling GetPlaylistTracks with a userId is deprecated, remove the parameter")]
public Task<Paging<PlaylistTrack>> GetPlaylistTracksAsync(string userId, string playlistId, string fields = "", int limit = 100, int offset = 0, string market = "") public Task<Paging<PlaylistTrack>> GetPlaylistTracksAsync(string userId, string playlistId, string fields = "", int limit = 100, int offset = 0, string market = "")
{ {
if (!UseAuth) if (!UseAuth)
@ -1387,6 +1447,27 @@ namespace SpotifyAPI.Web
return DownloadDataAsync<Paging<PlaylistTrack>>(_builder.GetPlaylistTracks(userId, playlistId, fields, limit, offset, market)); return DownloadDataAsync<Paging<PlaylistTrack>>(_builder.GetPlaylistTracks(userId, playlistId, fields, limit, offset, market));
} }
/// <summary>
/// Get full details of the tracks of a playlist owned by a Spotify user asyncronously.
/// </summary>
/// <param name="playlistId">The Spotify ID for the playlist.</param>
/// <param name="fields">
/// Filters for the query: a comma-separated list of the fields to return. If omitted, all fields are
/// returned.
/// </param>
/// <param name="limit">The maximum number of tracks to return. Default: 100. Minimum: 1. Maximum: 100.</param>
/// <param name="offset">The index of the first object to return. Default: 0 (i.e., the first object)</param>
/// <param name="market">An ISO 3166-1 alpha-2 country code. Provide this parameter if you want to apply Track Relinking.</param>
/// <returns></returns>
/// <remarks>AUTH NEEDED</remarks>
[Obsolete("Calling GetPlaylistTracks with a userId is deprecated, remove the parameter")]
public Task<Paging<PlaylistTrack>> GetPlaylistTracksAsync(string playlistId, string fields = "", int limit = 100, int offset = 0, string market = "")
{
if (!UseAuth)
throw new InvalidOperationException("Auth is required for GetPlaylistTracks");
return DownloadDataAsync<Paging<PlaylistTrack>>(_builder.GetPlaylistTracks(playlistId, fields, limit, offset, market));
}
/// <summary> /// <summary>
/// Create a playlist for a Spotify user. (The playlist will be empty until you add tracks.) /// Create a playlist for a Spotify user. (The playlist will be empty until you add tracks.)
/// </summary> /// </summary>
@ -1457,6 +1538,7 @@ namespace SpotifyAPI.Web
/// <param name="newDescription">Value for playlist description as displayed in Spotify Clients and in the Web API.</param> /// <param name="newDescription">Value for playlist description as displayed in Spotify Clients and in the Web API.</param>
/// <returns></returns> /// <returns></returns>
/// <remarks>AUTH NEEDED</remarks> /// <remarks>AUTH NEEDED</remarks>
[Obsolete("Calling UpdatePlaylist with a userId is deprecated, remove the parameter")]
public ErrorResponse UpdatePlaylist(string userId, string playlistId, string newName = null, bool? newPublic = null, bool? newCollaborative = null, string newDescription = null) public ErrorResponse UpdatePlaylist(string userId, string playlistId, string newName = null, bool? newPublic = null, bool? newCollaborative = null, string newDescription = null)
{ {
JObject body = new JObject(); JObject body = new JObject();
@ -1471,6 +1553,31 @@ namespace SpotifyAPI.Web
return UploadData<ErrorResponse>(_builder.UpdatePlaylist(userId, playlistId), body.ToString(Formatting.None), "PUT") ?? new ErrorResponse(); return UploadData<ErrorResponse>(_builder.UpdatePlaylist(userId, playlistId), body.ToString(Formatting.None), "PUT") ?? new ErrorResponse();
} }
/// <summary>
/// Change a playlists name and public/private state. (The user must, of course, own the playlist.)
/// </summary>
/// <param name="playlistId">The Spotify ID for the playlist.</param>
/// <param name="newName">The new name for the playlist, for example "My New Playlist Title".</param>
/// <param name="newPublic">If true the playlist will be public, if false it will be private.</param>
/// <param name="newCollaborative">If true the playlist will become collaborative and other users will be able to modify the playlist in their Spotify client.
/// Note: You can only set collaborative to true on non-public playlists.</param>
/// <param name="newDescription">Value for playlist description as displayed in Spotify Clients and in the Web API.</param>
/// <returns></returns>
/// <remarks>AUTH NEEDED</remarks>
public ErrorResponse UpdatePlaylist(string playlistId, string newName = null, bool? newPublic = null, bool? newCollaborative = null, string newDescription = null)
{
JObject body = new JObject();
if (newName != null)
body.Add("name", newName);
if (newPublic != null)
body.Add("public", newPublic);
if (newCollaborative != null)
body.Add("collaborative", newCollaborative);
if (newDescription != null)
body.Add("description", newDescription);
return UploadData<ErrorResponse>(_builder.UpdatePlaylist(playlistId), body.ToString(Formatting.None), "PUT") ?? new ErrorResponse();
}
/// <summary> /// <summary>
/// Change a playlists name and public/private state asynchronously. (The user must, of course, own the playlist.) /// Change a playlists name and public/private state asynchronously. (The user must, of course, own the playlist.)
/// </summary> /// </summary>
@ -1482,6 +1589,7 @@ namespace SpotifyAPI.Web
/// <param name="newDescription">Value for playlist description as displayed in Spotify Clients and in the Web API.</param> /// <param name="newDescription">Value for playlist description as displayed in Spotify Clients and in the Web API.</param>
/// <returns></returns> /// <returns></returns>
/// <remarks>AUTH NEEDED</remarks> /// <remarks>AUTH NEEDED</remarks>
[Obsolete("Calling UpdatePlaylist with a userId is deprecated, remove the parameter")]
public async Task<ErrorResponse> UpdatePlaylistAsync(string userId, string playlistId, string newName = null, bool? newPublic = null, bool? newCollaborative = null, string newDescription = null) public async Task<ErrorResponse> UpdatePlaylistAsync(string userId, string playlistId, string newName = null, bool? newPublic = null, bool? newCollaborative = null, string newDescription = null)
{ {
JObject body = new JObject(); JObject body = new JObject();
@ -1496,6 +1604,30 @@ namespace SpotifyAPI.Web
return (await UploadDataAsync<ErrorResponse>(_builder.UpdatePlaylist(userId, playlistId), body.ToString(Formatting.None), "PUT").ConfigureAwait(false)) ?? new ErrorResponse(); return (await UploadDataAsync<ErrorResponse>(_builder.UpdatePlaylist(userId, playlistId), body.ToString(Formatting.None), "PUT").ConfigureAwait(false)) ?? new ErrorResponse();
} }
/// <summary>
/// Change a playlists name and public/private state asynchronously. (The user must, of course, own the playlist.)
/// </summary>
/// <param name="playlistId">The Spotify ID for the playlist.</param>
/// <param name="newName">The new name for the playlist, for example "My New Playlist Title".</param>
/// <param name="newPublic">If true the playlist will be public, if false it will be private.</param>
/// <param name="newCollaborative">If true the playlist will become collaborative and other users will be able to modify the playlist in their Spotify client. Note: You can only set collaborative to true on non-public playlists.</param>
/// <param name="newDescription">Value for playlist description as displayed in Spotify Clients and in the Web API.</param>
/// <returns></returns>
/// <remarks>AUTH NEEDED</remarks>
public async Task<ErrorResponse> UpdatePlaylistAsync(string playlistId, string newName = null, bool? newPublic = null, bool? newCollaborative = null, string newDescription = null)
{
JObject body = new JObject();
if (newName != null)
body.Add("name", newName);
if (newPublic != null)
body.Add("public", newPublic);
if (newCollaborative != null)
body.Add("collaborative", newCollaborative);
if (newDescription != null)
body.Add("description", newDescription);
return (await UploadDataAsync<ErrorResponse>(_builder.UpdatePlaylist(playlistId), body.ToString(Formatting.None), "PUT").ConfigureAwait(false)) ?? new ErrorResponse();
}
/// <summary> /// <summary>
/// Change a playlists name and public/private state. (The user must, of course, own the playlist.) /// Change a playlists name and public/private state. (The user must, of course, own the playlist.)
/// </summary> /// </summary>
@ -1543,7 +1675,8 @@ namespace SpotifyAPI.Web
/// <remarks>AUTH NEEDED</remarks> /// <remarks>AUTH NEEDED</remarks>
public async Task<ErrorResponse> UploadPlaylistImageAsync(string playlistId, string base64EncodedJpgImage) public async Task<ErrorResponse> UploadPlaylistImageAsync(string playlistId, string base64EncodedJpgImage)
{ {
return (await UploadDataAsync<ErrorResponse>(_builder.UploadPlaylistImage(playlistId), base64EncodedJpgImage, "PUT").ConfigureAwait(false)) ?? new ErrorResponse(); return (await UploadDataAsync<ErrorResponse>(_builder.UploadPlaylistImage(playlistId),
base64EncodedJpgImage, "PUT").ConfigureAwait(false)) ?? new ErrorResponse();
} }
/// <summary> /// <summary>
@ -1555,6 +1688,7 @@ namespace SpotifyAPI.Web
/// <param name="uris">A list of Spotify track URIs to set. A maximum of 100 tracks can be set in one request.</param> /// <param name="uris">A list of Spotify track URIs to set. A maximum of 100 tracks can be set in one request.</param>
/// <returns></returns> /// <returns></returns>
/// <remarks>AUTH NEEDED</remarks> /// <remarks>AUTH NEEDED</remarks>
[Obsolete("Calling ReplacePlaylistTracks with a userId is deprecated, remove the parameter")]
public ErrorResponse ReplacePlaylistTracks(string userId, string playlistId, List<string> uris) public ErrorResponse ReplacePlaylistTracks(string userId, string playlistId, List<string> uris)
{ {
JObject body = new JObject JObject body = new JObject
@ -1564,6 +1698,23 @@ namespace SpotifyAPI.Web
return UploadData<ErrorResponse>(_builder.ReplacePlaylistTracks(userId, playlistId), body.ToString(Formatting.None), "PUT") ?? new ErrorResponse(); return UploadData<ErrorResponse>(_builder.ReplacePlaylistTracks(userId, playlistId), body.ToString(Formatting.None), "PUT") ?? new ErrorResponse();
} }
/// <summary>
/// Replace all the tracks in a playlist, overwriting its existing tracks. This powerful request can be useful for
/// replacing tracks, re-ordering existing tracks, or clearing the playlist.
/// </summary>
/// <param name="playlistId">The Spotify ID for the playlist.</param>
/// <param name="uris">A list of Spotify track URIs to set. A maximum of 100 tracks can be set in one request.</param>
/// <returns></returns>
/// <remarks>AUTH NEEDED</remarks>
public ErrorResponse ReplacePlaylistTracks(string playlistId, List<string> uris)
{
JObject body = new JObject
{
{"uris", new JArray(uris.Take(100))}
};
return UploadData<ErrorResponse>(_builder.ReplacePlaylistTracks(playlistId), body.ToString(Formatting.None), "PUT") ?? new ErrorResponse();
}
/// <summary> /// <summary>
/// Replace all the tracks in a playlist asynchronously, overwriting its existing tracks. This powerful request can be useful for /// Replace all the tracks in a playlist asynchronously, overwriting its existing tracks. This powerful request can be useful for
/// replacing tracks, re-ordering existing tracks, or clearing the playlist. /// replacing tracks, re-ordering existing tracks, or clearing the playlist.
@ -1573,6 +1724,7 @@ namespace SpotifyAPI.Web
/// <param name="uris">A list of Spotify track URIs to set. A maximum of 100 tracks can be set in one request.</param> /// <param name="uris">A list of Spotify track URIs to set. A maximum of 100 tracks can be set in one request.</param>
/// <returns></returns> /// <returns></returns>
/// <remarks>AUTH NEEDED</remarks> /// <remarks>AUTH NEEDED</remarks>
[Obsolete("Calling ReplacePlaylistTracks with a userId is deprecated, remove the parameter")]
public async Task<ErrorResponse> ReplacePlaylistTracksAsync(string userId, string playlistId, List<string> uris) public async Task<ErrorResponse> ReplacePlaylistTracksAsync(string userId, string playlistId, List<string> uris)
{ {
JObject body = new JObject JObject body = new JObject
@ -1582,6 +1734,23 @@ namespace SpotifyAPI.Web
return await (UploadDataAsync<ErrorResponse>(_builder.ReplacePlaylistTracks(userId, playlistId), body.ToString(Formatting.None), "PUT").ConfigureAwait(false)) ?? new ErrorResponse(); return await (UploadDataAsync<ErrorResponse>(_builder.ReplacePlaylistTracks(userId, playlistId), body.ToString(Formatting.None), "PUT").ConfigureAwait(false)) ?? new ErrorResponse();
} }
/// <summary>
/// Replace all the tracks in a playlist asynchronously, overwriting its existing tracks. This powerful request can be useful for
/// replacing tracks, re-ordering existing tracks, or clearing the playlist.
/// </summary>
/// <param name="playlistId">The Spotify ID for the playlist.</param>
/// <param name="uris">A list of Spotify track URIs to set. A maximum of 100 tracks can be set in one request.</param>
/// <returns></returns>
/// <remarks>AUTH NEEDED</remarks>
public async Task<ErrorResponse> ReplacePlaylistTracksAsync(string playlistId, List<string> uris)
{
JObject body = new JObject
{
{"uris", new JArray(uris.Take(100))}
};
return await (UploadDataAsync<ErrorResponse>(_builder.ReplacePlaylistTracks(playlistId), body.ToString(Formatting.None), "PUT").ConfigureAwait(false)) ?? new ErrorResponse();
}
/// <summary> /// <summary>
/// Remove one or more tracks from a users playlist. /// Remove one or more tracks from a users playlist.
/// </summary> /// </summary>
@ -1593,6 +1762,7 @@ namespace SpotifyAPI.Web
/// </param> /// </param>
/// <returns></returns> /// <returns></returns>
/// <remarks>AUTH NEEDED</remarks> /// <remarks>AUTH NEEDED</remarks>
[Obsolete("Calling RemovePlaylistTracks with a userId is deprecated, remove the parameter")]
public ErrorResponse RemovePlaylistTracks(string userId, string playlistId, List<DeleteTrackUri> uris) public ErrorResponse RemovePlaylistTracks(string userId, string playlistId, List<DeleteTrackUri> uris)
{ {
JObject body = new JObject JObject body = new JObject
@ -1602,6 +1772,25 @@ namespace SpotifyAPI.Web
return UploadData<ErrorResponse>(_builder.RemovePlaylistTracks(userId, playlistId, uris), body.ToString(Formatting.None), "DELETE") ?? new ErrorResponse(); return UploadData<ErrorResponse>(_builder.RemovePlaylistTracks(userId, playlistId, uris), body.ToString(Formatting.None), "DELETE") ?? new ErrorResponse();
} }
/// <summary>
/// Remove one or more tracks from a users playlist.
/// </summary>
/// <param name="playlistId">The Spotify ID for the playlist.</param>
/// <param name="uris">
/// array of objects containing Spotify URI strings (and their position in the playlist). A maximum of
/// 100 objects can be sent at once.
/// </param>
/// <returns></returns>
/// <remarks>AUTH NEEDED</remarks>
public ErrorResponse RemovePlaylistTracks(string playlistId, List<DeleteTrackUri> uris)
{
JObject body = new JObject
{
{"tracks", JArray.FromObject(uris.Take(100))}
};
return UploadData<ErrorResponse>(_builder.RemovePlaylistTracks(playlistId, uris), body.ToString(Formatting.None), "DELETE") ?? new ErrorResponse();
}
/// <summary> /// <summary>
/// Remove one or more tracks from a users playlist asynchronously. /// Remove one or more tracks from a users playlist asynchronously.
/// </summary> /// </summary>
@ -1613,6 +1802,7 @@ namespace SpotifyAPI.Web
/// </param> /// </param>
/// <returns></returns> /// <returns></returns>
/// <remarks>AUTH NEEDED</remarks> /// <remarks>AUTH NEEDED</remarks>
[Obsolete("Calling RemovePlaylistTracks with a userId is deprecated, remove the parameter")]
public async Task<ErrorResponse> RemovePlaylistTracksAsync(string userId, string playlistId, List<DeleteTrackUri> uris) public async Task<ErrorResponse> RemovePlaylistTracksAsync(string userId, string playlistId, List<DeleteTrackUri> uris)
{ {
JObject body = new JObject JObject body = new JObject
@ -1622,6 +1812,25 @@ namespace SpotifyAPI.Web
return await (UploadDataAsync<ErrorResponse>(_builder.RemovePlaylistTracks(userId, playlistId, uris), body.ToString(Formatting.None), "DELETE").ConfigureAwait(false)) ?? new ErrorResponse(); return await (UploadDataAsync<ErrorResponse>(_builder.RemovePlaylistTracks(userId, playlistId, uris), body.ToString(Formatting.None), "DELETE").ConfigureAwait(false)) ?? new ErrorResponse();
} }
/// <summary>
/// Remove one or more tracks from a users playlist asynchronously.
/// </summary>
/// <param name="playlistId">The Spotify ID for the playlist.</param>
/// <param name="uris">
/// array of objects containing Spotify URI strings (and their position in the playlist). A maximum of
/// 100 objects can be sent at once.
/// </param>
/// <returns></returns>
/// <remarks>AUTH NEEDED</remarks>
public async Task<ErrorResponse> RemovePlaylistTracksAsync(string playlistId, List<DeleteTrackUri> uris)
{
JObject body = new JObject
{
{"tracks", JArray.FromObject(uris.Take(100))}
};
return await (UploadDataAsync<ErrorResponse>(_builder.RemovePlaylistTracks(playlistId, uris), body.ToString(Formatting.None), "DELETE").ConfigureAwait(false)) ?? new ErrorResponse();
}
/// <summary> /// <summary>
/// Remove a track from a users playlist. /// Remove a track from a users playlist.
/// </summary> /// </summary>
@ -1630,9 +1839,22 @@ namespace SpotifyAPI.Web
/// <param name="uri">Spotify URI</param> /// <param name="uri">Spotify URI</param>
/// <returns></returns> /// <returns></returns>
/// <remarks>AUTH NEEDED</remarks> /// <remarks>AUTH NEEDED</remarks>
[Obsolete("Calling RemovePlaylistTrack with a userId is deprecated, remove the parameter")]
public ErrorResponse RemovePlaylistTrack(string userId, string playlistId, DeleteTrackUri uri) public ErrorResponse RemovePlaylistTrack(string userId, string playlistId, DeleteTrackUri uri)
{ {
return RemovePlaylistTracks(userId, playlistId, new List<DeleteTrackUri> { uri }); return RemovePlaylistTracks(playlistId, new List<DeleteTrackUri> { uri });
}
/// <summary>
/// Remove a track from a users playlist.
/// </summary>
/// <param name="playlistId">The Spotify ID for the playlist.</param>
/// <param name="uri">Spotify URI</param>
/// <returns></returns>
/// <remarks>AUTH NEEDED</remarks>
public ErrorResponse RemovePlaylistTrack(string playlistId, DeleteTrackUri uri)
{
return RemovePlaylistTracks(playlistId, new List<DeleteTrackUri> { uri });
} }
/// <summary> /// <summary>
@ -1643,9 +1865,22 @@ namespace SpotifyAPI.Web
/// <param name="uri">Spotify URI</param> /// <param name="uri">Spotify URI</param>
/// <returns></returns> /// <returns></returns>
/// <remarks>AUTH NEEDED</remarks> /// <remarks>AUTH NEEDED</remarks>
[Obsolete("Calling RemovePlaylistTrack with a userId is deprecated, remove the parameter")]
public Task<ErrorResponse> RemovePlaylistTrackAsync(string userId, string playlistId, DeleteTrackUri uri) public Task<ErrorResponse> RemovePlaylistTrackAsync(string userId, string playlistId, DeleteTrackUri uri)
{ {
return RemovePlaylistTracksAsync(userId, playlistId, new List<DeleteTrackUri> { uri }); return RemovePlaylistTracksAsync(playlistId, new List<DeleteTrackUri> { uri });
}
/// <summary>
/// Remove a track from a users playlist asynchronously.
/// </summary>
/// <param name="playlistId">The Spotify ID for the playlist.</param>
/// <param name="uri">Spotify URI</param>
/// <returns></returns>
/// <remarks>AUTH NEEDED</remarks>
public Task<ErrorResponse> RemovePlaylistTrackAsync(string playlistId, DeleteTrackUri uri)
{
return RemovePlaylistTracksAsync(playlistId, new List<DeleteTrackUri> { uri });
} }
/// <summary> /// <summary>
@ -1657,6 +1892,7 @@ namespace SpotifyAPI.Web
/// <param name="position">The position to insert the tracks, a zero-based index</param> /// <param name="position">The position to insert the tracks, a zero-based index</param>
/// <returns></returns> /// <returns></returns>
/// <remarks>AUTH NEEDED</remarks> /// <remarks>AUTH NEEDED</remarks>
[Obsolete("Calling AddPlaylistTracks with a userId is deprecated, remove the parameter")]
public ErrorResponse AddPlaylistTracks(string userId, string playlistId, List<string> uris, int? position = null) public ErrorResponse AddPlaylistTracks(string userId, string playlistId, List<string> uris, int? position = null)
{ {
JObject body = new JObject JObject body = new JObject
@ -1666,6 +1902,23 @@ namespace SpotifyAPI.Web
return UploadData<ErrorResponse>(_builder.AddPlaylistTracks(userId, playlistId, uris, position), body.ToString(Formatting.None)) ?? new ErrorResponse(); return UploadData<ErrorResponse>(_builder.AddPlaylistTracks(userId, playlistId, uris, position), body.ToString(Formatting.None)) ?? new ErrorResponse();
} }
/// <summary>
/// Add one or more tracks to a users playlist.
/// </summary>
/// <param name="playlistId">The Spotify ID for the playlist.</param>
/// <param name="uris">A list of Spotify track URIs to add</param>
/// <param name="position">The position to insert the tracks, a zero-based index</param>
/// <returns></returns>
/// <remarks>AUTH NEEDED</remarks>
public ErrorResponse AddPlaylistTracks(string playlistId, List<string> uris, int? position = null)
{
JObject body = new JObject
{
{"uris", JArray.FromObject(uris.Take(100))}
};
return UploadData<ErrorResponse>(_builder.AddPlaylistTracks(playlistId, uris, position), body.ToString(Formatting.None)) ?? new ErrorResponse();
}
/// <summary> /// <summary>
/// Add one or more tracks to a users playlist asynchronously. /// Add one or more tracks to a users playlist asynchronously.
/// </summary> /// </summary>
@ -1675,6 +1928,7 @@ namespace SpotifyAPI.Web
/// <param name="position">The position to insert the tracks, a zero-based index</param> /// <param name="position">The position to insert the tracks, a zero-based index</param>
/// <returns></returns> /// <returns></returns>
/// <remarks>AUTH NEEDED</remarks> /// <remarks>AUTH NEEDED</remarks>
[Obsolete("Calling AddPlaylistTracks with a userId is deprecated, remove the parameter")]
public async Task<ErrorResponse> AddPlaylistTracksAsync(string userId, string playlistId, List<string> uris, int? position = null) public async Task<ErrorResponse> AddPlaylistTracksAsync(string userId, string playlistId, List<string> uris, int? position = null)
{ {
JObject body = new JObject JObject body = new JObject
@ -1684,6 +1938,23 @@ namespace SpotifyAPI.Web
return await (UploadDataAsync<ErrorResponse>(_builder.AddPlaylistTracks(userId, playlistId, uris, position), body.ToString(Formatting.None)).ConfigureAwait(false)) ?? new ErrorResponse(); return await (UploadDataAsync<ErrorResponse>(_builder.AddPlaylistTracks(userId, playlistId, uris, position), body.ToString(Formatting.None)).ConfigureAwait(false)) ?? new ErrorResponse();
} }
/// <summary>
/// Add one or more tracks to a users playlist asynchronously.
/// </summary>
/// <param name="playlistId">The Spotify ID for the playlist.</param>
/// <param name="uris">A list of Spotify track URIs to add</param>
/// <param name="position">The position to insert the tracks, a zero-based index</param>
/// <returns></returns>
/// <remarks>AUTH NEEDED</remarks>
public async Task<ErrorResponse> AddPlaylistTracksAsync(string playlistId, List<string> uris, int? position = null)
{
JObject body = new JObject
{
{"uris", JArray.FromObject(uris.Take(100))}
};
return await (UploadDataAsync<ErrorResponse>(_builder.AddPlaylistTracks(playlistId, uris, position), body.ToString(Formatting.None)).ConfigureAwait(false)) ?? new ErrorResponse();
}
/// <summary> /// <summary>
/// Add a track to a users playlist. /// Add a track to a users playlist.
/// </summary> /// </summary>
@ -1693,9 +1964,24 @@ namespace SpotifyAPI.Web
/// <param name="position">The position to insert the tracks, a zero-based index</param> /// <param name="position">The position to insert the tracks, a zero-based index</param>
/// <returns></returns> /// <returns></returns>
/// <remarks>AUTH NEEDED</remarks> /// <remarks>AUTH NEEDED</remarks>
[Obsolete("Calling AddPlaylistTrack with a userId is deprecated, remove the parameter")]
public ErrorResponse AddPlaylistTrack(string userId, string playlistId, string uri, int? position = null) public ErrorResponse AddPlaylistTrack(string userId, string playlistId, string uri, int? position = null)
{ {
return AddPlaylistTracks(userId, playlistId, new List<string> { uri }, position); return AddPlaylistTracks(playlistId, new List<string> { uri }, position);
}
/// <summary>
/// Add a track to a users playlist.
/// </summary>
/// <param name="playlistId">The Spotify ID for the playlist.</param>
/// <param name="uri">A Spotify Track URI</param>
/// <param name="position">The position to insert the tracks, a zero-based index</param>
/// <returns></returns>
/// <remarks>AUTH NEEDED</remarks>
public ErrorResponse AddPlaylistTrack(string playlistId, string uri, int? position = null)
{
return AddPlaylistTracks(playlistId, new List<string> { uri }, position);
} }
/// <summary> /// <summary>
@ -1707,11 +1993,25 @@ namespace SpotifyAPI.Web
/// <param name="position">The position to insert the tracks, a zero-based index</param> /// <param name="position">The position to insert the tracks, a zero-based index</param>
/// <returns></returns> /// <returns></returns>
/// <remarks>AUTH NEEDED</remarks> /// <remarks>AUTH NEEDED</remarks>
[Obsolete("Calling AddPlaylistTrack with a userId is deprecated, remove the parameter")]
public Task<ErrorResponse> AddPlaylistTrackAsync(string userId, string playlistId, string uri, int? position = null) public Task<ErrorResponse> AddPlaylistTrackAsync(string userId, string playlistId, string uri, int? position = null)
{ {
return AddPlaylistTracksAsync(userId, playlistId, new List<string> { uri }, position); return AddPlaylistTracksAsync(userId, playlistId, new List<string> { uri }, position);
} }
/// <summary>
/// Add a track to a users playlist asynchronously.
/// </summary>
/// <param name="playlistId">The Spotify ID for the playlist.</param>
/// <param name="uri">A Spotify Track URI</param>
/// <param name="position">The position to insert the tracks, a zero-based index</param>
/// <returns></returns>
/// <remarks>AUTH NEEDED</remarks>
public Task<ErrorResponse> AddPlaylistTrackAsync(string playlistId, string uri, int? position = null)
{
return AddPlaylistTracksAsync(playlistId, new List<string> { uri }, position);
}
/// <summary> /// <summary>
/// Reorder a track or a group of tracks in a playlist. /// Reorder a track or a group of tracks in a playlist.
/// </summary> /// </summary>
@ -1723,6 +2023,7 @@ namespace SpotifyAPI.Web
/// <param name="snapshotId">The playlist's snapshot ID against which you want to make the changes.</param> /// <param name="snapshotId">The playlist's snapshot ID against which you want to make the changes.</param>
/// <returns></returns> /// <returns></returns>
/// <remarks>AUTH NEEDED</remarks> /// <remarks>AUTH NEEDED</remarks>
[Obsolete("Calling ReorderPlaylist with a userId is deprecated, remove the parameter")]
public Snapshot ReorderPlaylist(string userId, string playlistId, int rangeStart, int insertBefore, int rangeLength = 1, string snapshotId = "") public Snapshot ReorderPlaylist(string userId, string playlistId, int rangeStart, int insertBefore, int rangeLength = 1, string snapshotId = "")
{ {
JObject body = new JObject JObject body = new JObject
@ -1736,6 +2037,29 @@ namespace SpotifyAPI.Web
return UploadData<Snapshot>(_builder.ReorderPlaylist(userId, playlistId), body.ToString(Formatting.None), "PUT"); return UploadData<Snapshot>(_builder.ReorderPlaylist(userId, playlistId), body.ToString(Formatting.None), "PUT");
} }
/// <summary>
/// Reorder a track or a group of tracks in a playlist.
/// </summary>
/// <param name="playlistId">The Spotify ID for the playlist.</param>
/// <param name="rangeStart">The position of the first track to be reordered.</param>
/// <param name="insertBefore">The position where the tracks should be inserted. </param>
/// <param name="rangeLength">The amount of tracks to be reordered. Defaults to 1 if not set.</param>
/// <param name="snapshotId">The playlist's snapshot ID against which you want to make the changes.</param>
/// <returns></returns>
/// <remarks>AUTH NEEDED</remarks>
public Snapshot ReorderPlaylist(string playlistId, int rangeStart, int insertBefore, int rangeLength = 1, string snapshotId = "")
{
JObject body = new JObject
{
{"range_start", rangeStart},
{"range_length", rangeLength},
{"insert_before", insertBefore}
};
if (!string.IsNullOrEmpty(snapshotId))
body.Add("snapshot_id", snapshotId);
return UploadData<Snapshot>(_builder.ReorderPlaylist(playlistId), body.ToString(Formatting.None), "PUT");
}
/// <summary> /// <summary>
/// Reorder a track or a group of tracks in a playlist asynchronously. /// Reorder a track or a group of tracks in a playlist asynchronously.
/// </summary> /// </summary>
@ -1747,6 +2071,7 @@ namespace SpotifyAPI.Web
/// <param name="snapshotId">The playlist's snapshot ID against which you want to make the changes.</param> /// <param name="snapshotId">The playlist's snapshot ID against which you want to make the changes.</param>
/// <returns></returns> /// <returns></returns>
/// <remarks>AUTH NEEDED</remarks> /// <remarks>AUTH NEEDED</remarks>
[Obsolete("Calling ReorderPlaylist with a userId is deprecated, remove the parameter")]
public Task<Snapshot> ReorderPlaylistAsync(string userId, string playlistId, int rangeStart, int insertBefore, int rangeLength = 1, string snapshotId = "") public Task<Snapshot> ReorderPlaylistAsync(string userId, string playlistId, int rangeStart, int insertBefore, int rangeLength = 1, string snapshotId = "")
{ {
JObject body = new JObject JObject body = new JObject
@ -1761,6 +2086,30 @@ namespace SpotifyAPI.Web
return UploadDataAsync<Snapshot>(_builder.ReorderPlaylist(userId, playlistId), body.ToString(Formatting.None), "PUT"); return UploadDataAsync<Snapshot>(_builder.ReorderPlaylist(userId, playlistId), body.ToString(Formatting.None), "PUT");
} }
/// <summary>
/// Reorder a track or a group of tracks in a playlist asynchronously.
/// </summary>
/// <param name="playlistId">The Spotify ID for the playlist.</param>
/// <param name="rangeStart">The position of the first track to be reordered.</param>
/// <param name="insertBefore">The position where the tracks should be inserted. </param>
/// <param name="rangeLength">The amount of tracks to be reordered. Defaults to 1 if not set.</param>
/// <param name="snapshotId">The playlist's snapshot ID against which you want to make the changes.</param>
/// <returns></returns>
/// <remarks>AUTH NEEDED</remarks>
public Task<Snapshot> ReorderPlaylistAsync(string playlistId, int rangeStart, int insertBefore, int rangeLength = 1, string snapshotId = "")
{
JObject body = new JObject
{
{"range_start", rangeStart},
{"range_length", rangeLength},
{"insert_before", insertBefore},
{"snapshot_id", snapshotId}
};
if (!string.IsNullOrEmpty(snapshotId))
body.Add("snapshot_id", snapshotId);
return UploadDataAsync<Snapshot>(_builder.ReorderPlaylist(playlistId), body.ToString(Formatting.None), "PUT");
}
#endregion Playlists #endregion Playlists
#region Profiles #region Profiles

View File

@ -649,6 +649,26 @@ namespace SpotifyAPI.Web
return builder.ToString(); return builder.ToString();
} }
/// <summary>
/// Get a playlist owned by a Spotify user.
/// </summary>
/// <param name="playlistId">The Spotify ID for the playlist.</param>
/// <param name="fields">
/// Filters for the query: a comma-separated list of the fields to return. If omitted, all fields are
/// returned.
/// </param>
/// <param name="market">An ISO 3166-1 alpha-2 country code. Provide this parameter if you want to apply Track Relinking.</param>
/// <returns></returns>
/// <remarks>AUTH NEEDED</remarks>
public string GetPlaylist(string playlistId, string fields = "", string market = "")
{
StringBuilder builder = new StringBuilder(APIBase + "/playlists/" + playlistId);
builder.Append("?fields=" + fields);
if (!string.IsNullOrEmpty(market))
builder.Append("&market=" + market);
return builder.ToString();
}
/// <summary> /// <summary>
/// Get full details of the tracks of a playlist owned by a Spotify user. /// Get full details of the tracks of a playlist owned by a Spotify user.
/// </summary> /// </summary>
@ -675,6 +695,31 @@ namespace SpotifyAPI.Web
return builder.ToString(); return builder.ToString();
} }
/// <summary>
/// Get full details of the tracks of a playlist owned by a Spotify user.
/// </summary>
/// <param name="playlistId">The Spotify ID for the playlist.</param>
/// <param name="fields">
/// Filters for the query: a comma-separated list of the fields to return. If omitted, all fields are
/// returned.
/// </param>
/// <param name="limit">The maximum number of tracks to return. Default: 100. Minimum: 1. Maximum: 100.</param>
/// <param name="offset">The index of the first object to return. Default: 0 (i.e., the first object)</param>
/// <param name="market">An ISO 3166-1 alpha-2 country code. Provide this parameter if you want to apply Track Relinking.</param>
/// <returns></returns>
/// <remarks>AUTH NEEDED</remarks>
public string GetPlaylistTracks(string playlistId, string fields = "", int limit = 100, int offset = 0, string market = "")
{
limit = Math.Min(limit, 100);
StringBuilder builder = new StringBuilder(APIBase + "/playlists/" + playlistId + "/tracks");
builder.Append("?fields=" + fields);
builder.Append("&limit=" + limit);
builder.Append("&offset=" + offset);
if (!string.IsNullOrEmpty(market))
builder.Append("&market=" + market);
return builder.ToString();
}
/// <summary> /// <summary>
/// Create a playlist for a Spotify user. (The playlist will be empty until you add tracks.) /// Create a playlist for a Spotify user. (The playlist will be empty until you add tracks.)
/// </summary> /// </summary>
@ -706,6 +751,17 @@ namespace SpotifyAPI.Web
return $"{APIBase}/users/{userId}/playlists/{playlistId}"; return $"{APIBase}/users/{userId}/playlists/{playlistId}";
} }
/// <summary>
/// Change a playlists name and public/private state. (The user must, of course, own the playlist.)
/// </summary>
/// <param name="playlistId">The Spotify ID for the playlist.</param>
/// <returns></returns>
/// <remarks>AUTH NEEDED</remarks>
public string UpdatePlaylist(string playlistId)
{
return $"{APIBase}/playlists/{playlistId}";
}
/// <summary> /// <summary>
/// Replace all the tracks in a playlist, overwriting its existing tracks. This powerful request can be useful for /// Replace all the tracks in a playlist, overwriting its existing tracks. This powerful request can be useful for
/// replacing tracks, re-ordering existing tracks, or clearing the playlist. /// replacing tracks, re-ordering existing tracks, or clearing the playlist.
@ -719,6 +775,18 @@ namespace SpotifyAPI.Web
return $"{APIBase}/users/{userId}/playlists/{playlistId}/tracks"; return $"{APIBase}/users/{userId}/playlists/{playlistId}/tracks";
} }
/// <summary>
/// Replace all the tracks in a playlist, overwriting its existing tracks. This powerful request can be useful for
/// replacing tracks, re-ordering existing tracks, or clearing the playlist.
/// </summary>
/// <param name="playlistId">The Spotify ID for the playlist.</param>
/// <returns></returns>
/// <remarks>AUTH NEEDED</remarks>
public string ReplacePlaylistTracks(string playlistId)
{
return $"{APIBase}/playlists/{playlistId}/tracks";
}
/// <summary> /// <summary>
/// Remove one or more tracks from a users playlist. /// Remove one or more tracks from a users playlist.
/// </summary> /// </summary>
@ -735,6 +803,21 @@ namespace SpotifyAPI.Web
return $"{APIBase}/users/{userId}/playlists/{playlistId}/tracks"; return $"{APIBase}/users/{userId}/playlists/{playlistId}/tracks";
} }
/// <summary>
/// Remove one or more tracks from a users playlist.
/// </summary>
/// <param name="playlistId">The Spotify ID for the playlist.</param>
/// <param name="uris">
/// array of objects containing Spotify URI strings (and their position in the playlist). A maximum of
/// 100 objects can be sent at once.
/// </param>
/// <returns></returns>
/// <remarks>AUTH NEEDED</remarks>
public string RemovePlaylistTracks(string playlistId, List<DeleteTrackUri> uris)
{
return $"{APIBase}/playlists/{playlistId}/tracks";
}
/// <summary> /// <summary>
/// Add one or more tracks to a users playlist. /// Add one or more tracks to a users playlist.
/// </summary> /// </summary>
@ -751,6 +834,21 @@ namespace SpotifyAPI.Web
return $"{APIBase}/users/{userId}/playlists/{playlistId}/tracks?position={position}"; return $"{APIBase}/users/{userId}/playlists/{playlistId}/tracks?position={position}";
} }
/// <summary>
/// Add one or more tracks to a users playlist.
/// </summary>
/// <param name="playlistId">The Spotify ID for the playlist.</param>
/// <param name="uris">A list of Spotify track URIs to add</param>
/// <param name="position">The position to insert the tracks, a zero-based index</param>
/// <returns></returns>
/// <remarks>AUTH NEEDED</remarks>
public string AddPlaylistTracks(string playlistId, List<string> uris, int? position = null)
{
if (position == null)
return $"{APIBase}/playlists/{playlistId}/tracks";
return $"{APIBase}/playlists/{playlistId}/tracks?position={position}";
}
/// <summary> /// <summary>
/// Reorder a track or a group of tracks in a playlist. /// Reorder a track or a group of tracks in a playlist.
/// </summary> /// </summary>
@ -763,6 +861,17 @@ namespace SpotifyAPI.Web
return $"{APIBase}/users/{userId}/playlists/{playlistId}/tracks"; return $"{APIBase}/users/{userId}/playlists/{playlistId}/tracks";
} }
/// <summary>
/// Reorder a track or a group of tracks in a playlist.
/// </summary>
/// <param name="playlistId">The Spotify ID for the playlist.</param>
/// <returns></returns>
/// <remarks>AUTH NEEDED</remarks>
public string ReorderPlaylist(string playlistId)
{
return $"{APIBase}/playlists/{playlistId}/tracks";
}
/// <summary> /// <summary>
/// Upload an image for a playlist. /// Upload an image for a playlist.
/// </summary> /// </summary>