< Summary - Jellyfin

Information
Class: MediaBrowser.LocalMetadata.Parsers.PlaylistXmlParser
Assembly: MediaBrowser.LocalMetadata
File(s): /srv/git/jellyfin/MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 34
Coverable lines: 34
Total lines: 113
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 20
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

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
FetchDataFromXmlNode(...)0%7280%
FetchFromCollectionItemsNode(...)0%156120%

File(s)

/srv/git/jellyfin/MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.Xml;
 4using Jellyfin.Data.Enums;
 5using MediaBrowser.Controller.Entities;
 6using MediaBrowser.Controller.Extensions;
 7using MediaBrowser.Controller.Playlists;
 8using MediaBrowser.Controller.Providers;
 9using Microsoft.Extensions.Logging;
 10
 11namespace MediaBrowser.LocalMetadata.Parsers
 12{
 13    /// <summary>
 14    /// Playlist xml parser.
 15    /// </summary>
 16    public class PlaylistXmlParser : BaseItemXmlParser<Playlist>
 17    {
 18        /// <summary>
 19        /// Initializes a new instance of the <see cref="PlaylistXmlParser"/> class.
 20        /// </summary>
 21        /// <param name="logger">Instance of the <see cref="ILogger{PlaylistXmlParser}"/> interface.</param>
 22        /// <param name="providerManager">Instance of the <see cref="IProviderManager"/> interface.</param>
 23        public PlaylistXmlParser(ILogger<PlaylistXmlParser> logger, IProviderManager providerManager)
 024            : base(logger, providerManager)
 25        {
 026        }
 27
 28        /// <inheritdoc />
 29        protected override void FetchDataFromXmlNode(XmlReader reader, MetadataResult<Playlist> itemResult)
 30        {
 031            var item = itemResult.Item;
 32
 033            switch (reader.Name)
 34            {
 35                case "PlaylistMediaType":
 036                    if (Enum.TryParse<MediaType>(reader.ReadNormalizedString(), out var mediaType))
 37                    {
 038                        item.PlaylistMediaType = mediaType;
 39                    }
 40
 041                    break;
 42                case "PlaylistItems":
 43
 044                    if (!reader.IsEmptyElement)
 45                    {
 046                        using (var subReader = reader.ReadSubtree())
 47                        {
 048                            FetchFromCollectionItemsNode(subReader, item);
 049                        }
 50                    }
 51                    else
 52                    {
 053                        reader.Read();
 54                    }
 55
 056                    break;
 57
 58                default:
 059                    base.FetchDataFromXmlNode(reader, itemResult);
 60                    break;
 61            }
 062        }
 63
 64        private void FetchFromCollectionItemsNode(XmlReader reader, Playlist item)
 65        {
 066            var list = new List<LinkedChild>();
 67
 068            reader.MoveToContent();
 069            reader.Read();
 70
 71            // Loop through each element
 072            while (!reader.EOF && reader.ReadState == ReadState.Interactive)
 73            {
 074                if (reader.NodeType == XmlNodeType.Element)
 75                {
 076                    switch (reader.Name)
 77                    {
 78                        case "PlaylistItem":
 79                        {
 080                            if (reader.IsEmptyElement)
 81                            {
 082                                reader.Read();
 083                                continue;
 84                            }
 85
 086                            using (var subReader = reader.ReadSubtree())
 87                            {
 088                                var child = GetLinkedChild(subReader);
 89
 090                                if (child is not null)
 91                                {
 092                                    list.Add(child);
 93                                }
 094                            }
 95
 96                            break;
 97                        }
 98
 99                        default:
 0100                            reader.Skip();
 0101                            break;
 102                    }
 103                }
 104                else
 105                {
 0106                    reader.Read();
 107                }
 108            }
 109
 0110            item.LinkedChildren = list.ToArray();
 0111        }
 112    }
 113}