using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using OwlCore.AbstractStorage; using OwlCore.Extensions; using Windows.Storage; using CreationCollisionOption = OwlCore.AbstractStorage.CreationCollisionOption; namespace StrixMusic.Sdk.WinUI.Models { /// public class FolderData : IFolderData { /// /// The underlying instance in use. /// public StorageFolder StorageFolder { get; private set; } /// /// Constructs a new instance of . /// public FolderData(StorageFolder folder) { StorageFolder = folder; Id = folder.Path.HashMD5Fast(); } /// public string Name => StorageFolder.Name; /// public string Path => StorageFolder.Path; /// public string? Id { get; set; } /// public async Task> GetFilesAsync() { var files = await StorageFolder.GetFilesAsync(); return files.Select(x => new FileData(x)).ToArray(); } /// public Task DeleteAsync() => StorageFolder.DeleteAsync().AsTask(); /// public async Task GetParentAsync() { var storageFolder = await StorageFolder.GetParentAsync(); return new FolderData(storageFolder); } /// public async Task CreateFolderAsync(string desiredName) { var storageFolder = await StorageFolder.CreateFolderAsync(desiredName); return new FolderData(storageFolder); } /// public async Task CreateFolderAsync(string desiredName, CreationCollisionOption options) { var collisionOptions = (Windows.Storage.CreationCollisionOption)Enum.Parse(typeof(Windows.Storage.CreationCollisionOption), options.ToString()); var storageFolder = await StorageFolder.CreateFolderAsync(desiredName, collisionOptions); return new FolderData(storageFolder); } /// public async Task CreateFileAsync(string desiredName) { var storageFile = await StorageFolder.CreateFileAsync(desiredName); return new FileData(storageFile); } /// public async Task CreateFileAsync(string desiredName, CreationCollisionOption options) { var collisionOptions = (Windows.Storage.CreationCollisionOption)Enum.Parse(typeof(Windows.Storage.CreationCollisionOption), options.ToString()); var storageFile = await StorageFolder.CreateFileAsync(desiredName, collisionOptions); return new FileData(storageFile); } /// public async Task GetFolderAsync(string name) { var folderData = await StorageFolder.GetFolderAsync(name); return new FolderData(folderData); } /// public async Task GetFileAsync(string name) { var fileData = await StorageFolder.GetFileAsync(name); return new FileData(fileData); } /// public async Task> GetFoldersAsync() { var foldersData = await StorageFolder.GetFoldersAsync(); return foldersData.Select(x => new FolderData(x)); } /// public async Task EnsureExists() { try { _ = StorageFolder.GetFolderFromPathAsync(StorageFolder.Path); } catch { StorageFolder = await StorageFolder.CreateFolderAsync(StorageFolder.Name); } } } }