Procházet zdrojové kódy

Respect locked fields when updating children from parent

Shadowghost před 1 rokem
rodič
revize
cc2c00d764
1 změnil soubory, kde provedl 44 přidání a 8 odebrání
  1. 44 8
      Jellyfin.Api/Controllers/ItemUpdateController.cs

+ 44 - 8
Jellyfin.Api/Controllers/ItemUpdateController.cs

@@ -290,17 +290,35 @@ public class ItemUpdateController : BaseJellyfinApiController
         {
             foreach (var season in rseries.Children.OfType<Season>())
             {
-                season.OfficialRating = request.OfficialRating;
+                if (!season.LockedFields.Contains(MetadataField.OfficialRating))
+                {
+                    season.OfficialRating = request.OfficialRating;
+                }
+
                 season.CustomRating = request.CustomRating;
-                season.Tags = season.Tags.Concat(addedTags).Except(removedTags).Distinct().ToArray();
+
+                if (!season.LockedFields.Contains(MetadataField.Tags))
+                {
+                    season.Tags = season.Tags.Concat(addedTags).Except(removedTags).Distinct().ToArray();
+                }
+
                 season.OnMetadataChanged();
                 await season.UpdateToRepositoryAsync(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
 
                 foreach (var ep in season.Children.OfType<Episode>())
                 {
-                    ep.OfficialRating = request.OfficialRating;
+                    if (!ep.LockedFields.Contains(MetadataField.OfficialRating))
+                    {
+                        ep.OfficialRating = request.OfficialRating;
+                    }
+
                     ep.CustomRating = request.CustomRating;
-                    ep.Tags = ep.Tags.Concat(addedTags).Except(removedTags).Distinct().ToArray();
+
+                    if (!ep.LockedFields.Contains(MetadataField.Tags))
+                    {
+                        ep.Tags = ep.Tags.Concat(addedTags).Except(removedTags).Distinct().ToArray();
+                    }
+
                     ep.OnMetadataChanged();
                     await ep.UpdateToRepositoryAsync(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
                 }
@@ -310,9 +328,18 @@ public class ItemUpdateController : BaseJellyfinApiController
         {
             foreach (var ep in season.Children.OfType<Episode>())
             {
-                ep.OfficialRating = request.OfficialRating;
+                if (!ep.LockedFields.Contains(MetadataField.OfficialRating))
+                {
+                    ep.OfficialRating = request.OfficialRating;
+                }
+
                 ep.CustomRating = request.CustomRating;
-                ep.Tags = ep.Tags.Concat(addedTags).Except(removedTags).Distinct().ToArray();
+
+                if (!ep.LockedFields.Contains(MetadataField.Tags))
+                {
+                    ep.Tags = ep.Tags.Concat(addedTags).Except(removedTags).Distinct().ToArray();
+                }
+
                 ep.OnMetadataChanged();
                 await ep.UpdateToRepositoryAsync(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
             }
@@ -321,9 +348,18 @@ public class ItemUpdateController : BaseJellyfinApiController
         {
             foreach (BaseItem track in album.Children)
             {
-                track.OfficialRating = request.OfficialRating;
+                if (!track.LockedFields.Contains(MetadataField.OfficialRating))
+                {
+                    track.OfficialRating = request.OfficialRating;
+                }
+
                 track.CustomRating = request.CustomRating;
-                track.Tags = track.Tags.Concat(addedTags).Except(removedTags).Distinct().ToArray();
+
+                if (!track.LockedFields.Contains(MetadataField.Tags))
+                {
+                    track.Tags = track.Tags.Concat(addedTags).Except(removedTags).Distinct().ToArray();
+                }
+
                 track.OnMetadataChanged();
                 await track.UpdateToRepositoryAsync(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
             }