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);
}
}
}
}