Skip to content

Commit 320aa5f

Browse files
committed
Added Library Client JohnnyCrazy#451
1 parent 39d0260 commit 320aa5f

20 files changed

Lines changed: 387 additions & 0 deletions
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using System.Collections.Generic;
2+
using System.Threading.Tasks;
3+
4+
namespace SpotifyAPI.Web
5+
{
6+
public interface ILibraryClient
7+
{
8+
Task<bool> RemoveAlbums(LibraryRemoveAlbumsRequest request);
9+
Task<bool> RemoveTracks(LibraryRemoveTracksRequest request);
10+
Task<bool> RemoveShows(LibraryRemoveShowsRequest request);
11+
12+
Task<bool> SaveTracks(LibrarySaveTracksRequest request);
13+
Task<bool> SaveAlbums(LibrarySaveAlbumsRequest request);
14+
Task<bool> SaveShows(LibrarySaveShowsRequest request);
15+
16+
Task<List<bool>> CheckTracks(LibraryCheckTracksRequest request);
17+
Task<List<bool>> CheckAlbums(LibraryCheckAlbumsRequest request);
18+
Task<List<bool>> CheckShows(LibraryCheckShowsRequest request);
19+
20+
Task<Paging<SavedTrack>> GetTracks();
21+
Task<Paging<SavedTrack>> GetTracks(LibraryTracksRequest request);
22+
Task<Paging<SavedAlbum>> GetAlbums();
23+
Task<Paging<SavedAlbum>> GetAlbums(LibraryAlbumsRequest request);
24+
Task<Paging<SavedShow>> GetShows();
25+
Task<Paging<SavedShow>> GetShows(LibraryShowsRequest request);
26+
}
27+
}

‎SpotifyAPI.Web/Clients/Interfaces/ISpotifyClient.cs‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ public interface ISpotifyClient
3232

3333
IEpisodesClient Episodes { get; }
3434

35+
ILibraryClient Library { get; }
36+
3537
Task<List<T>> Paginate<T>(Paging<T> firstPage);
3638
Task<List<T>> Paginate<T, TNext>(Paging<T, TNext> firstPage, Func<TNext, Paging<T, TNext>> mapper);
3739
Task<List<T>> Paginate<T>(Func<Task<Paging<T>>> getFirstPage);
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
using System.Net;
2+
using System.Collections.Generic;
3+
using System.Threading.Tasks;
4+
using SpotifyAPI.Web.Http;
5+
6+
namespace SpotifyAPI.Web
7+
{
8+
public class LibraryClient : APIClient, ILibraryClient
9+
{
10+
public LibraryClient(IAPIConnector apiConnector) : base(apiConnector) { }
11+
12+
public Task<List<bool>> CheckAlbums(LibraryCheckAlbumsRequest request)
13+
{
14+
Ensure.ArgumentNotNull(request, nameof(request));
15+
16+
return API.Get<List<bool>>(SpotifyUrls.LibraryAlbumsContains(), request.BuildQueryParams());
17+
}
18+
19+
public Task<List<bool>> CheckShows(LibraryCheckShowsRequest request)
20+
{
21+
Ensure.ArgumentNotNull(request, nameof(request));
22+
23+
return API.Get<List<bool>>(SpotifyUrls.LibraryShowsContains(), request.BuildQueryParams());
24+
}
25+
26+
public Task<List<bool>> CheckTracks(LibraryCheckTracksRequest request)
27+
{
28+
Ensure.ArgumentNotNull(request, nameof(request));
29+
30+
return API.Get<List<bool>>(SpotifyUrls.LibraryTracksContains(), request.BuildQueryParams());
31+
}
32+
33+
public Task<Paging<SavedAlbum>> GetAlbums()
34+
{
35+
return API.Get<Paging<SavedAlbum>>(SpotifyUrls.LibraryAlbums());
36+
}
37+
38+
public Task<Paging<SavedAlbum>> GetAlbums(LibraryAlbumsRequest request)
39+
{
40+
Ensure.ArgumentNotNull(request, nameof(request));
41+
42+
return API.Get<Paging<SavedAlbum>>(SpotifyUrls.LibraryAlbums(), request.BuildQueryParams());
43+
}
44+
45+
public Task<Paging<SavedShow>> GetShows()
46+
{
47+
return API.Get<Paging<SavedShow>>(SpotifyUrls.LibraryShows());
48+
}
49+
50+
public Task<Paging<SavedShow>> GetShows(LibraryShowsRequest request)
51+
{
52+
Ensure.ArgumentNotNull(request, nameof(request));
53+
54+
return API.Get<Paging<SavedShow>>(SpotifyUrls.LibraryShows(), request.BuildQueryParams());
55+
}
56+
57+
public Task<Paging<SavedTrack>> GetTracks()
58+
{
59+
return API.Get<Paging<SavedTrack>>(SpotifyUrls.LibraryTracks());
60+
}
61+
62+
public Task<Paging<SavedTrack>> GetTracks(LibraryTracksRequest request)
63+
{
64+
Ensure.ArgumentNotNull(request, nameof(request));
65+
66+
return API.Get<Paging<SavedTrack>>(SpotifyUrls.LibraryTracks(), request.BuildQueryParams());
67+
}
68+
69+
public async Task<bool> RemoveAlbums(LibraryRemoveAlbumsRequest request)
70+
{
71+
Ensure.ArgumentNotNull(request, nameof(request));
72+
73+
var statusCode = await API.Delete(SpotifyUrls.LibraryAlbums(), null, request.BuildBodyParams()).ConfigureAwait(false);
74+
return statusCode == HttpStatusCode.OK;
75+
}
76+
77+
public async Task<bool> RemoveShows(LibraryRemoveShowsRequest request)
78+
{
79+
Ensure.ArgumentNotNull(request, nameof(request));
80+
81+
var statusCode = await API.Delete(SpotifyUrls.LibraryShows(), null, request.BuildBodyParams()).ConfigureAwait(false);
82+
return statusCode == HttpStatusCode.OK;
83+
}
84+
85+
public async Task<bool> RemoveTracks(LibraryRemoveTracksRequest request)
86+
{
87+
Ensure.ArgumentNotNull(request, nameof(request));
88+
89+
var statusCode = await API.Delete(SpotifyUrls.LibraryTracks(), null, request.BuildBodyParams()).ConfigureAwait(false);
90+
return statusCode == HttpStatusCode.OK;
91+
}
92+
93+
public async Task<bool> SaveAlbums(LibrarySaveAlbumsRequest request)
94+
{
95+
Ensure.ArgumentNotNull(request, nameof(request));
96+
97+
var statusCode = await API.Put(SpotifyUrls.LibraryAlbums(), request.BuildQueryParams(), null).ConfigureAwait(false);
98+
return statusCode == HttpStatusCode.Created;
99+
}
100+
101+
public async Task<bool> SaveShows(LibrarySaveShowsRequest request)
102+
{
103+
Ensure.ArgumentNotNull(request, nameof(request));
104+
105+
var statusCode = await API.Put(SpotifyUrls.LibraryShows(), request.BuildQueryParams(), null).ConfigureAwait(false);
106+
return statusCode == HttpStatusCode.Created;
107+
}
108+
109+
public async Task<bool> SaveTracks(LibrarySaveTracksRequest request)
110+
{
111+
Ensure.ArgumentNotNull(request, nameof(request));
112+
113+
var statusCode = await API.Put(SpotifyUrls.LibraryTracks(), request.BuildQueryParams(), null).ConfigureAwait(false);
114+
return statusCode == HttpStatusCode.Created;
115+
}
116+
}
117+
}

