// TODO: prevent cycles private async Task <List <Artist> > DiscoveryChainArtistLoop(string artist, int iterations) { Debug.Assert(iterations <= 10); var discovered = new List <Artist>(); string originalArtistName = artist; for (int i = 0; i < iterations; i++) { XDocument xml = await new LastFmClient(this.config[Common.Constants.ConfigKey.LastFmApiKey]).GetSimilarArtistsAsync(originalArtistName); List <Artist> similar = LastFmXmlParser.GetSimilarArtistNames(xml, out originalArtistName, true, 1); if (i == 0) { discovered.Add(new Artist(originalArtistName)); } if (similar.Any()) { discovered.Add(similar.First()); originalArtistName = similar.First().Name; } else { break; } } return(discovered); }
// TODO: prevent cycles private async Task <List <Track> > DiscoveryChainTrackLoop(string artist, string track, int iterations) { Debug.Assert(iterations <= 10); var discovered = new List <Track>(); var originalTrackName = new Track(artist, track); for (int i = 0; i < iterations; i++) { XDocument xml = await new LastFmClient(this.config[Common.Constants.ConfigKey.LastFmApiKey]).GetSimilarTracksAsync(originalTrackName.Artist, originalTrackName.TrackName); List <Track> similar = LastFmXmlParser.GetSimilarTracks(xml, out originalTrackName, true, 1); if (i == 0) { discovered.Add(originalTrackName); } if (similar.Any()) { discovered.Add(similar.First()); } else { break; } } return(discovered.ToList()); }
public static string CreateHypedTracksResponse(XDocument xml, bool isRandomized = false, int limit = 25) { List <Track> trackNames = LastFmXmlParser.GetTracks(xml, isRandomized, limit); var response = new StringBuilder(); response .Append("Hyped tracks:\r\n") .Append(String.Join("\r\n", trackNames)); return(response.ToString()); }
public static string CreateTopAlbumsResponse(XDocument xml, string artist = null, bool isRandomized = false, int limit = 25) { List <Album> albumNames = LastFmXmlParser.GetAlbums(xml, isRandomized, limit); var response = new StringBuilder(); response .Append("Top albums") .Append(String.IsNullOrEmpty(artist) ? String.Empty : " by " + artist) .Append(":\r\n") .Append(String.Join("\r\n", albumNames)); return(response.ToString()); }
public static string CreateSimilarTracksResponse(XDocument xml, bool isRandomized = false, int limit = 25) { Track originalTrack; List <Track> similarTrackNames = LastFmXmlParser.GetSimilarTracks(xml, out originalTrack, isRandomized, limit); var response = new StringBuilder(); response .Append("Similar songs to ") .Append(originalTrack) .Append(":\r\n") .Append(String.Join("\r\n", similarTrackNames)); return(response.ToString()); }
public static string CreateSimilarArtistsResponse(XDocument xml, bool isRandomized = true, int limit = 10) { string originalArtistName; List <Artist> similarArtists = LastFmXmlParser.GetSimilarArtistNames(xml, out originalArtistName, isRandomized, limit); var response = new StringBuilder(); response .Append("Similar artists to ") .Append(originalArtistName) .Append(": ") .Append(String.Join(", ", similarArtists)) .Append("."); return(response.ToString()); }