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