Fix several Stackoverflows (#14783)

This commit is contained in:
JPVenson 2025-09-12 21:58:16 +02:00 committed by GitHub
parent deee04ae38
commit c02a24e32a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 44 additions and 24 deletions

View File

@ -701,19 +701,7 @@ namespace MediaBrowser.Controller.Entities
{
get
{
var customRating = CustomRating;
if (!string.IsNullOrEmpty(customRating))
{
return customRating;
}
var parent = DisplayParent;
if (parent is not null)
{
return parent.CustomRatingForComparison;
}
return null;
return GetCustomRatingForComparision();
}
}
@ -791,6 +779,26 @@ namespace MediaBrowser.Controller.Entities
/// <value>The remote trailers.</value>
public IReadOnlyList<MediaUrl> RemoteTrailers { get; set; }
private string GetCustomRatingForComparision(HashSet<Guid> callstack = null)
{
callstack ??= new();
var customRating = CustomRating;
if (!string.IsNullOrEmpty(customRating))
{
return customRating;
}
callstack.Add(Id);
var parent = DisplayParent;
if (parent is not null && !callstack.Contains(parent.Id))
{
return parent.GetCustomRatingForComparision(callstack);
}
return null;
}
public virtual double GetDefaultPrimaryImageAspectRatio()
{
return 0;

View File

@ -568,7 +568,7 @@ namespace MediaBrowser.Controller.Entities
if (recursive && child is Folder folder)
{
await folder.RefreshMetadataRecursive(folder.Children.ToList(), refreshOptions, true, progress, cancellationToken).ConfigureAwait(false);
await folder.RefreshMetadataRecursive(folder.Children.Except([this, child]).ToList(), refreshOptions, true, progress, cancellationToken).ConfigureAwait(false);
}
}
}

View File

@ -152,16 +152,7 @@ namespace MediaBrowser.Controller.Entities
{
get
{
if (!string.IsNullOrEmpty(PrimaryVersionId))
{
var item = LibraryManager.GetItemById(PrimaryVersionId);
if (item is Video video)
{
return video.MediaSourceCount;
}
}
return LinkedAlternateVersions.Length + LocalAlternateVersions.Length + 1;
return GetMediaSourceCount();
}
}
@ -259,6 +250,27 @@ namespace MediaBrowser.Controller.Entities
[JsonIgnore]
public override MediaType MediaType => MediaType.Video;
private int GetMediaSourceCount(HashSet<Guid> callstack = null)
{
callstack ??= new();
if (!string.IsNullOrEmpty(PrimaryVersionId))
{
var item = LibraryManager.GetItemById(PrimaryVersionId);
if (item is Video video)
{
if (callstack.Contains(video.Id))
{
return video.LinkedAlternateVersions.Length + video.LocalAlternateVersions.Length + 1;
}
callstack.Add(video.Id);
return video.GetMediaSourceCount(callstack);
}
}
return LinkedAlternateVersions.Length + LocalAlternateVersions.Length + 1;
}
public override List<string> GetUserDataKeys()
{
var list = base.GetUserDataKeys();