| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | #pragma warning disable CS1591using System;using System.IO;using System.Linq;using MediaBrowser.Controller.Library;using MediaBrowser.Controller.Playlists;using MediaBrowser.Controller.Resolvers;using MediaBrowser.LocalMetadata.Savers;using MediaBrowser.Model.Entities;namespace Emby.Server.Implementations.Library.Resolvers{    /// <summary>    /// <see cref="IItemResolver"/> for <see cref="Playlist"/> library items.    /// </summary>    public class PlaylistResolver : FolderResolver<Playlist>    {        private string[] _musicPlaylistCollectionTypes = new string[] {            string.Empty,            CollectionType.Music        };        /// <inheritdoc/>        protected override Playlist Resolve(ItemResolveArgs args)        {            if (args.IsDirectory)            {                // It's a boxset if the path is a directory with [playlist] in it's the name                // TODO: Should this use Path.GetDirectoryName() instead?                bool isBoxSet = Path.GetFileName(args.Path)                    ?.Contains("[playlist]", StringComparison.OrdinalIgnoreCase)                    ?? false;                if (isBoxSet)                {                    return new Playlist                    {                        Path = args.Path,                        Name = Path.GetFileName(args.Path).Replace("[playlist]", string.Empty, StringComparison.OrdinalIgnoreCase).Trim()                    };                }                // It's a directory-based playlist if the directory contains a playlist file                var filePaths = Directory.EnumerateFiles(args.Path);                if (filePaths.Any(f => f.EndsWith(PlaylistXmlSaver.DefaultPlaylistFilename, StringComparison.OrdinalIgnoreCase)))                {                    return new Playlist                    {                        Path = args.Path,                        Name = Path.GetFileName(args.Path)                    };                }            }            // Check if this is a music playlist file            // It should have the correct collection type and a supported file extension            else if (_musicPlaylistCollectionTypes.Contains(args.CollectionType ?? string.Empty, StringComparer.OrdinalIgnoreCase))            {                var extension = Path.GetExtension(args.Path);                if (Playlist.SupportedExtensions.Contains(extension ?? string.Empty, StringComparer.OrdinalIgnoreCase))                {                    return new Playlist                    {                        Path = args.Path,                        Name = Path.GetFileNameWithoutExtension(args.Path),                        IsInMixedFolder = true                    };                }            }            return null;        }    }}
 |