diff --git a/MediaBrowser.Providers/Music/ArtistsPostScanTask.cs b/MediaBrowser.Providers/Music/ArtistsPostScanTask.cs index 239f70df7e..1612147fbc 100644 --- a/MediaBrowser.Providers/Music/ArtistsPostScanTask.cs +++ b/MediaBrowser.Providers/Music/ArtistsPostScanTask.cs @@ -56,22 +56,37 @@ namespace MediaBrowser.Providers.Music if (musicArtist != null) { - artist.Images = new Dictionary(musicArtist.Images); + MergeImages(musicArtist.Images, artist.Images); - artist.BackdropImagePaths = musicArtist.BackdropImagePaths.ToList(); - artist.ScreenshotImagePaths = musicArtist.ScreenshotImagePaths.ToList(); - artist.SetProviderId(MetadataProviders.Musicbrainz, musicArtist.GetProviderId(MetadataProviders.Musicbrainz)); - artist.Genres = musicArtist.Genres.ToList(); + // Merge backdrops + var backdrops = musicArtist.BackdropImagePaths.ToList(); + backdrops.InsertRange(0, artist.BackdropImagePaths); + artist.BackdropImagePaths = backdrops.Distinct(StringComparer.OrdinalIgnoreCase) + .ToList(); + + if (!artist.LockedFields.Contains(MetadataFields.Genres)) + { + // Merge genres + var genres = musicArtist.Genres.ToList(); + genres.InsertRange(0, artist.Genres); + artist.Genres = genres.Distinct(StringComparer.OrdinalIgnoreCase) + .ToList(); + + artist.Genres = musicArtist.Genres.ToList(); + } } else { - // Avoid implicitly captured closure - var artist1 = artist; + if (!artist.LockedFields.Contains(MetadataFields.Genres)) + { + // Avoid implicitly captured closure + var artist1 = artist; - artist.Genres = allSongs.Where(i => i.HasArtist(artist1.Name)) - .SelectMany(i => i.Genres) - .Distinct(StringComparer.OrdinalIgnoreCase) - .ToList(); + artist.Genres = allSongs.Where(i => i.HasArtist(artist1.Name)) + .SelectMany(i => i.Genres) + .Distinct(StringComparer.OrdinalIgnoreCase) + .ToList(); + } } numComplete++; @@ -89,6 +104,21 @@ namespace MediaBrowser.Providers.Music await _libraryManager.ValidateArtists(cancellationToken, innerProgress).ConfigureAwait(false); } + private void MergeImages(Dictionary source, Dictionary target) + { + foreach (var key in source.Keys + .ToList() + .Where(k => !target.ContainsKey(k))) + { + string path; + + if (source.TryGetValue(key, out path)) + { + target[key] = path; + } + } + } + /// /// Gets all artists. /// diff --git a/MediaBrowser.Providers/Music/LastfmHelper.cs b/MediaBrowser.Providers/Music/LastfmHelper.cs index e3fe490010..4e7688839d 100644 --- a/MediaBrowser.Providers/Music/LastfmHelper.cs +++ b/MediaBrowser.Providers/Music/LastfmHelper.cs @@ -40,7 +40,6 @@ namespace MediaBrowser.Providers.Music target.Tags = source.Tags.ToList(); target.Overview = source.Overview; target.ProductionLocations = source.ProductionLocations.ToList(); - target.Genres = source.Genres.ToList(); } public static void ProcessAlbumData(BaseItem item, LastfmAlbum data)