12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- #nullable disable
- #pragma warning disable CS1591
- using System;
- using System.IO;
- using System.Linq;
- using Jellyfin.Extensions;
- 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 : GenericFolderResolver<Playlist>
- {
- private string[] _musicPlaylistCollectionTypes =
- {
- 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, "*", new EnumerationOptions { IgnoreInaccessible = true });
- 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, StringComparison.OrdinalIgnoreCase))
- {
- var extension = Path.GetExtension(args.Path);
- if (Playlist.SupportedExtensions.Contains(extension ?? string.Empty, StringComparison.OrdinalIgnoreCase))
- {
- return new Playlist
- {
- Path = args.Path,
- Name = Path.GetFileNameWithoutExtension(args.Path),
- IsInMixedFolder = true,
- PlaylistMediaType = MediaType.Audio
- };
- }
- }
- return null;
- }
- }
- }
|