pull/10900/merge
jbatt33 1 month ago committed by GitHub
commit c1776789a8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -1054,9 +1054,9 @@ namespace Emby.Server.Implementations.Data
} }
} }
internal string SerializeImages(ItemImageInfo[] images) internal string SerializeImages(List<ItemImageInfo> images)
{ {
if (images.Length == 0) if (images.Count == 0)
{ {
return null; return null;
} }
@ -1778,9 +1778,10 @@ namespace Emby.Server.Implementations.Data
if (query.DtoOptions.EnableImages) 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++; index++;

@ -467,7 +467,7 @@ public class ImageController : BaseJellyfinApiController
var list = new List<ImageInfo>(); var list = new List<ImageInfo>();
var itemImages = item.ImageInfos; var itemImages = item.ImageInfos;
if (itemImages.Length == 0) if (itemImages.Count == 0)
{ {
// short-circuit // short-circuit
return list; return list;

@ -91,6 +91,9 @@ namespace MediaBrowser.Controller.Entities
public const char SlugChar = '-'; public const char SlugChar = '-';
[JsonIgnore]
private readonly List<ItemImageInfo> _imageInfos;
protected BaseItem() protected BaseItem()
{ {
Tags = Array.Empty<string>(); Tags = Array.Empty<string>();
@ -98,7 +101,7 @@ namespace MediaBrowser.Controller.Entities
Studios = Array.Empty<string>(); Studios = Array.Empty<string>();
ProviderIds = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); ProviderIds = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
LockedFields = Array.Empty<MetadataField>(); LockedFields = Array.Empty<MetadataField>();
ImageInfos = Array.Empty<ItemImageInfo>(); _imageInfos = new List<ItemImageInfo>();
ProductionLocations = Array.Empty<string>(); ProductionLocations = Array.Empty<string>();
RemoteTrailers = Array.Empty<MediaUrl>(); RemoteTrailers = Array.Empty<MediaUrl>();
ExtraIds = Array.Empty<Guid>(); ExtraIds = Array.Empty<Guid>();
@ -118,7 +121,10 @@ namespace MediaBrowser.Controller.Entities
public string Tagline { get; set; } public string Tagline { get; set; }
[JsonIgnore] [JsonIgnore]
public virtual ItemImageInfo[] ImageInfos { get; set; } public virtual List<ItemImageInfo> ImageInfos
{
get { return _imageInfos; }
}
[JsonIgnore] [JsonIgnore]
public bool IsVirtualItem { get; set; } public bool IsVirtualItem { get; set; }
@ -1975,17 +1981,12 @@ namespace MediaBrowser.Controller.Entities
public void RemoveImages(IEnumerable<ItemImageInfo> deletedImages) public void RemoveImages(IEnumerable<ItemImageInfo> deletedImages)
{ {
ImageInfos = ImageInfos.Except(deletedImages).ToArray(); ImageInfos.RemoveAll(deletedImages.Contains);
} }
public void AddImage(ItemImageInfo image) public void AddImage(ItemImageInfo image)
{ {
var current = ImageInfos; ImageInfos.Add(image);
var currentCount = current.Length;
var newArr = new ItemImageInfo[currentCount + 1];
current.CopyTo(newArr, 0);
newArr[currentCount] = image;
ImageInfos = newArr;
} }
public virtual Task UpdateToRepositoryAsync(ItemUpdateType updateReason, CancellationToken cancellationToken) public virtual Task UpdateToRepositoryAsync(ItemUpdateType updateReason, CancellationToken cancellationToken)
@ -2124,7 +2125,7 @@ namespace MediaBrowser.Controller.Entities
} }
// Yield return is more performant than LINQ Where on an Array // 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]; var imageInfo = ImageInfos[i];
if (imageInfo.Type == imageType) if (imageInfo.Type == imageType)
@ -2189,7 +2190,7 @@ namespace MediaBrowser.Controller.Entities
if (newImageList.Count > 0) 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; return imageUpdated || newImageList.Count > 0;

@ -474,7 +474,10 @@ namespace MediaBrowser.Controller.Entities
foreach (var item in localAlternates) 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.Overview = Overview;
item.ProductionYear = ProductionYear; item.ProductionYear = ProductionYear;
item.PremiereDate = PremiereDate; item.PremiereDate = PremiereDate;

Loading…
Cancel
Save