diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs
index bb0b26b8e2..275fdac2eb 100644
--- a/MediaBrowser.Controller/Entities/BaseItem.cs
+++ b/MediaBrowser.Controller/Entities/BaseItem.cs
@@ -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
/// The remote trailers.
public IReadOnlyList RemoteTrailers { get; set; }
+ private string GetCustomRatingForComparision(HashSet 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;
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs
index 06cbcc2e18..082cf39fac 100644
--- a/MediaBrowser.Controller/Entities/Folder.cs
+++ b/MediaBrowser.Controller/Entities/Folder.cs
@@ -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);
}
}
}
diff --git a/MediaBrowser.Controller/Entities/Video.cs b/MediaBrowser.Controller/Entities/Video.cs
index 04f47b729d..1043029c6e 100644
--- a/MediaBrowser.Controller/Entities/Video.cs
+++ b/MediaBrowser.Controller/Entities/Video.cs
@@ -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 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 GetUserDataKeys()
{
var list = base.GetUserDataKeys();