From 5fa3ba4062533f7ce7d2888d7f1938ed52701cc2 Mon Sep 17 00:00:00 2001 From: jbatt33 <41477628+jbatt33@users.noreply.github.com> Date: Mon, 22 Jan 2024 17:11:45 -0500 Subject: [PATCH] Commit of changes for resolving warning: CA1819 related to BaseItem.ImageInfos property. --- .../Data/SqliteItemRepository.cs | 9 ++++---- Jellyfin.Api/Controllers/ImageController.cs | 2 +- MediaBrowser.Controller/Entities/BaseItem.cs | 23 ++++++++++--------- MediaBrowser.Controller/Entities/Video.cs | 5 +++- 4 files changed, 22 insertions(+), 17 deletions(-) diff --git a/Emby.Server.Implementations/Data/SqliteItemRepository.cs b/Emby.Server.Implementations/Data/SqliteItemRepository.cs index d0772654ce..62899b6d69 100644 --- a/Emby.Server.Implementations/Data/SqliteItemRepository.cs +++ b/Emby.Server.Implementations/Data/SqliteItemRepository.cs @@ -1066,9 +1066,9 @@ namespace Emby.Server.Implementations.Data } } - internal string SerializeImages(ItemImageInfo[] images) + internal string SerializeImages(List images) { - if (images.Length == 0) + if (images.Count == 0) { return null; } @@ -1785,9 +1785,10 @@ namespace Emby.Server.Implementations.Data if (query.DtoOptions.EnableImages) { - if (item.ImageInfos.Length == 0 && reader.TryGetString(index, out var imageInfos)) + if (item.ImageInfos.Count == 0 && reader.TryGetString(index, out var imageInfos)) { - item.ImageInfos = DeserializeImages(imageInfos); + item.ImageInfos.Clear(); + item.ImageInfos.AddRange(DeserializeImages(imageInfos)); } index++; diff --git a/Jellyfin.Api/Controllers/ImageController.cs b/Jellyfin.Api/Controllers/ImageController.cs index c031ce338d..f9d69bd8d3 100644 --- a/Jellyfin.Api/Controllers/ImageController.cs +++ b/Jellyfin.Api/Controllers/ImageController.cs @@ -485,7 +485,7 @@ public class ImageController : BaseJellyfinApiController var list = new List(); var itemImages = item.ImageInfos; - if (itemImages.Length == 0) + if (itemImages.Count == 0) { // short-circuit return list; diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index fdbceac961..3533eae092 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -89,6 +89,9 @@ namespace MediaBrowser.Controller.Entities public const char SlugChar = '-'; + [JsonIgnore] + private readonly List _imageInfos; + protected BaseItem() { Tags = Array.Empty(); @@ -96,7 +99,7 @@ namespace MediaBrowser.Controller.Entities Studios = Array.Empty(); ProviderIds = new Dictionary(StringComparer.OrdinalIgnoreCase); LockedFields = Array.Empty(); - ImageInfos = Array.Empty(); + _imageInfos = new List(); ProductionLocations = Array.Empty(); RemoteTrailers = Array.Empty(); ExtraIds = Array.Empty(); @@ -116,7 +119,10 @@ namespace MediaBrowser.Controller.Entities public string Tagline { get; set; } [JsonIgnore] - public virtual ItemImageInfo[] ImageInfos { get; set; } + public virtual List ImageInfos + { + get { return _imageInfos; } + } [JsonIgnore] public bool IsVirtualItem { get; set; } @@ -1948,17 +1954,12 @@ namespace MediaBrowser.Controller.Entities public void RemoveImages(IEnumerable deletedImages) { - ImageInfos = ImageInfos.Except(deletedImages).ToArray(); + ImageInfos.RemoveAll(deletedImages.Contains); } public void AddImage(ItemImageInfo image) { - var current = ImageInfos; - var currentCount = current.Length; - var newArr = new ItemImageInfo[currentCount + 1]; - current.CopyTo(newArr, 0); - newArr[currentCount] = image; - ImageInfos = newArr; + ImageInfos.Add(image); } public virtual Task UpdateToRepositoryAsync(ItemUpdateType updateReason, CancellationToken cancellationToken) @@ -2097,7 +2098,7 @@ namespace MediaBrowser.Controller.Entities } // Yield return is more performant than LINQ Where on an Array - for (var i = 0; i < ImageInfos.Length; i++) + for (var i = 0; i < ImageInfos.Count; i++) { var imageInfo = ImageInfos[i]; if (imageInfo.Type == imageType) @@ -2162,7 +2163,7 @@ namespace MediaBrowser.Controller.Entities if (newImageList.Count > 0) { - ImageInfos = ImageInfos.Concat(newImageList.Select(i => GetImageInfo(i, imageType))).ToArray(); + ImageInfos.AddRange(newImageList.Select(i => GetImageInfo(i, imageType))); } return imageUpdated || newImageList.Count > 0; diff --git a/MediaBrowser.Controller/Entities/Video.cs b/MediaBrowser.Controller/Entities/Video.cs index be2eb4d288..fb3b6e290b 100644 --- a/MediaBrowser.Controller/Entities/Video.cs +++ b/MediaBrowser.Controller/Entities/Video.cs @@ -474,7 +474,10 @@ namespace MediaBrowser.Controller.Entities foreach (var item in localAlternates) { - item.ImageInfos = ImageInfos; + // The original code here was making a reference assignment, this + // will only copy the values over to match. + item.ImageInfos.Clear(); + item.ImageInfos.AddRange(ImageInfos); item.Overview = Overview; item.ProductionYear = ProductionYear; item.PremiereDate = PremiereDate;