using MediaBrowser.Controller; namespace Jellyfin.Plugin.SmartPlaylist { public interface ISmartPlaylistFileSystem { public string StoragePath { get; } public string GetSmartPlaylistFilePath(SmartPlaylistId smartPlaylistId); public string FindSmartPlaylistFilePath(SmartPlaylistId smartPlaylistId); public string[] FindAllSmartPlaylistFilePaths(); } public class SmartPlaylistFileSystem : ISmartPlaylistFileSystem { public SmartPlaylistFileSystem(IServerApplicationPaths serverApplicationPaths) { StoragePath = Path.Combine(serverApplicationPaths.DataPath, "smartplaylists"); if (!Directory.Exists(StoragePath)) { Directory.CreateDirectory(StoragePath); } } public string StoragePath { get; } public string GetSmartPlaylistFilePath(SmartPlaylistId smartPlaylistId) { return Path.Combine(StoragePath, $"{smartPlaylistId}.yaml"); } public string FindSmartPlaylistFilePath(SmartPlaylistId smartPlaylistId) { return Directory.GetFiles(StoragePath, $"{smartPlaylistId}.yaml", SearchOption.AllDirectories).Concat( Directory.GetFiles(StoragePath, $"{smartPlaylistId}.yml", SearchOption.AllDirectories) ).Concat( Directory.GetFiles(StoragePath, $"{smartPlaylistId}.json", SearchOption.AllDirectories) ).First(); } public string[] FindAllSmartPlaylistFilePaths() { return Directory.GetFiles(StoragePath, "*.yaml", SearchOption.AllDirectories).Concat( Directory.GetFiles(StoragePath, "*.yml", SearchOption.AllDirectories) ).Concat( Directory.GetFiles(StoragePath, "*.json", SearchOption.AllDirectories) ).ToArray(); } } }