Files
stream-cinema/CinemaJellyfin/CinemaTvSeries.cs
2025-04-03 20:51:17 +00:00

86 lines
2.2 KiB
C#

using System.Globalization;
using CinemaLib.API;
using Jellyfin.Database.Implementations.Entities;
using Jellyfin.Data.Enums;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Model.Querying;
namespace Jellyfin.Plugin.Cinema;
/// <summary>
/// TV Series folder item from Cinema.
/// </summary>
public sealed class CinemaTvSeries : Series, ICinemaChildrenCount
{
private CinemaSubfolderHelper _helper;
public CinemaTvSeries()
{
this._helper = new CinemaSubfolderHelper(this, FilterSortBy.Episode);
}
public override List<string> GetUserDataKeys()
{
return new List<string>() { ExternalId };
}
#region ICinemaChildrenCountMembers
public int ChildrenCount
{
get => _helper.ChildrenCount;
set => _helper.ChildrenCount = value;
}
public int TotalChildrenCount
{
get => _helper.TotalChildrenCount;
set => _helper.TotalChildrenCount = value;
}
#endregion
public sealed override string GetClientTypeName() => BaseItemKind.Series.ToString();
public override int GetChildCount(User user)
{
return _helper.ChildrenCount;
}
public override int GetRecursiveChildCount(User user)
{
return _helper.TotalChildrenCount;
}
/// <summary>
/// Always false as it causes iteration of all our items that degrades performance
/// in the CinemaTvShowsFolder.
/// </summary>
public override bool SupportsPlayedStatus => false;
/// <summary>
/// Let the hack in <see cref="CinemaLibraryManager"/> find us.
/// </summary>
public override string CreatePresentationUniqueKey() => Id.ToString("N", CultureInfo.InvariantCulture);
public override List<BaseItem> GetChildren(User user, bool includeLinkedChildren, InternalItemsQuery query)
{
return (List<BaseItem>)GetItemsInternal(query).Items;
}
protected override QueryResult<BaseItem> GetItemsInternal(InternalItemsQuery query)
{
QueryResult<BaseItem> result = _helper.GetItemsInternal<CinemaSeason>(query, true);
// Set series identifier on all seasons
foreach (var i in result.Items)
if (i is CinemaSeason season)
{
season.SeriesId = Id;
season.SeriesName = Name;
}
return result;
}
}