Skip to content

Commit 0843110

Browse files
tolbxelaprojectgoav
authored andcommitted
Search Endpoint Extended, User object extended and fix OAuth Exception on Login (#61)
- SearchEndpoint was extended with Search Advanced method - Fixes #58 (#58). The login throws OAuthException You don't not have permission to access this information on Deezer. Deezer responded with result 200 - OAuthException'
1 parent 92ff47f commit 0843110

File tree

3 files changed

+102
-69
lines changed

3 files changed

+102
-69
lines changed

E.Deezer/Api/User.cs

Lines changed: 42 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,28 @@ namespace E.Deezer.Api
88
{
99
public interface IUser : IObjectWithImage
1010
{
11-
ulong Id { get; }
12-
string Name { get; }
13-
string Link { get; }
14-
string Country { get; }
15-
16-
17-
// ** Methods **
11+
ulong Id { get; set; }
12+
string Name { get; set; }
13+
string Lastname { get; set; }
14+
string Firstname { get; set; }
15+
string Email { get; set; }
16+
int Status { get; set; }
17+
string Birthday { get; set; }
18+
string Inscription_Date { get; set; }
19+
string Gender { get; set; }
20+
string Link { get; set; }
21+
string Picture { get; set; }
22+
string Picture_Small { get; set; }
23+
string Picture_Medium { get; set; }
24+
string Picture_Big { get; set; }
25+
string Picture_XL { get; set; }
26+
string Country { get; set; }
27+
string Lang { get; set; }
28+
bool Is_Kid { get; set; }
29+
string Tracklist { get; set; }
30+
string Type { get; set; }
31+
32+
// ** Methods **
1833
//Favourites
1934
Task<IEnumerable<IAlbum>> GetFavouriteAlbums(uint aStart = 0, uint aCount = 100);
2035

@@ -76,30 +91,27 @@ public interface IUser : IObjectWithImage
7691

7792
internal class User : ObjectWithImage, IUser, IHasError, IDeserializable<IDeezerClient>
7893
{
79-
public ulong Id
80-
{
81-
get;
82-
set;
83-
}
84-
85-
public string Name
86-
{
87-
get;
88-
set;
89-
}
90-
91-
public string Link
92-
{
93-
get;
94-
set;
95-
}
96-
97-
public string Country
98-
{
99-
get;
100-
set;
101-
}
10294

95+
public ulong Id { get; set; }
96+
public string Name { get; set; }
97+
public string Lastname { get; set; }
98+
public string Firstname { get; set; }
99+
public string Email { get; set; }
100+
public int Status { get; set; }
101+
public string Birthday { get; set; }
102+
public string Inscription_Date { get; set; }
103+
public string Gender { get; set; }
104+
public string Link { get; set; }
105+
public string Picture { get; set; }
106+
public string Picture_Small { get; set; }
107+
public string Picture_Medium { get; set; }
108+
public string Picture_Big { get; set; }
109+
public string Picture_XL { get; set; }
110+
public string Country { get; set; }
111+
public string Lang { get; set; }
112+
public bool Is_Kid { get; set; }
113+
public string Tracklist { get; set; }
114+
public string Type { get; set; }
103115

104116
//IDeserializable
105117
public IDeezerClient Client

E.Deezer/DeezerClient.cs

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ internal interface IDeezerClient
3333

3434
Task<IChart> GetChart(ulong aId, uint aStart, uint aCount);
3535

36-
Task<T> GetPlain<T>(string aMethod);
36+
Task<T> GetPlain<T>(string aMethod, IList<IRequestParameter> aParams);
37+
Task<T> GetPlainWithError<T>(string aMethod, IList<IRequestParameter> aParams) where T : IHasError;
3738

3839

3940
//POST
@@ -114,31 +115,29 @@ public Task<IChart> GetChart(ulong aId, uint aStart, uint aCount)
114115
return GetChart(method, parms, aStart, aCount);
115116

116117
}
117-
118-
public Task<T> GetPlainWithError<T>(string aMethod) where T : IHasError
118+
119+
public Task<T> GetPlainWithError<T>(string aMethod, IList<IRequestParameter> aParams = null) where T : IHasError
119120
{
120-
return iExecutor.ExecuteGet(aMethod, RequestParameter.EmptyList)
121+
if (aParams == null) aParams = RequestParameter.EmptyList;
122+
return iExecutor.ExecuteGet(aMethod, aParams)
121123
.ContinueWith(t =>
122124
{
123125
CheckHttpResponse(t);
124126
T deserialized = DeserializeResponse<T>(t.Result.Content).Result;
125-
126127
CheckForDeezerError<T>(deserialized);
127-
128128
return deserialized;
129129
}, CancellationToken, TaskContinuationOptions.NotOnFaulted, TaskScheduler.Default);
130130
}
131131

132-
public Task<T> GetPlain<T>(string aMethod)
132+
public Task<T> GetPlain<T>(string aMethod, IList<IRequestParameter> aParams = null)
133133
{
134-
return iExecutor.ExecuteGet(aMethod, RequestParameter.EmptyList)
134+
if (aParams == null) aParams = RequestParameter.EmptyList;
135+
return iExecutor.ExecuteGet(aMethod, aParams)
136+
135137
.ContinueWith((aTask) =>
136138
{
137139
CheckHttpResponse(aTask);
138140
T deserialized = DeserializeResponse<T>(aTask.Result.Content).Result;
139-
140-
141-
142141
return deserialized;
143142
}, CancellationToken, TaskContinuationOptions.NotOnFaulted, TaskScheduler.Default);
144143
}
@@ -208,9 +207,7 @@ public bool HasPermission(DeezerPermissions aRequiredPermissions)
208207

209208
return false;
210209
}
211-
212-
213-
210+
214211
//'OAuth' Stuff
215212

216213
//Grabs the user's permissions when the user Logs into the library.
@@ -219,7 +216,7 @@ internal Task Login()
219216
IList<IRequestParameter> parms = RequestParameter.EmptyList;
220217
AddDefaultsToParamList(parms);
221218

222-
return GetPlainWithError<User>("user/me")
219+
return GetPlainWithError<User>("user/me", parms)
223220
.ContinueWith((aTask) =>
224221
{
225222
var userInstance = aTask.Result;

E.Deezer/Endpoint/SearchEndpoint.cs

Lines changed: 48 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,32 @@
1-
using System;
1+
using E.Deezer.Api;
22
using System.Collections.Generic;
3-
using System.Linq;
43
using System.Text;
5-
64
using System.Threading.Tasks;
75

8-
using E.Deezer.Api;
9-
106
namespace E.Deezer.Endpoint
117
{
12-
public interface ISearchEndpoint
8+
public interface ISearchEndpoint
139
{
1410
Task<IEnumerable<IAlbum>> Albums(string aQuery, uint aStart = 0, uint aCount = 100);
1511

1612
Task<IEnumerable<IArtist>> Artists(string aQuery, uint aStart = 0, uint aCount = 100);
1713

18-
Task<IEnumerable<IPlaylist>> Playlists(string aQuery, uint aStart = 0 , uint aCount = 100);
14+
Task<IEnumerable<IPlaylist>> Playlists(string aQuery, uint aStart = 0, uint aCount = 100);
1915

2016
Task<IEnumerable<ITrack>> Tracks(string aQuery, uint aStart = 0, uint aCount = 100);
2117

22-
Task<IEnumerable<IRadio>> Radio(string aQuery, uint aStart = 0, uint aCount = 100);
18+
Task<IEnumerable<IRadio>> Radio(string aQuery, uint aStart = 0, uint aCount = 100);
19+
20+
Task<IEnumerable<IUser>> User(string aQuery, uint aStart = 0, uint aCount = 100);
21+
22+
Task<IEnumerable<ITrack>> Advanced(string aArtist = "", string aAlbum = "", string aTrack = "", string aLabel = "",
23+
uint aDur_Min = 0, uint aDur_Max = 0, uint aBpm_Min = 0, uint aBpm_Max = 0,
24+
uint aStart = 0, uint aCount = 100);
2325
}
2426

2527
internal class SearchEndpoint : ISearchEndpoint
2628
{
27-
private const string SEARCH_BASE = "search/";
29+
private const string SEARCH_BASE = "search";
2830

2931
private readonly DeezerClient iClient;
3032

@@ -34,36 +36,58 @@ public SearchEndpoint(DeezerClient aClient)
3436
}
3537

3638

37-
public Task<IEnumerable<IAlbum>> Albums(string aQuery, uint aStart = 0, uint aCount = 100)
38-
=> Get<Album, IAlbum>("album", aQuery, aStart, aCount);
39+
public Task<IEnumerable<IAlbum>> Albums(string aQuery, uint aStart = 0, uint aCount = 100)
40+
=> Get<Album, IAlbum>("album", aQuery, aStart, aCount);
3941

40-
public Task<IEnumerable<IArtist>> Artists(string aQuery, uint aStart = 0, uint aCount = 100)
41-
=> Get<Artist, IArtist>("artist", aQuery, aStart, aCount);
42+
public Task<IEnumerable<IArtist>> Artists(string aQuery, uint aStart = 0, uint aCount = 100)
43+
=> Get<Artist, IArtist>("artist", aQuery, aStart, aCount);
4244

43-
public Task<IEnumerable<IPlaylist>> Playlists(string aQuery, uint aStart = 0, uint aCount = 100)
44-
=> Get<Playlist, IPlaylist>("playlist", aQuery, aStart, aCount);
45+
public Task<IEnumerable<IPlaylist>> Playlists(string aQuery, uint aStart = 0, uint aCount = 100)
46+
=> Get<Playlist, IPlaylist>("playlist", aQuery, aStart, aCount);
4547

46-
public Task<IEnumerable<ITrack>> Tracks(string aQuery, uint aStart = 0, uint aCount = 100)
47-
=> Get<Track, ITrack>("track", aQuery, aStart, aCount);
48+
public Task<IEnumerable<ITrack>> Tracks(string aQuery, uint aStart = 0, uint aCount = 100)
49+
=> Get<Track, ITrack>("track", aQuery, aStart, aCount);
4850

49-
public Task<IEnumerable<IRadio>> Radio(string aQuery, uint aStart = 0, uint aCount = 100)
50-
=> Get<Radio, IRadio>("radio", aQuery, aStart, aCount);
51+
public Task<IEnumerable<IRadio>> Radio(string aQuery, uint aStart = 0, uint aCount = 100)
52+
=> Get<Radio, IRadio>("radio", aQuery, aStart, aCount);
5153

54+
public Task<IEnumerable<IUser>> User(string aQuery, uint aStart = 0, uint aCount = 100)
55+
=> Get<User, IUser>("user", aQuery, aStart, aCount);
5256

57+
public Task<IEnumerable<ITrack>> Advanced(string aArtist = "", string aAlbum = "", string aTrack = "", string aLabel = "",
58+
uint aDur_Min = 0, uint aDur_Max = 0, uint aBpm_Min = 0, uint aBpm_Max = 0,
59+
uint aStart = 0, uint aCount = 100)
60+
{
61+
StringBuilder sb = new StringBuilder("q=");
62+
if (aArtist.Length > 0) sb.Append($"artist:\"{aArtist}\" ");
63+
if (aAlbum.Length > 0) sb.Append($"album:\"{aAlbum}\" ");
64+
if (aTrack.Length > 0) sb.Append($"track:\"{aTrack}\" ");
65+
if (aLabel.Length > 0) sb.Append($"label:\"{aLabel}\" ");
66+
if (aDur_Min > 0) sb.Append($"dur_min:\"{aDur_Min}\" ");
67+
if (aDur_Max > 0) sb.Append($"dur_max:\"{aDur_Max}\" ");
68+
if (aBpm_Min > 0) sb.Append($"bpm_min:\"{aBpm_Min}\" ");
69+
if (aBpm_Max > 0) sb.Append($"bpm_max:\"{aBpm_Max}\"");
70+
var aQuery = sb.ToString();
71+
72+
return Get<Track, ITrack>(string.Empty, aQuery, aStart, aCount);
73+
}
74+
5375
private Task<IEnumerable<TDest>> Get<TSource, TDest>(string aSearchEndpoint, string aQuery, uint aStart, uint aCount) where TSource : TDest, IDeserializable<IDeezerClient>
5476
{
55-
string method = string.Format("{0}{1}", SEARCH_BASE, aSearchEndpoint);
77+
string method = (aSearchEndpoint.Length == 0) ?
78+
SEARCH_BASE :
79+
string.Format("{0}/{1}", SEARCH_BASE, aSearchEndpoint);
5680

5781
List<IRequestParameter> parms = new List<IRequestParameter>()
5882
{
5983
RequestParameter.GetNewQueryStringParameter("q", aQuery)
6084
};
6185

6286
return iClient.Get<TSource>(method, parms, aStart, aCount)
63-
.ContinueWith<IEnumerable<TDest>>((aTask) =>
64-
{
65-
return iClient.Transform<TSource, TDest>(aTask.Result);
66-
}, iClient.CancellationToken, TaskContinuationOptions.NotOnCanceled, TaskScheduler.Default);
87+
.ContinueWith<IEnumerable<TDest>>((aTask) =>
88+
{
89+
return iClient.Transform<TSource, TDest>(aTask.Result);
90+
}, iClient.CancellationToken, TaskContinuationOptions.NotOnCanceled, TaskScheduler.Default);
6791
}
6892

6993
}

0 commit comments

Comments
 (0)