2
0
Эх сурвалжийг харах

fixes #379 - artist images don't show on web interface

Luke Pulverenti 12 жил өмнө
parent
commit
ab70effd5e

+ 41 - 11
MediaBrowser.Providers/Music/ArtistsPostScanTask.cs

@@ -56,22 +56,37 @@ namespace MediaBrowser.Providers.Music
 
                 if (musicArtist != null)
                 {
-                    artist.Images = new Dictionary<ImageType, string>(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<ImageType, string> source, Dictionary<ImageType, string> target)
+        {
+            foreach (var key in source.Keys
+                .ToList()
+                .Where(k => !target.ContainsKey(k)))
+            {
+                string path;
+
+                if (source.TryGetValue(key, out path))
+                {
+                    target[key] = path;
+                }
+            }
+        }
+
         /// <summary>
         /// Gets all artists.
         /// </summary>

+ 0 - 1
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)