LANCommander/LANCommander.Server/UI/Pages/Games/Components/ImportUploadDialog.razor
2025-02-16 10:08:05 -06:00

128 lines
No EOL
3.6 KiB
Text

@inherits FeedbackComponent<ImportDialogOptions>
@inject GameService GameService
@inject ImportService<Game> ImportService
@inject IMessageService MessageService
@inject ILogger<ImportUploadDialog> Logger
<Flex Vertical Gap="FlexGap.Small">
<ChunkUploader
@ref="ChunkUploader"
Accept=".lcx"
@bind-File="File"
@bind-Status="Status"
StorageLocationId="StorageLocation.Id"
OnUploadCompleted="OnUploadCompleted"
OnUploadError="OnUploadError">
<Text>
<p>Drag and Drop</p>
<p>or</p>
<p>
<Button Type="@ButtonType.Primary" Style="margin-top: 8px;">Browse</Button>
</p>
</Text>
<Hint>@Options.Hint</Hint>
</ChunkUploader>
<StorageLocationSelector @bind-Value="StorageLocation" Type="StorageLocationType.Archive"/>
</Flex>
<Flex Justify="FlexJustify.End" Gap="FlexGap.Small" Style="margin-top: 16px;">
<FilePickerButton
EntrySelectable="@(entry => !String.IsNullOrWhiteSpace(entry.Name) && entry.Name.ToLower().EndsWith(".lcx"))"
OnSelected="OnLocalFileSelected"
Root="@RootPath"
Disabled="@(Status != "")">
Use Local File
</FilePickerButton>
<Button OnClick="Start" Disabled="@(File == null || Status != "")" Type="@ButtonType.Primary">Upload</Button>
<Button OnClick="Cancel">Cancel</Button>
</Flex>
@code {
IBrowserFile File;
ChunkUploader ChunkUploader;
StorageLocation StorageLocation = new();
string RootPath = Path.GetPathRoot(Directory.GetCurrentDirectory());
bool IsValid = false;
string Filename;
string Status;
async Task Start()
{
await ChunkUploader.Start();
}
async Task Clear()
{
await ChunkUploader.Clear();
}
async Task Cancel()
{
await ChunkUploader.Clear();
await CloseFeedbackAsync();
}
public async Task OnUploadCompleted(string data)
{
if (Guid.TryParse(data, out var objectKey))
{
try
{
var game = await ImportService.ImportFromUploadArchiveAsync(objectKey);
await InvokeAsync(StateHasChanged);
MessageService.Success($"{game.Title} successfully imported!");
await CloseFeedbackAsync();
}
catch (Exception ex)
{
Logger?.LogError(ex, "An unknown error occurred while trying to import");
MessageService.Error("An unknown error occurred while trying to import");
}
}
else
{
await InvokeAsync(StateHasChanged);
MessageService.Error("Import file failed to upload!");
await CloseFeedbackAsync();
}
await Clear();
}
public async Task OnUploadError(string message)
{
await InvokeAsync(StateHasChanged);
MessageService.Error("An error occurred while trying to import");
Logger?.LogError($"An error occurred while trying to import: {message}");
await CloseFeedbackAsync();
}
public async Task OnLocalFileSelected(string path)
{
try
{
var game = await ImportService.ImportFromLocalFileAsync(path);
await InvokeAsync(StateHasChanged);
MessageService.Success($"{game.Title} successfully imported!");
await CloseFeedbackAsync();
}
catch (Exception ex)
{
Logger?.LogError(ex, "An unknown error occurred while trying to import");
MessageService.Error("An unknown error occurred while trying to import");
}
}
}