Files
mixtape/zero.Core/Media/MediaManagementExtensions.cs
T

121 lines
3.7 KiB
C#
Raw Normal View History

using Microsoft.AspNetCore.Http;
using System.IO;
namespace zero.Media
2021-11-25 15:38:36 +01:00
{
public static class MediaManagementExtensions
{
2021-11-26 11:21:49 +01:00
/// <summary>
/// Get publicly accessible file path for a media file
/// </summary>
/// <param name="mediaId">ID of a media file</param>
/// <param name="thumbnailKey">An optional thumbnail key which returns the path to a generated thumbnail</param>
public static async Task<string> GetPublicFilePath(this IMediaManagement media, string mediaId, string thumbnailKey = null)
{
Media file = await media.GetFile(mediaId);
if (file == null)
{
return null;
}
return media.GetPublicFilePath(file, thumbnailKey);
}
2021-12-09 14:36:30 +01:00
/// <summary>
/// Get file stream for a media file (stream has to be disposed manually)
/// </summary>
public static async Task<Stream> GetFileStream(this IMediaManagement media, string mediaId, string thumbnailKey = null)
{
Media file = await media.GetFile(mediaId);
if (file == null)
{
return null;
}
return await media.GetFileStream(file, thumbnailKey);
}
/// <summary>
/// Uploads a file and persists it
/// </summary>
2021-11-26 15:47:11 +01:00
public static async Task<Result<Media>> UploadFile(this IMediaManagement media, IFormFile formFile, string folderId = null, CancellationToken cancellationToken = default)
{
using Stream stream = formFile.OpenReadStream();
return await media.UploadFile(stream, formFile.FileName, folderId, cancellationToken);
}
/// <summary>
/// Uploads a file and persists it
/// </summary>
2021-11-26 15:47:11 +01:00
public static async Task<Result<Media>> UploadFile(this IMediaManagement media, byte[] fileBytes, string filename, string folderId = null, CancellationToken cancellationToken = default)
{
using Stream stream = new MemoryStream(fileBytes);
return await media.UploadFile(stream, filename, folderId, cancellationToken);
}
2021-11-25 15:38:36 +01:00
/// <summary>
/// Rename and store a media folder
/// </summary>
2021-11-26 15:47:11 +01:00
public static async Task<Result<Media>> RenameFolder(this IMediaManagement media, Media folder, string newName)
2021-11-25 15:38:36 +01:00
{
folder.Name = newName;
return await media.UpdateFolder(folder);
}
/// <summary>
/// Rename and store a media folder
/// </summary>
2021-11-26 15:47:11 +01:00
public static async Task<Result<Media>> RenameFolder(this IMediaManagement media, string folderId, string newName)
2021-11-25 15:38:36 +01:00
{
Media folder = await media.GetFolder(folderId);
if (folder == null)
{
2021-11-26 15:47:11 +01:00
return Result<Media>.Fail("@errors.idnotfound");
2021-11-25 15:38:36 +01:00
}
return await RenameFolder(media, folder, newName);
}
/// <summary>
/// Move a media folder to a new parent
/// </summary>
2021-11-26 15:47:11 +01:00
public static async Task<Result<Media>> MoveFolder(this IMediaManagement media, Media folder, string newParentId)
2021-11-25 15:38:36 +01:00
{
folder.ParentId = newParentId;
return await media.UpdateFolder(folder);
}
/// <summary>
/// Move a media folder to a new parent
/// </summary>
2021-11-26 15:47:11 +01:00
public static async Task<Result<Media>> MoveFolder(this IMediaManagement media, string folderId, string newParentId)
2021-11-25 15:38:36 +01:00
{
Media folder = await media.GetFolder(folderId);
if (folder == null)
{
2021-11-26 15:47:11 +01:00
return Result<Media>.Fail("@errors.idnotfound");
2021-11-25 15:38:36 +01:00
}
return await MoveFolder(media, folder, newParentId);
}
/// <summary>
/// Deletes a folder by id
/// </summary>
2021-11-26 15:47:11 +01:00
public static async Task<Result<string[]>> DeleteFolder(this IMediaManagement media, string folderId)
2021-11-25 15:38:36 +01:00
{
Media folder = await media.GetFolder(folderId);
if (folder == null)
{
2021-11-26 15:47:11 +01:00
return Result<string[]>.Fail("@errors.idnotfound");
2021-11-25 15:38:36 +01:00
}
return await media.DeleteFolder(folder);
}
}
}