‎SpotifyAPI.Web/Clients/SpotifyClient.cs‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public SpotifyClient(SpotifyClientConfig config)
4242
Artists = new ArtistsClient(_apiConnector);
4343
Personalization = new PersonalizationClient(_apiConnector);
4444
Episodes = new EpisodesClient(_apiConnector);
45+
Library = new LibraryClient(_apiConnector);
4546
}
4647

4748
public IPaginator DefaultPaginator { get; }
@@ -70,6 +71,8 @@ public SpotifyClient(SpotifyClientConfig config)
7071

7172
public IEpisodesClient Episodes { get; }
7273

74+
public ILibraryClient Library { get; }
75+
7376
public Task<List<T>> Paginate<T>(Paging<T> firstPage)
7477
{
7578
return DefaultPaginator.Paginate(firstPage, _apiConnector);
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
namespace SpotifyAPI.Web
2+
{
3+
public class LibraryAlbumsRequest : RequestParams
4+
{
5+
[QueryParam("limit")]
6+
public int? Limit { get; set; }
7+
8+
[QueryParam("offset")]
9+
public int? Offset { get; set; }
10+
11+
[QueryParam("market")]
12+
public string Market { get; set; }
13+
}
14+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using System.Collections.Generic;
2+
3+
namespace SpotifyAPI.Web
4+
{
5+
public class LibraryCheckAlbumsRequest : RequestParams
6+
{
7+
public LibraryCheckAlbumsRequest(IList<string> ids)
8+
{
9+
Ensure.ArgumentNotNull(ids, nameof(ids));
10+
11+
Ids = ids;
12+
}
13+
14+
15+
[QueryParam("ids")]
16+
public IList<string> Ids { get; }
17+
}
18+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using System.Collections.Generic;
2+
3+
namespace SpotifyAPI.Web
4+
{
5+
public class LibraryCheckShowsRequest : RequestParams
6+
{
7+
public LibraryCheckShowsRequest(IList<string> ids)
8+
{
9+
Ensure.ArgumentNotNull(ids, nameof(ids));
10+
11+
Ids = ids;
12+
}
13+
14+
[QueryParam("ids")]
15+
public IList<string> Ids { get; }
16+
}
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using System.Collections.Generic;
2+
3+
namespace SpotifyAPI.Web
4+
{
5+
public class LibraryCheckTracksRequest : RequestParams
6+
{
7+
public LibraryCheckTracksRequest(IList<string> ids)
8+
{
9+
Ensure.ArgumentNotNull(ids, nameof(ids));
10+
11+
Ids = ids;
12+
}
13+
14+
[QueryParam("ids")]
15+
public IList<string> Ids { get; }
16+
}
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using System.Collections.Generic;
2+
3+
namespace SpotifyAPI.Web
4+
{
5+
public class LibraryRemoveAlbumsRequest : RequestParams
6+
{
7+
public LibraryRemoveAlbumsRequest(IList<string> ids)
8+
{
9+
Ensure.ArgumentNotNullOrEmptyList(ids, nameof(ids));
10+
11+
Ids = ids;
12+
}
13+
14+
[BodyParam("ids")]
15+
public IList<string> Ids { get; }
16+
}
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using System.Collections.Generic;
2+
3+
namespace SpotifyAPI.Web
4+
{
5+
public class LibraryRemoveShowsRequest : RequestParams
6+
{
7+
public LibraryRemoveShowsRequest(IList<string> ids)
8+
{
9+
Ensure.ArgumentNotNullOrEmptyList(ids, nameof(ids));
10+
11+
Ids = ids;
12+
}
13+
14+
[BodyParam("ids")]
15+
public IList<string> Ids { get; }
16+
}
17+
}

0 commit comments

Comments
 (0)