public async Task <List <DataRow> > GetAlbums(CancellationToken token) { List <DataRow> data = new List <DataRow>(); data.Add(new HeaderDataRow("Albums", null)); var request = new RestRequest("library/album", HttpMethod.Get); var response = await DoRestRequest(request, 100000, token); var jroot = JToken.Parse(response.Body); token.ThrowIfCancellationRequested(); if (!jroot.IsNullOrEmpty() && !jroot["data"].IsNullOrEmpty() && !jroot["data"]["albums"].IsNullOrEmpty()) { var jalbums = (JArray)jroot["data"]["albums"]; string lastArtist = string.Empty; foreach (var jalbum in jalbums) { var dataRow = AlbumDataRow.Parse((JObject)jalbum); if (dataRow.ArtistId != lastArtist) //we naively assume it's grouped by artist. If it isn't, it won't break, but it'll look really weird { data.Add(new HeaderDataRow(dataRow.Artist, new string[] { "artist", dataRow.ArtistId })); lastArtist = dataRow.ArtistId; } data.Add(dataRow); token.ThrowIfCancellationRequested(); } } return(data); }
public async Task <List <AlbumDataRow> > SearchAlbums(string songName, string albumName, string artistName, CancellationToken token) { List <AlbumDataRow> data = new List <AlbumDataRow>(); List <KeyValuePair <string, string> > searchParams = new List <KeyValuePair <string, string> >(); if (!string.IsNullOrEmpty(songName)) { searchParams.Add(new KeyValuePair <string, string>("song", songName)); } if (!string.IsNullOrEmpty(albumName)) { searchParams.Add(new KeyValuePair <string, string>("album", albumName)); } if (!string.IsNullOrEmpty(artistName)) { searchParams.Add(new KeyValuePair <string, string>("artist", artistName)); } searchParams.Add(new KeyValuePair <string, string>("list", "albums")); var request = new RestRequest($"library/search2", HttpMethod.Get, null, searchParams.ToArray()); var response = await DoRestRequest(request, 100000, token); var jroot = JToken.Parse(response.Body); token.ThrowIfCancellationRequested(); if (!jroot.IsNullOrEmpty() && !jroot["data"].IsNullOrEmpty() && !jroot["data"]["albums"].IsNullOrEmpty()) { foreach (JObject albumObject in jroot["data"]["albums"]) { var dataRow = AlbumDataRow.Parse(albumObject); data.Add(dataRow); } } return(data); }