Pārlūkot izejas kodu

fixes #553 - Support locking OfficialRating field

Luke Pulverenti 11 gadi atpakaļ
vecāks
revīzija
b54240f679

+ 12 - 0
MediaBrowser.Controller/Providers/BaseMetadataProvider.cs

@@ -202,6 +202,18 @@ namespace MediaBrowser.Controller.Providers
             return NeedsRefreshInternal(item, data);
         }
 
+        /// <summary>
+        /// Gets a value indicating whether [enforce dont fetch metadata].
+        /// </summary>
+        /// <value><c>true</c> if [enforce dont fetch metadata]; otherwise, <c>false</c>.</value>
+        public virtual bool EnforceDontFetchMetadata
+        {
+            get
+            {
+                return true;
+            }
+        }
+
         /// <summary>
         /// Needses the refresh internal.
         /// </summary>

+ 5 - 1
MediaBrowser.Model/Entities/MetadataFields.cs

@@ -37,6 +37,10 @@ namespace MediaBrowser.Model.Entities
         /// <summary>
         /// The runtime
         /// </summary>
-        Runtime
+        Runtime,
+        /// <summary>
+        /// The official rating
+        /// </summary>
+        OfficialRating
     }
 }

+ 4 - 1
MediaBrowser.Providers/MediaInfo/FFProbeVideoInfoProvider.cs

@@ -384,7 +384,10 @@ namespace MediaBrowser.Providers.MediaInfo
 
                 if (!string.IsNullOrWhiteSpace(officialRating))
                 {
-                    video.OfficialRating = officialRating;
+                    if (!video.LockedFields.Contains(MetadataFields.OfficialRating))
+                    {
+                        video.OfficialRating = officialRating;
+                    }
                 }
             }
 

+ 15 - 11
MediaBrowser.Providers/Movies/MovieDbProvider.cs

@@ -317,7 +317,7 @@ namespace MediaBrowser.Providers.Movies
             var boxset = item as BoxSet;
             if (boxset != null)
             {
-               // See if any movies have a collection id already
+                // See if any movies have a collection id already
                 var collId = boxset.Children.Concat(boxset.GetLinkedChildren()).OfType<Video>()
                     .Select(i => i.GetProviderId(MetadataProviders.TmdbCollection))
                    .FirstOrDefault(i => i != null);
@@ -462,7 +462,7 @@ namespace MediaBrowser.Providers.Movies
                 Logger.Info("MoviedbProvider: Ignoring " + item.Name + " because ID forced blank.");
                 return;
             }
-            
+
             item.SetProviderId(MetadataProviders.Tmdb, id);
 
             var mainResult = await FetchMainResult(item, id, cancellationToken).ConfigureAwait(false);
@@ -586,14 +586,18 @@ namespace MediaBrowser.Providers.Movies
                     var ourRelease = movieData.releases.countries.FirstOrDefault(c => c.iso_3166_1.Equals(ConfigurationManager.Configuration.MetadataCountryCode, StringComparison.OrdinalIgnoreCase)) ?? new Country();
                     var usRelease = movieData.releases.countries.FirstOrDefault(c => c.iso_3166_1.Equals("US", StringComparison.OrdinalIgnoreCase)) ?? new Country();
                     var minimunRelease = movieData.releases.countries.OrderBy(c => c.release_date).FirstOrDefault() ?? new Country();
-                    var ratingPrefix = ConfigurationManager.Configuration.MetadataCountryCode.Equals("us", StringComparison.OrdinalIgnoreCase) ? "" : ConfigurationManager.Configuration.MetadataCountryCode + "-";
-                    movie.OfficialRating = !string.IsNullOrEmpty(ourRelease.certification)
-                                               ? ratingPrefix + ourRelease.certification
-                                               : !string.IsNullOrEmpty(usRelease.certification)
-                                                     ? usRelease.certification
-                                                     : !string.IsNullOrEmpty(minimunRelease.certification)
-                                                           ? minimunRelease.iso_3166_1 + "-" + minimunRelease.certification
-                                                           : null;
+
+                    if (!movie.LockedFields.Contains(MetadataFields.OfficialRating))
+                    {
+                        var ratingPrefix = ConfigurationManager.Configuration.MetadataCountryCode.Equals("us", StringComparison.OrdinalIgnoreCase) ? "" : ConfigurationManager.Configuration.MetadataCountryCode + "-";
+                        movie.OfficialRating = !string.IsNullOrEmpty(ourRelease.certification)
+                                                   ? ratingPrefix + ourRelease.certification
+                                                   : !string.IsNullOrEmpty(usRelease.certification)
+                                                         ? usRelease.certification
+                                                         : !string.IsNullOrEmpty(minimunRelease.certification)
+                                                               ? minimunRelease.iso_3166_1 + "-" + minimunRelease.certification
+                                                               : null;
+                    }
 
                     if (ourRelease.release_date != default(DateTime))
                     {
@@ -632,7 +636,7 @@ namespace MediaBrowser.Providers.Movies
                 }
 
                 //if that didn't find a rating and we are a boxset, use the one from our first child
-                if (movie.OfficialRating == null && movie is BoxSet)
+                if (movie.OfficialRating == null && movie is BoxSet && !movie.LockedFields.Contains(MetadataFields.OfficialRating))
                 {
                     var boxset = movie as BoxSet;
                     Logger.Info("MovieDbProvider - Using rating of first child of boxset...");

+ 13 - 1
MediaBrowser.Providers/TV/RemoteSeriesProvider.cs

@@ -153,6 +153,15 @@ namespace MediaBrowser.Providers.TV
             }
         }
 
+        public override bool EnforceDontFetchMetadata
+        {
+            get
+            {
+                // Other providers depend on the xml downloaded here
+                return false;
+            }
+        }
+
         protected override DateTime CompareDate(BaseItem item)
         {
             var seriesId = item.GetProviderId(MetadataProviders.Tvdb);
@@ -440,7 +449,10 @@ namespace MediaBrowser.Providers.TV
 
                                 if (!string.IsNullOrWhiteSpace(val))
                                 {
-                                    item.OfficialRating = val;
+                                    if (!item.LockedFields.Contains(MetadataFields.OfficialRating))
+                                    {
+                                        item.OfficialRating = val;
+                                    }
                                 }
                                 break;
                             }

+ 1 - 1
MediaBrowser.Server.Implementations/Providers/ProviderManager.cs

@@ -128,7 +128,7 @@ namespace MediaBrowser.Server.Implementations.Providers
 
                 // Put this check below the await because the needs refresh of the next tier of providers may depend on the previous ones running
                 //  This is the case for the fan art provider which depends on the movie and tv providers having run before them
-                if (provider.RequiresInternet && item.DontFetchMeta)
+                if (provider.RequiresInternet && item.DontFetchMeta && provider.EnforceDontFetchMetadata)
                 {
                     continue;
                 }