< Summary - Jellyfin

Information
Class: Emby.Server.Implementations.Library.Resolvers.PlaylistResolver
Assembly: Emby.Server.Implementations
File(s): /srv/git/jellyfin/Emby.Server.Implementations/Library/Resolvers/PlaylistResolver.cs
Line coverage
41%
Covered lines: 15
Uncovered lines: 21
Coverable lines: 36
Total lines: 82
Line coverage: 41.6%
Branch coverage
66%
Covered branches: 8
Total branches: 12
Branch coverage: 66.6%
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%11100%
Resolve(...)66.66%56.781232.25%

File(s)

/srv/git/jellyfin/Emby.Server.Implementations/Library/Resolvers/PlaylistResolver.cs

#LineLine coverage
 1#nullable disable
 2
 3using System;
 4using System.IO;
 5using System.Linq;
 6using Jellyfin.Data.Enums;
 7using Jellyfin.Extensions;
 8using MediaBrowser.Controller.Library;
 9using MediaBrowser.Controller.Playlists;
 10using MediaBrowser.Controller.Resolvers;
 11using MediaBrowser.LocalMetadata.Savers;
 12
 13namespace Emby.Server.Implementations.Library.Resolvers
 14{
 15    /// <summary>
 16    /// <see cref="IItemResolver"/> for <see cref="Playlist"/> library items.
 17    /// </summary>
 18    public class PlaylistResolver : GenericFolderResolver<Playlist>
 19    {
 2220        private readonly CollectionType?[] _musicPlaylistCollectionTypes =
 2221        [
 2222            null,
 2223            CollectionType.music
 2224        ];
 25
 26        /// <inheritdoc/>
 27        protected override Playlist Resolve(ItemResolveArgs args)
 28        {
 4929            if (args.IsDirectory)
 30            {
 31                // It's a boxset if the path is a directory with [playlist] in its name
 4632                var filename = Path.GetFileName(Path.TrimEndingDirectorySeparator(args.Path));
 4633                if (string.IsNullOrEmpty(filename))
 34                {
 035                    return null;
 36                }
 37
 4638                if (filename.Contains("[playlist]", StringComparison.OrdinalIgnoreCase))
 39                {
 040                    return new Playlist
 041                    {
 042                        Path = args.Path,
 043                        Name = filename.Replace("[playlist]", string.Empty, StringComparison.OrdinalIgnoreCase).Trim(),
 044                        OpenAccess = true
 045                    };
 46                }
 47
 48                // It's a directory-based playlist if the directory contains a playlist file
 4649                var filePaths = Directory.EnumerateFiles(args.Path, "*", new EnumerationOptions { IgnoreInaccessible = t
 4650                if (filePaths.Any(f => f.EndsWith(PlaylistXmlSaver.DefaultPlaylistFilename, StringComparison.OrdinalIgno
 51                {
 052                    return new Playlist
 053                    {
 054                        Path = args.Path,
 055                        Name = filename,
 056                        OpenAccess = true
 057                    };
 58                }
 59            }
 60
 61            // Check if this is a music playlist file
 62            // It should have the correct collection type and a supported file extension
 363            else if (_musicPlaylistCollectionTypes.Contains(args.CollectionType))
 64            {
 365                var extension = Path.GetExtension(args.Path.AsSpan());
 366                if (Playlist.SupportedExtensions.Contains(extension, StringComparison.OrdinalIgnoreCase))
 67                {
 068                    return new Playlist
 069                    {
 070                        Path = args.Path,
 071                        Name = Path.GetFileNameWithoutExtension(args.Path),
 072                        IsInMixedFolder = true,
 073                        PlaylistMediaType = MediaType.Audio,
 074                        OpenAccess = true
 075                    };
 76                }
 77            }
 78
 4979            return null;
 80        }
 81    }
 82}