< Summary - Jellyfin

Information
Class: MediaBrowser.XbmcMetadata.Parsers.SeriesNfoParser
Assembly: MediaBrowser.XbmcMetadata
File(s): /srv/git/jellyfin/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs
Line coverage
88%
Covered lines: 24
Uncovered lines: 3
Coverable lines: 27
Total lines: 105
Line coverage: 88.8%
Branch coverage
83%
Covered branches: 15
Total branches: 18
Branch coverage: 83.3%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

0255075100

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
get_SupportsUrlAfterClosingXmlTag()100%11100%
FetchDataFromXmlNode(...)83.33%191887.5%

File(s)

/srv/git/jellyfin/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs

#LineLine coverage
 1using System;
 2using System.Globalization;
 3using System.Xml;
 4using Emby.Naming.TV;
 5using MediaBrowser.Common.Configuration;
 6using MediaBrowser.Controller.Entities.TV;
 7using MediaBrowser.Controller.Extensions;
 8using MediaBrowser.Controller.Library;
 9using MediaBrowser.Controller.Providers;
 10using MediaBrowser.Model.Entities;
 11using Microsoft.Extensions.Logging;
 12
 13namespace MediaBrowser.XbmcMetadata.Parsers
 14{
 15    /// <summary>
 16    /// Nfo parser for series.
 17    /// </summary>
 18    public class SeriesNfoParser : BaseNfoParser<Series>
 19    {
 20        /// <summary>
 21        /// Initializes a new instance of the <see cref="SeriesNfoParser"/> class.
 22        /// </summary>
 23        /// <param name="logger">Instance of the <see cref="ILogger"/> interface.</param>
 24        /// <param name="config">Instance of the <see cref="IConfigurationManager"/> interface.</param>
 25        /// <param name="providerManager">Instance of the <see cref="IProviderManager"/> interface.</param>
 26        /// <param name="userManager">Instance of the <see cref="IUserManager"/> interface.</param>
 27        /// <param name="userDataManager">Instance of the <see cref="IUserDataManager"/> interface.</param>
 28        /// <param name="directoryService">Instance of the <see cref="IDirectoryService"/> interface.</param>
 29        public SeriesNfoParser(
 30            ILogger logger,
 31            IConfigurationManager config,
 32            IProviderManager providerManager,
 33            IUserManager userManager,
 34            IUserDataManager userDataManager,
 35            IDirectoryService directoryService)
 436            : base(logger, config, providerManager, userManager, userDataManager, directoryService)
 37        {
 438        }
 39
 40        /// <inheritdoc />
 241        protected override bool SupportsUrlAfterClosingXmlTag => true;
 42
 43        /// <inheritdoc />
 44        protected override void FetchDataFromXmlNode(XmlReader reader, MetadataResult<Series> itemResult)
 45        {
 11746            var item = itemResult.Item;
 47
 11748            switch (reader.Name)
 49            {
 50                case "id":
 51                    {
 52                        // Get ids from attributes
 153                        item.TrySetProviderId(MetadataProvider.Tmdb, reader.GetAttribute("TMDB"));
 154                        item.TrySetProviderId(MetadataProvider.Tvdb, reader.GetAttribute("TVDB"));
 155                        string? imdbId = reader.GetAttribute("IMDB");
 56
 57                        // Read id from content
 58                        // Content can be arbitrary according to Kodi wiki, so only parse if we are sure it matches a pr
 159                        var contentId = reader.ReadElementContentAsString();
 160                        if (string.IsNullOrEmpty(imdbId) && contentId.StartsWith("tt", StringComparison.Ordinal))
 61                        {
 062                            imdbId = contentId;
 63                        }
 64
 165                        item.TrySetProviderId(MetadataProvider.Imdb, imdbId);
 66
 167                        break;
 68                    }
 69
 70                case "airs_dayofweek":
 171                    item.AirDays = TVUtils.GetAirDays(reader.ReadElementContentAsString());
 172                    break;
 73                case "airs_time":
 174                    item.AirTime = reader.ReadNormalizedString();
 175                    break;
 76                case "status":
 77                    {
 178                        var status = reader.ReadElementContentAsString();
 79
 180                        if (!string.IsNullOrWhiteSpace(status))
 81                        {
 182                            if (TvParserHelpers.TryParseSeriesStatus(status, out var seriesStatus))
 83                            {
 184                                item.Status = seriesStatus;
 85                            }
 86                            else
 87                            {
 088                                Logger.LogInformation("Unrecognized series status: {Status}", status);
 89                            }
 90                        }
 91
 092                        break;
 93                    }
 94
 95                // Season names are processed by SeriesNfoSeasonParser
 96                case "namedseason":
 297                    reader.Skip();
 298                    break;
 99                default:
 111100                    base.FetchDataFromXmlNode(reader, itemResult);
 101                    break;
 102            }
 111103        }
 104    }
 105}