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;
///
/// TV Series folder item from Cinema.
///
public sealed class CinemaTvSeries : Series, ICinemaChildrenCount
{
private CinemaSubfolderHelper _helper;
public CinemaTvSeries()
{
this._helper = new CinemaSubfolderHelper(this, FilterSortBy.Episode);
}
public override List GetUserDataKeys()
{
return new List() { 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;
}
///
/// Always false as it causes iteration of all our items that degrades performance
/// in the CinemaTvShowsFolder.
///
public override bool SupportsPlayedStatus => false;
///
/// Let the hack in find us.
///
public override string CreatePresentationUniqueKey() => Id.ToString("N", CultureInfo.InvariantCulture);
public override List GetChildren(User user, bool includeLinkedChildren, InternalItemsQuery query)
{
return (List)GetItemsInternal(query).Items;
}
protected override QueryResult GetItemsInternal(InternalItemsQuery query)
{
QueryResult result = _helper.GetItemsInternal(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;
}
}