aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/Entities/Video.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Controller/Entities/Video.cs')
-rw-r--r--MediaBrowser.Controller/Entities/Video.cs32
1 files changed, 22 insertions, 10 deletions
diff --git a/MediaBrowser.Controller/Entities/Video.cs b/MediaBrowser.Controller/Entities/Video.cs
index 04f47b729..1043029c6 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<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();