Răsfoiți Sursa

support saving new metadata configuration

Luke Pulverenti 11 ani în urmă
părinte
comite
8b3485968f

+ 1 - 1
MediaBrowser.Controller/Entities/Audio/IHasAlbumArtist.cs

@@ -3,7 +3,7 @@ namespace MediaBrowser.Controller.Entities.Audio
 {
     public interface IHasAlbumArtist
     {
-        string AlbumArtist { get; }
+        string AlbumArtist { get; set; }
     }
 
     public interface IHasArtist

+ 48 - 0
MediaBrowser.Providers/Books/BookMetadataService.cs

@@ -0,0 +1,48 @@
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.Configuration;
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.Logging;
+using MediaBrowser.Providers.Manager;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace MediaBrowser.Providers.Books
+{
+    public class BookMetadataService : MetadataService<Book, ItemId>
+    {
+        private readonly ILibraryManager _libraryManager;
+
+        public BookMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager)
+            : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
+        {
+            _libraryManager = libraryManager;
+        }
+
+        /// <summary>
+        /// Merges the specified source.
+        /// </summary>
+        /// <param name="source">The source.</param>
+        /// <param name="target">The target.</param>
+        /// <param name="lockedFields">The locked fields.</param>
+        /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
+        /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
+        protected override void MergeData(Book source, Book target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+        {
+            ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
+
+            if (replaceData || string.IsNullOrEmpty(target.SeriesName))
+            {
+                target.SeriesName = source.SeriesName;
+            }
+        }
+
+        protected override Task SaveItem(Book item, ItemUpdateType reason, CancellationToken cancellationToken)
+        {
+            return _libraryManager.UpdateItem(item, reason, cancellationToken);
+        }
+    }
+}

+ 0 - 2
MediaBrowser.Providers/Genres/GenreMetadataService.cs

@@ -1,10 +1,8 @@
 using MediaBrowser.Common.IO;
 using MediaBrowser.Controller.Configuration;
 using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Configuration;
 using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.Logging;
 using MediaBrowser.Providers.Manager;

+ 5 - 1
MediaBrowser.Providers/Music/AlbumMetadataService.cs

@@ -3,7 +3,6 @@ using MediaBrowser.Controller.Configuration;
 using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Configuration;
 using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.Logging;
 using MediaBrowser.Providers.Manager;
@@ -36,6 +35,11 @@ namespace MediaBrowser.Providers.Music
         protected override void MergeData(MusicAlbum source, MusicAlbum target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
         {
             ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
+
+            if (replaceData || target.Artists.Count == 0)
+            {
+                target.Artists = source.Artists;
+            }
         }
 
         protected override Task SaveItem(MusicAlbum item, ItemUpdateType reason, CancellationToken cancellationToken)

+ 0 - 1
MediaBrowser.Providers/Music/ArtistMetadataService.cs

@@ -3,7 +3,6 @@ using MediaBrowser.Controller.Configuration;
 using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Configuration;
 using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.Logging;
 using MediaBrowser.Providers.Manager;

+ 0 - 2
MediaBrowser.Providers/People/PersonMetadataService.cs

@@ -1,10 +1,8 @@
 using MediaBrowser.Common.IO;
 using MediaBrowser.Controller.Configuration;
 using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Configuration;
 using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.Logging;
 using MediaBrowser.Providers.Manager;

+ 17 - 0
MediaBrowser.Providers/ProviderUtils.cs

@@ -1,4 +1,5 @@
 using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Model.Entities;
 using System.Collections.Generic;
 
@@ -156,6 +157,8 @@ namespace MediaBrowser.Providers
                 target.ProviderIds[id.Key] = id.Value;
             }
 
+            MergeAlbumArtist(source, target, lockedFields, replaceData);
+
             if (mergeMetadataSettings)
             {
                 target.ForcedSortName = source.ForcedSortName;
@@ -181,5 +184,19 @@ namespace MediaBrowser.Providers
                 }
             }
         }
+
+        private static void MergeAlbumArtist(BaseItem source, BaseItem target, List<MetadataFields> lockedFields, bool replaceData)
+        {
+            var sourceHasAlbumArtist = source as IHasAlbumArtist;
+            var targetHasAlbumArtist = target as IHasAlbumArtist;
+
+            if (sourceHasAlbumArtist != null && targetHasAlbumArtist != null)
+            {
+                if (replaceData || string.IsNullOrEmpty(targetHasAlbumArtist.AlbumArtist))
+                {
+                    targetHasAlbumArtist.AlbumArtist = sourceHasAlbumArtist.AlbumArtist;
+                }
+            }
+        }
     }
 }