@using LANCommander.Launcher.Models
@namespace LANCommander.Launcher.UI
@inject InstallService InstallService
@inject LibraryService LibraryService
@inject GameClient GameClient
@inject NavigationManager NavigationManager
@inject LocalizationService LocalizationService
@inject ConfirmService ConfirmService
@inject ModalService ModalService
@inject ISettingsProvider SettingsProvider
@if (InstallService.Queue.Any(qi => qi.State))
{
@LocalizationService.GetString("InProgress")
@foreach (var queueItem in InstallService.Queue.Where(qi => qi.State))
{
}
}
@LocalizationService.GetString("UpNext")
@foreach (var queueItem in InstallService.Queue.Where(qi => !qi.State && qi.Status == SDK.Enums.InstallStatus.Queued))
{
}
@if (!InstallService.Queue.Any(qi => qi.Status == SDK.Enums.InstallStatus.Queued))
{
}
@if (InstallService.Queue.Any(qi => !qi.State && qi.Status != SDK.Enums.InstallStatus.Queued && qi.Status != SDK.Enums.InstallStatus.Failed && qi.Status != SDK.Enums.InstallStatus.Canceled))
{
@LocalizationService.GetString("Completed")
@foreach (var queueItem in InstallService.Queue.Where(qi => !qi.State))
{
}
}
@code {
bool Visible { get; set; } = false;
protected override void OnInitialized()
{
InstallService.OnInstallFail += OnInstallFail;
}
protected override async Task OnInitializedAsync()
{
InstallService.OnQueueChanged += async () =>
{
StateHasChanged();
};
}
async Task Cancel(IInstallQueueItem queueItem)
{
await InstallService.CancelInstallAsync(queueItem.Id);
}
async Task Remove(IInstallQueueItem queueItem)
{
InstallService.Remove(queueItem);
}
async Task ViewInLibrary(IInstallQueueItem queueItem)
{
Visible = false;
NavigationManager.NavigateTo("/" + queueItem.Id);
}
public async Task Show()
{
Visible = true;
await InvokeAsync(StateHasChanged);
}
public async Task Hide()
{
Visible = false;
await InvokeAsync(StateHasChanged);
}
async Task OnInstallFail(Data.Models.Game game)
{
var result = await ConfirmService.Show(
LocalizationService.GetString("InstallationFailedMessage", game.Title),
LocalizationService.GetString("InstallationFailed"),
ConfirmButtons.RetryCancel,
ConfirmIcon.Error
);
await LibraryService.LibraryChanged();
if (result == ConfirmResult.Retry)
{
var libraryItem = LibraryService.GetItem(game.Id);
Install(libraryItem);
}
}
async Task Install(Models.ListItem libraryItem)
{
var addons = await GameClient.GetAddonsAsync(libraryItem.Key);
if (SettingsProvider.CurrentValue.Games.InstallDirectories.Length > 1 || (addons != null && addons.Any()))
{
var modalOptions = new ModalOptions
{
Title = LocalizationService.GetString("InstallGame", libraryItem.Name),
Maximizable = false,
DefaultMaximized = false,
Closable = true,
OkText = LocalizationService.GetString("Install"),
Draggable = true,
Centered = true,
WrapClassName = "ant-modal-wrap-no-padding",
Footer = null,
};
var modalRef = ModalService.CreateModal(modalOptions, libraryItem);
}
else
{
await InstallService.Add(libraryItem.DataItem as Data.Models.Game);
}
}
}