private static void AddAliasToExistingArtist(string artistNameBeforeCorrect, Artist dbArtist, FMBotDbContext db) { if (!dbArtist.ArtistAliases.Any() || !dbArtist.ArtistAliases.Select(s => s.Alias.ToLower()).Contains(artistNameBeforeCorrect.ToLower())) { db.ArtistAliases.Add(new ArtistAlias { ArtistId = dbArtist.Id, Alias = artistNameBeforeCorrect, CorrectsInScrobbles = true }); } }
public async Task <string> GetOrStoreArtistImageAsync(ArtistResponse lastFmArtist, string artistNameBeforeCorrect) { await using var db = new FMBotDbContext(ConfigData.Data.Database.ConnectionString); var dbArtist = await db.Artists .Include(i => i.ArtistAliases) .AsQueryable() .FirstOrDefaultAsync(f => f.Name.ToLower() == lastFmArtist.Artist.Name.ToLower()); var imageUrlToReturn = ""; try { if (dbArtist == null) { var spotifyArtist = await GetArtistFromSpotify(lastFmArtist.Artist.Name); var artistToAdd = new Artist { Name = lastFmArtist.Artist.Name, LastFmUrl = lastFmArtist.Artist.Url, Mbid = lastFmArtist.Artist.Mbid }; if (spotifyArtist != null) { artistToAdd.SpotifyId = spotifyArtist.Id; if (spotifyArtist.Images.Any()) { artistToAdd.SpotifyImageUrl = spotifyArtist.Images.OrderByDescending(o => o.Height).First().Url; artistToAdd.SpotifyImageDate = DateTime.UtcNow; imageUrlToReturn = artistToAdd.SpotifyImageUrl; } } if (!string.Equals(artistNameBeforeCorrect, lastFmArtist.Artist.Name, StringComparison.CurrentCultureIgnoreCase)) { var aliasList = new List <ArtistAlias> { new ArtistAlias { Alias = artistNameBeforeCorrect, CorrectsInScrobbles = true } }; artistToAdd.ArtistAliases = aliasList; } await db.Artists.AddAsync(artistToAdd); await db.SaveChangesAsync(); } else { if (!string.Equals(artistNameBeforeCorrect, lastFmArtist.Artist.Name, StringComparison.CurrentCultureIgnoreCase)) { AddAliasToExistingArtist(artistNameBeforeCorrect, dbArtist, db); } if (dbArtist.SpotifyImageUrl == null || dbArtist.SpotifyImageDate < DateTime.UtcNow.AddMonths(-2)) { var spotifyArtist = await GetArtistFromSpotify(lastFmArtist.Artist.Name); if (spotifyArtist != null && spotifyArtist.Images.Any()) { dbArtist.SpotifyImageUrl = spotifyArtist.Images.OrderByDescending(o => o.Height).First().Url; imageUrlToReturn = dbArtist.SpotifyImageUrl; } dbArtist.SpotifyImageDate = DateTime.UtcNow; db.Entry(dbArtist).State = EntityState.Modified; } else { imageUrlToReturn = dbArtist.SpotifyImageUrl; } await db.SaveChangesAsync(); } return(!string.IsNullOrEmpty(imageUrlToReturn) ? imageUrlToReturn : null); } catch (Exception e) { Log.Error(e, "Something went wrong while retrieving artist image"); return(null); } }