1
- using System ;
1
+ using E . Deezer . Api ;
2
2
using System . Collections . Generic ;
3
- using System . Linq ;
4
3
using System . Text ;
5
-
6
4
using System . Threading . Tasks ;
7
5
8
- using E . Deezer . Api ;
9
-
10
6
namespace E . Deezer . Endpoint
11
7
{
12
- public interface ISearchEndpoint
8
+ public interface ISearchEndpoint
13
9
{
14
10
Task < IEnumerable < IAlbum > > Albums ( string aQuery , uint aStart = 0 , uint aCount = 100 ) ;
15
11
16
12
Task < IEnumerable < IArtist > > Artists ( string aQuery , uint aStart = 0 , uint aCount = 100 ) ;
17
13
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 ) ;
19
15
20
16
Task < IEnumerable < ITrack > > Tracks ( string aQuery , uint aStart = 0 , uint aCount = 100 ) ;
21
17
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 ) ;
23
25
}
24
26
25
27
internal class SearchEndpoint : ISearchEndpoint
26
28
{
27
- private const string SEARCH_BASE = "search/ " ;
29
+ private const string SEARCH_BASE = "search" ;
28
30
29
31
private readonly DeezerClient iClient ;
30
32
@@ -34,36 +36,58 @@ public SearchEndpoint(DeezerClient aClient)
34
36
}
35
37
36
38
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 ) ;
39
41
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 ) ;
42
44
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 ) ;
45
47
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 ) ;
48
50
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 ) ;
51
53
54
+ public Task < IEnumerable < IUser > > User ( string aQuery , uint aStart = 0 , uint aCount = 100 )
55
+ => Get < User , IUser > ( "user" , aQuery , aStart , aCount ) ;
52
56
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
+
53
75
private Task < IEnumerable < TDest > > Get < TSource , TDest > ( string aSearchEndpoint , string aQuery , uint aStart , uint aCount ) where TSource : TDest , IDeserializable < IDeezerClient >
54
76
{
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 ) ;
56
80
57
81
List < IRequestParameter > parms = new List < IRequestParameter > ( )
58
82
{
59
83
RequestParameter . GetNewQueryStringParameter ( "q" , aQuery )
60
84
} ;
61
85
62
86
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 ) ;
67
91
}
68
92
69
93
}
0 commit comments