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; } }