< Summary - Jellyfin

Information
Class: MediaBrowser.Controller.Entities.TV.Season
Assembly: MediaBrowser.Controller
File(s): /srv/git/jellyfin/MediaBrowser.Controller/Entities/TV/Season.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 68
Coverable lines: 68
Total lines: 270
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 36
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100

Metrics

File(s)

/srv/git/jellyfin/MediaBrowser.Controller/Entities/TV/Season.cs

#LineLine coverage
 1#nullable disable
 2
 3#pragma warning disable CS1591
 4
 5using System;
 6using System.Collections.Generic;
 7using System.Globalization;
 8using System.Linq;
 9using System.Text.Json.Serialization;
 10using Jellyfin.Data.Entities;
 11using Jellyfin.Data.Enums;
 12using Jellyfin.Extensions;
 13using MediaBrowser.Controller.Dto;
 14using MediaBrowser.Controller.Providers;
 15using MediaBrowser.Model.Querying;
 16
 17namespace MediaBrowser.Controller.Entities.TV
 18{
 19    /// <summary>
 20    /// Class Season.
 21    /// </summary>
 22    public class Season : Folder, IHasSeries, IHasLookupInfo<SeasonInfo>
 23    {
 24        [JsonIgnore]
 025        public override bool SupportsAddingToPlaylist => true;
 26
 27        [JsonIgnore]
 028        public override bool IsPreSorted => true;
 29
 30        [JsonIgnore]
 031        public override bool SupportsDateLastMediaAdded => false;
 32
 33        [JsonIgnore]
 034        public override bool SupportsPeople => true;
 35
 36        [JsonIgnore]
 037        public override bool SupportsInheritedParentImages => true;
 38
 39        [JsonIgnore]
 040        public override Guid DisplayParentId => SeriesId;
 41
 42        /// <summary>
 43        /// Gets this Episode's Series Instance.
 44        /// </summary>
 45        /// <value>The series.</value>
 46        [JsonIgnore]
 47        public Series Series
 48        {
 49            get
 50            {
 051                var seriesId = SeriesId;
 052                if (seriesId.IsEmpty())
 53                {
 054                    seriesId = FindSeriesId();
 55                }
 56
 057                return seriesId.IsEmpty() ? null : (LibraryManager.GetItemById(seriesId) as Series);
 58            }
 59        }
 60
 61        [JsonIgnore]
 62        public string SeriesPath
 63        {
 64            get
 65            {
 066                var series = Series;
 67
 068                if (series is not null)
 69                {
 070                    return series.Path;
 71                }
 72
 073                return System.IO.Path.GetDirectoryName(Path);
 74            }
 75        }
 76
 77        [JsonIgnore]
 78        public string SeriesPresentationUniqueKey { get; set; }
 79
 80        [JsonIgnore]
 81        public string SeriesName { get; set; }
 82
 83        [JsonIgnore]
 84        public Guid SeriesId { get; set; }
 85
 86        public override double GetDefaultPrimaryImageAspectRatio()
 87        {
 088            double value = 2;
 089            value /= 3;
 90
 091            return value;
 92        }
 93
 94        public string FindSeriesSortName()
 95        {
 096            var series = Series;
 097            return series is null ? SeriesName : series.SortName;
 98        }
 99
 100        public override List<string> GetUserDataKeys()
 101        {
 0102            var list = base.GetUserDataKeys();
 103
 0104            var series = Series;
 0105            if (series is not null)
 106            {
 0107                var newList = series.GetUserDataKeys();
 0108                var suffix = (IndexNumber ?? 0).ToString("000", CultureInfo.InvariantCulture);
 0109                for (int i = 0; i < newList.Count; i++)
 110                {
 0111                    newList[i] = newList[i] + suffix;
 112                }
 113
 0114                newList.AddRange(list);
 0115                list = newList;
 116            }
 117
 0118            return list;
 119        }
 120
 121        public override int GetChildCount(User user)
 122        {
 0123            var result = GetChildren(user, true).Count;
 124
 0125            return result;
 126        }
 127
 128        public override string CreatePresentationUniqueKey()
 129        {
 0130            if (IndexNumber.HasValue)
 131            {
 0132                var series = Series;
 0133                if (series is not null)
 134                {
 0135                    return series.PresentationUniqueKey + "-" + (IndexNumber ?? 0).ToString("000", CultureInfo.Invariant
 136                }
 137            }
 138
 0139            return base.CreatePresentationUniqueKey();
 140        }
 141
 142        /// <summary>
 143        /// Creates the name of the sort.
 144        /// </summary>
 145        /// <returns>System.String.</returns>
 146        protected override string CreateSortName()
 147        {
 0148            return IndexNumber is not null ? IndexNumber.Value.ToString("0000", CultureInfo.InvariantCulture) : Name;
 149        }
 150
 151        protected override QueryResult<BaseItem> GetItemsInternal(InternalItemsQuery query)
 152        {
 0153            if (query.User is null)
 154            {
 0155                return base.GetItemsInternal(query);
 156            }
 157
 0158            var user = query.User;
 159
 0160            Func<BaseItem, bool> filter = i => UserViewBuilder.Filter(i, user, query, UserDataManager, LibraryManager);
 161
 0162            var items = GetEpisodes(user, query.DtoOptions, true).Where(filter);
 163
 0164            return PostFilterAndSort(items, query, false);
 165        }
 166
 167        /// <summary>
 168        /// Gets the episodes.
 169        /// </summary>
 170        /// <param name="user">The user.</param>
 171        /// <param name="options">The options to use.</param>
 172        /// <param name="shouldIncludeMissingEpisodes">If missing episodes should be included.</param>
 173        /// <returns>Set of episodes.</returns>
 174        public List<BaseItem> GetEpisodes(User user, DtoOptions options, bool shouldIncludeMissingEpisodes)
 175        {
 0176            return GetEpisodes(Series, user, options, shouldIncludeMissingEpisodes);
 177        }
 178
 179        public List<BaseItem> GetEpisodes(Series series, User user, DtoOptions options, bool shouldIncludeMissingEpisode
 180        {
 0181            return GetEpisodes(series, user, null, options, shouldIncludeMissingEpisodes);
 182        }
 183
 184        public List<BaseItem> GetEpisodes(Series series, User user, IEnumerable<Episode> allSeriesEpisodes, DtoOptions o
 185        {
 0186            return series.GetSeasonEpisodes(this, user, allSeriesEpisodes, options, shouldIncludeMissingEpisodes);
 187        }
 188
 189        public List<BaseItem> GetEpisodes()
 190        {
 0191            return Series.GetSeasonEpisodes(this, null, null, new DtoOptions(true), true);
 192        }
 193
 194        public override List<BaseItem> GetChildren(User user, bool includeLinkedChildren, InternalItemsQuery query)
 195        {
 0196            return GetEpisodes(user, new DtoOptions(true), true);
 197        }
 198
 199        protected override bool GetBlockUnratedValue(User user)
 200        {
 201            // Don't block. Let either the entire series rating or episode rating determine it
 0202            return false;
 203        }
 204
 205        public override UnratedItem GetBlockUnratedType()
 206        {
 0207            return UnratedItem.Series;
 208        }
 209
 210        public string FindSeriesPresentationUniqueKey()
 211        {
 0212            var series = Series;
 0213            return series is null ? null : series.PresentationUniqueKey;
 214        }
 215
 216        public string FindSeriesName()
 217        {
 0218            var series = Series;
 0219            return series is null ? SeriesName : series.Name;
 220        }
 221
 222        public Guid FindSeriesId()
 223        {
 0224            var series = FindParent<Series>();
 0225            return series?.Id ?? Guid.Empty;
 226        }
 227
 228        /// <summary>
 229        /// Gets the lookup information.
 230        /// </summary>
 231        /// <returns>SeasonInfo.</returns>
 232        public SeasonInfo GetLookupInfo()
 233        {
 0234            var id = GetItemLookupInfo<SeasonInfo>();
 235
 0236            var series = Series;
 237
 0238            if (series is not null)
 239            {
 0240                id.SeriesProviderIds = series.ProviderIds;
 0241                id.SeriesDisplayOrder = series.DisplayOrder;
 242            }
 243
 0244            return id;
 245        }
 246
 247        /// <summary>
 248        /// This is called before any metadata refresh and returns true or false indicating if changes were made.
 249        /// </summary>
 250        /// <param name="replaceAllMetadata"><c>true</c> to replace metadata, <c>false</c> to not.</param>
 251        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
 252        public override bool BeforeMetadataRefresh(bool replaceAllMetadata)
 253        {
 0254            var hasChanges = base.BeforeMetadataRefresh(replaceAllMetadata);
 255
 0256            if (!IndexNumber.HasValue && !string.IsNullOrEmpty(Path))
 257            {
 0258                IndexNumber ??= LibraryManager.GetSeasonNumberFromPath(Path);
 259
 260                // If a change was made record it
 0261                if (IndexNumber.HasValue)
 262                {
 0263                    hasChanges = true;
 264                }
 265            }
 266
 0267            return hasChanges;
 268        }
 269    }
 270}