public Task AddArtist(Artist artist) { ArtistDictionary.Add(artist.Guid, artist); _imageProvider.AddImage(artist.SmallImage); _imageProvider.AddImage(artist.MediumImage); _imageProvider.AddImage(artist.LargeImage); using ( var command = new SQLiteCommand( "INSERT INTO `Artists` (Name, MusicBrainzId, Url, Guid, SmallImage, MediumImage, LargeImage) VALUES (@name, @musicBrainzId, @url, @guid, @smallImage, @mediumImage, @largeImage)", _connection)) { command.Parameters.AddWithValue("@name", artist.Name); command.Parameters.AddWithValue("@musicBrainzId", artist.MusicBrainzId); command.Parameters.AddWithValue("@url", artist.Url); command.Parameters.AddGuid("@guid", artist.Guid); command.Parameters.AddGuid("@smallImage", artist.SmallImage?.Guid); command.Parameters.AddGuid("@mediumImage", artist.MediumImage?.Guid); command.Parameters.AddGuid("@largeImage", artist.LargeImage?.Guid); return command.ExecuteNonQueryAsync(); } }
public async Task<Artist> SearchArtistOnline(string name) { Artist foundArtist; if (SearchArtist(name, out foundArtist)) return foundArtist; using (var wc = new WebClient { Proxy = null }) { ArtistSearchResult searchedArtists ; var s = (await wc.DownloadStringTaskAsync( $"http://ws.audioscrobbler.com/2.0/?method=artist.search&artist={Uri.EscapeDataString(name)}&api_key={SensitiveInformation.LastfmKey}&format=json&limit=1")) .FixJsonString(); try { searchedArtists = JsonConvert.DeserializeObject<ArtistSearchResult>(s); } catch (JsonException) { return null; } var match = searchedArtists?.results?.ArtistMatches?.artist; if (match == null) return null; if (SearchArtist(match.name, out foundArtist)) { if (ArtistKeywords.ContainsKey(foundArtist)) ArtistKeywords[foundArtist].Add(name); else ArtistKeywords.Add(foundArtist, new List<string> {name}); return foundArtist; } var artist = new Artist(match.name) { MusicBrainzId = match.mbid, Url = match.url }; SetImages(artist, match.image); await Artists.AddArtist(artist); ArtistKeywords.Add(artist, new List<string> { name }); return artist; } }
private static void SetImages(Artist artist, List <Image> images) { if (images == null || images.Count == 0) { return; } images = images.Where(x => !string.IsNullOrEmpty(x.text)).ToList(); if (images.Count == 0) { return; } artist.SmallImage = GetSmallImage(images); artist.MediumImage = GetMediumImage(images); artist.LargeImage = GetBestImage(images); }
public async Task <Artist> GetArtistByMusicbrainzId(string musicbrainzId, CultureInfo culture) { using (var wc = new WebClient { Proxy = null }) { var artistInfo = JsonConvert.DeserializeObject <GetArtistInfoResult>( (await wc.DownloadStringTaskAsync( $"http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&mbid={musicbrainzId}&api_key={SensitiveInformation.LastfmKey}&format=json&lang={culture.TwoLetterISOLanguageName}")) .FixJsonString()); var artist = new Artist(artistInfo.artist.name) { MusicBrainzId = artistInfo.artist.mbid, Url = artistInfo.artist.url }; SetImages(artist, artistInfo.artist.image); return(artist); } }
public async Task Load(SQLiteConnection connection) { using (var command = new SQLiteCommand("SELECT * FROM `Artists`", connection)) { var reader = await command.ExecuteReaderAsync(); while (await reader.ReadAsync()) { var id = reader.ReadGuid(3); Artist artist; if (id == UnknownArtistGuid) artist = UnknownArtist; else { artist = new Artist { Name = reader.GetString(0), MusicBrainzId = reader.GetValue(1)?.ToString(), Url = reader.GetValue(2)?.ToString(), Guid = id }; } var temp = reader.ReadGuid(4); if (temp != Guid.Empty) artist.SmallImage = _imageProvider.Collection[temp]; temp = reader.ReadGuid(5); if (temp != Guid.Empty) artist.MediumImage = _imageProvider.Collection[temp]; temp = reader.ReadGuid(6); if (temp != Guid.Empty) artist.LargeImage = _imageProvider.Collection[temp]; ArtistDictionary.Add(artist.Guid, artist); if (artist.Guid == UnknownArtistGuid) UnknownArtist = artist; } } _connection = connection; }
public bool SearchArtist(string name, out Artist artist) { var foundArtists = Artists.ArtistDictionary.Where( x => string.Equals(x.Value.Name, name, StringComparison.OrdinalIgnoreCase)).ToList(); if (foundArtists.Count > 0) { artist = foundArtists[0].Value; return(true); } var alreadyExistingArtist = ArtistKeywords.FirstOrDefault(x => x.Value.Contains(name)).Key; if (alreadyExistingArtist != null) { artist = alreadyExistingArtist; return(true); } artist = null; return(false); }
public ArtistProvider(ImagesProvider imageProvider) { ArtistDictionary = new Dictionary<Guid, Artist>(); UnknownArtist = new Artist {Guid = UnknownArtistGuid}; _imageProvider = imageProvider; }
private async void OpenArtist(Artist artist) { var artistView = new ArtistView(artist, () => IsSpecialViewOpen = false); await artistView.Load(MusicDataManager, _viewController, NotificationManager); SpecialView = artistView; IsSpecialViewOpen = true; }
public async Task SetAdvancedInfoAboutArtist(Artist artist, CultureInfo culture) { if (artist.ProvidesAdvancedInfo) return; using (var wc = new WebClient {Proxy = null}) { GetArtistInfoResult artistInfo; try { var jsonString = (await wc.DownloadStringTaskAsync(string.IsNullOrEmpty(artist.MusicBrainzId) ? $"http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist={Uri.EscapeDataString(artist.Name)}&autocorrect=1&api_key={SensitiveInformation.LastfmKey}&format=json&lang={culture.TwoLetterISOLanguageName}" : $"http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&mbid={artist.MusicBrainzId}&api_key={SensitiveInformation.LastfmKey}&format=json&lang={culture.TwoLetterISOLanguageName}")) .FixJsonString(); artistInfo = JsonConvert.DeserializeObject<GetArtistInfoResult>(jsonString); } catch (JsonException) { return; } if (string.IsNullOrEmpty(artist.MusicBrainzId)) artist.MusicBrainzId = artistInfo.artist.mbid; var topTracks = await wc.DownloadStringTaskAsync(string.IsNullOrEmpty(artist.MusicBrainzId) ? $"http://ws.audioscrobbler.com/2.0/?method=artist.gettoptracks&artist={artist.Name}&api_key={SensitiveInformation.LastfmKey}&limit=10&format=json" : $"http://ws.audioscrobbler.com/2.0/?method=artist.gettoptracks&mbid={artist.MusicBrainzId}&api_key={SensitiveInformation.LastfmKey}&limit=10&format=json"); artist.Biography = Regex.Match(artistInfo.artist.bio.summary.Trim(), @"^(?<content>(.+))<a", RegexOptions.Singleline).Groups["content"].Value.Trim(); if (string.IsNullOrWhiteSpace(artist.Biography)) artist.Biography = null; if (artistInfo.artist?.similar?.artist != null) { var similarArtists = new List<Artist>(); foreach (var similarArtist in artistInfo.artist.similar.artist) { Artist existingArtist; if (SearchArtist(similarArtist.name, out existingArtist)) { similarArtists.Add(existingArtist); break; } var newArtist = new Artist(similarArtist.name) { Url = similarArtist.url }; SetImages(newArtist, similarArtist.image); await Artists.AddArtist(newArtist); similarArtists.Add(newArtist); } artist.SimilarArtists = similarArtists; } GetTopTracksResult topTrackResult; try { topTrackResult = JsonConvert.DeserializeObject<GetTopTracksResult>(topTracks.FixJsonString()); } catch (JsonException) { return; } artist.TopTracks = topTrackResult.toptracks?.track?.Where(x => !string.IsNullOrWhiteSpace(x.duration)).Select(x => new TopTrack { Artist = artist, Duration = TimeSpan.FromMilliseconds(int.Parse(x.duration)), MusicbrainzId = x.mbid, Name = x.name, Url = x.url, Thumbnail = x.image?.Count > 0 ? GetBestImage(x.image) : null }).ToList(); } artist.ProvidesAdvancedInfo = true; }
private static void SetImages(Artist artist, List<Image> images) { if (images == null || images.Count == 0) return; images = images.Where(x => !string.IsNullOrEmpty(x.text)).ToList(); if (images.Count == 0) return; artist.SmallImage = GetSmallImage(images); artist.MediumImage = GetMediumImage(images); artist.LargeImage = GetBestImage(images); }
public ArtistView(Artist artist, Action closeView) { Artist = artist; _closeView = closeView; }
public async Task<Artist> GetArtistByMusicbrainzId(string musicbrainzId, CultureInfo culture) { using (var wc = new WebClient {Proxy = null}) { var artistInfo = JsonConvert.DeserializeObject<GetArtistInfoResult>( (await wc.DownloadStringTaskAsync( $"http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&mbid={musicbrainzId}&api_key={SensitiveInformation.LastfmKey}&format=json&lang={culture.TwoLetterISOLanguageName}")) .FixJsonString()); var artist = new Artist(artistInfo.artist.name) { MusicBrainzId = artistInfo.artist.mbid, Url = artistInfo.artist.url }; SetImages(artist, artistInfo.artist.image); return artist; } }
public async Task <Artist> SearchArtistOnline(string name) { Artist foundArtist; if (SearchArtist(name, out foundArtist)) { return(foundArtist); } using (var wc = new WebClient { Proxy = null }) { ArtistSearchResult searchedArtists; var s = (await wc.DownloadStringTaskAsync( $"http://ws.audioscrobbler.com/2.0/?method=artist.search&artist={Uri.EscapeDataString(name)}&api_key={SensitiveInformation.LastfmKey}&format=json&limit=1")) .FixJsonString(); try { searchedArtists = JsonConvert.DeserializeObject <ArtistSearchResult>(s); } catch (JsonException) { return(null); } var match = searchedArtists?.results?.ArtistMatches?.artist; if (match == null) { return(null); } if (SearchArtist(match.name, out foundArtist)) { if (ArtistKeywords.ContainsKey(foundArtist)) { ArtistKeywords[foundArtist].Add(name); } else { ArtistKeywords.Add(foundArtist, new List <string> { name }); } return(foundArtist); } var artist = new Artist(match.name) { MusicBrainzId = match.mbid, Url = match.url }; SetImages(artist, match.image); await Artists.AddArtist(artist); ArtistKeywords.Add(artist, new List <string> { name }); return(artist); } }
public async Task SetAdvancedInfoAboutArtist(Artist artist, CultureInfo culture) { if (artist.ProvidesAdvancedInfo) { return; } using (var wc = new WebClient { Proxy = null }) { GetArtistInfoResult artistInfo; try { var jsonString = (await wc.DownloadStringTaskAsync(string.IsNullOrEmpty(artist.MusicBrainzId) ? $"http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist={Uri.EscapeDataString(artist.Name)}&autocorrect=1&api_key={SensitiveInformation.LastfmKey}&format=json&lang={culture.TwoLetterISOLanguageName}" : $"http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&mbid={artist.MusicBrainzId}&api_key={SensitiveInformation.LastfmKey}&format=json&lang={culture.TwoLetterISOLanguageName}")) .FixJsonString(); artistInfo = JsonConvert.DeserializeObject <GetArtistInfoResult>(jsonString); } catch (JsonException) { return; } if (string.IsNullOrEmpty(artist.MusicBrainzId)) { artist.MusicBrainzId = artistInfo.artist.mbid; } var topTracks = await wc.DownloadStringTaskAsync(string.IsNullOrEmpty(artist.MusicBrainzId) ?$"http://ws.audioscrobbler.com/2.0/?method=artist.gettoptracks&artist={artist.Name}&api_key={SensitiveInformation.LastfmKey}&limit=10&format=json" : $"http://ws.audioscrobbler.com/2.0/?method=artist.gettoptracks&mbid={artist.MusicBrainzId}&api_key={SensitiveInformation.LastfmKey}&limit=10&format=json"); artist.Biography = Regex.Match(artistInfo.artist.bio.summary.Trim(), @"^(?<content>(.+))<a", RegexOptions.Singleline).Groups["content"].Value.Trim(); if (string.IsNullOrWhiteSpace(artist.Biography)) { artist.Biography = null; } if (artistInfo.artist?.similar?.artist != null) { var similarArtists = new List <Artist>(); foreach (var similarArtist in artistInfo.artist.similar.artist) { Artist existingArtist; if (SearchArtist(similarArtist.name, out existingArtist)) { similarArtists.Add(existingArtist); break; } var newArtist = new Artist(similarArtist.name) { Url = similarArtist.url }; SetImages(newArtist, similarArtist.image); await Artists.AddArtist(newArtist); similarArtists.Add(newArtist); } artist.SimilarArtists = similarArtists; } GetTopTracksResult topTrackResult; try { topTrackResult = JsonConvert.DeserializeObject <GetTopTracksResult>(topTracks.FixJsonString()); } catch (JsonException) { return; } artist.TopTracks = topTrackResult.toptracks?.track?.Where(x => !string.IsNullOrWhiteSpace(x.duration)).Select(x => new TopTrack { Artist = artist, Duration = TimeSpan.FromMilliseconds(int.Parse(x.duration)), MusicbrainzId = x.mbid, Name = x.name, Url = x.url, Thumbnail = x.image?.Count > 0 ? GetBestImage(x.image) : null }).ToList(); } artist.ProvidesAdvancedInfo = true; }
public bool SearchArtist(string name, out Artist artist) { var foundArtists = Artists.ArtistDictionary.Where( x => string.Equals(x.Value.Name, name, StringComparison.OrdinalIgnoreCase)).ToList(); if (foundArtists.Count > 0) { artist = foundArtists[0].Value; return true; } var alreadyExistingArtist = ArtistKeywords.FirstOrDefault(x => x.Value.Contains(name)).Key; if (alreadyExistingArtist != null) { artist = alreadyExistingArtist; return true; } artist = null; return false; }
public async Task<IPlayable> SearchTrack(Artist artist, string title) { PlayableBase result = null; var sw = Stopwatch.StartNew(); foreach (var track in Tracks.Tracks.Where(x => x.Artist == artist)) { if (track.Title.IndexOf(title, StringComparison.OrdinalIgnoreCase) > -1) { result = track; break; } } Debug.Print($"Search track in local collection: {sw.ElapsedMilliseconds} ms"); if (result != null) return result; return await MusicStreamingPluginManager.DefaultMusicStreaming.GetTrack( $"{artist} - {title}"); }
public void OpenArtist(Artist artist) { _openArtistAction.Invoke(artist); }