nft-faucet/NftFaucet/Pages/CreateTokenDialog.razor.cs
2022-10-02 18:19:28 -05:00

111 lines
3.2 KiB
C#

using MimeTypes;
using NftFaucet.Components;
using NftFaucet.Domain.Models;
using Radzen;
namespace NftFaucet.Pages;
public partial class CreateTokenDialog : BasicComponent
{
private NewFileModel Model { get; set; } = new NewFileModel();
private bool ModelIsValid => IsValid();
private void OnSavePressed()
{
if (!IsValid())
return;
var token = new Token
{
Id = Guid.NewGuid(),
Name = Model.Name,
Description = Model.Description,
CreatedAt = DateTime.Now,
MainFile = new TokenMedia
{
FileName = Model.MainFileName,
FileType = DetermineFileType(Model.MainFileName),
FileData = Model.MainFileData,
FileSize = Model.MainFileSize!.Value,
},
};
if (!string.IsNullOrEmpty(Model.CoverFileData) &&
!string.IsNullOrEmpty(Model.CoverFileName) &&
Model.CoverFileSize != null)
{
token.CoverFile = new TokenMedia
{
FileName = Model.CoverFileName,
FileType = DetermineFileType(Model.CoverFileName),
FileData = Model.CoverFileData,
FileSize = Model.CoverFileSize!.Value,
};
}
DialogService.Close(token);
}
private string DetermineFileType(string fileName)
{
var extension = fileName.Split('.', StringSplitOptions.RemoveEmptyEntries).Last();
if (!MimeTypeMap.TryGetMimeType(extension, out var mimeType))
{
return "application/octet-stream";
}
return mimeType;
}
private bool IsValid()
{
if (string.IsNullOrWhiteSpace(Model.Name))
return false;
if (string.IsNullOrWhiteSpace(Model.Description))
return false;
if (string.IsNullOrEmpty(Model.MainFileData))
return false;
if (string.IsNullOrEmpty(Model.MainFileName))
return false;
if (Model.MainFileSize is null or 0)
return false;
return true;
}
private void OnMainFileError(UploadErrorEventArgs args)
{
NotificationService.Notify(NotificationSeverity.Error, "File selection error", args.Message);
Model.MainFileData = null;
Model.MainFileName = null;
Model.MainFileSize = null;
Model.CoverFileData = null;
Model.CoverFileName = null;
Model.CoverFileSize = null;
}
private void OnCoverFileError(UploadErrorEventArgs args)
{
NotificationService.Notify(NotificationSeverity.Error, "File selection error", args.Message);
Model.CoverFileData = null;
Model.CoverFileName = null;
Model.CoverFileSize = null;
}
private class NewFileModel
{
public string Name { get; set; }
public string Description { get; set; }
public string MainFileData { get; set; }
public string MainFileName { get; set; }
public long? MainFileSize { get; set; }
public string CoverFileData { get; set; }
public string CoverFileName { get; set; }
public long? CoverFileSize { get; set; }
}
}