@using LANCommander.Launcher.Models
@using Photino.Blazor.CustomWindow.Components
@namespace LANCommander.Launcher.UI
@inherits LayoutComponentBase
@inject ImportService ImportService
@inject ProfileService ProfileService
@inject AuthenticationService AuthenticationService
@inject AuthenticationClient AuthenticationClient
@inject IMessageService MessageService
@inject NavigationManager NavigationManager
@inject ModalService ModalService
@inject IJSRuntime JS
@inject ImportManagerService ImportManagerService
@inject LocalizationService LocalizationService
@inject IConnectionClient ConnectionClient
@if (ImportStatus.IsActive)
{
}
else
{
if (ConnectionClient.IsOfflineMode())
{
}
else if (ConnectionClient.IsConnected())
{
}
}
@Body
@code {
public bool Importing;
public bool Connecting;
public IMessageService Messages { get; set; }
ImportHandler ImportHandler;
ImportHandler.ImportProgressEventArgs ImportStatus = new();
private ImportProgress _importProgress => ImportService.Progress;
string RandomQuip = "";
string[] _crashQuips;
protected override async Task OnInitializedAsync()
{
ConnectionClient.OnOfflineModeEnabled += OnOfflineModeChanged;
ConnectionClient.OnConnect += OnConnect;
if (await AuthenticationClient.ValidateTokenAsync())
{
await AuthenticationService.Login();
await ImportManagerService.RequestImport();
await InvokeAsync(StateHasChanged);
}
_crashQuips = new[]
{
LocalizationService.GetString("CrashQuip_YouDied"),
LocalizationService.GetString("CrashQuip_Snake"),
LocalizationService.GetString("CrashQuip_Wasted"),
LocalizationService.GetString("CrashQuip_MajorFracture"),
LocalizationService.GetString("CrashQuip_PastIsGapingHole"),
LocalizationService.GetString("CrashQuip_TownCenterDestroyed"),
LocalizationService.GetString("CrashQuip_ForcesUnderAttack"),
LocalizationService.GetString("CrashQuip_LostLead"),
LocalizationService.GetString("CrashQuip_TerroristsWin"),
LocalizationService.GetString("CrashQuip_WarNeverChanges"),
LocalizationService.GetString("CrashQuip_DiedOfDysentery"),
LocalizationService.GetString("CrashQuip_FailedToRestoreBooks"),
LocalizationService.GetString("CrashQuip_PlayerSplattered"),
LocalizationService.GetString("CrashQuip_BlameISP"),
LocalizationService.GetString("CrashQuip_BabaNoMore"),
LocalizationService.GetString("CrashQuip_GuestsLost"),
LocalizationService.GetString("CrashQuip_DarknessOvercome"),
LocalizationService.GetString("CrashQuip_GordonFreemanTerminated"),
LocalizationService.GetString("CrashQuip_MissionFailedSpotted"),
LocalizationService.GetString("CrashQuip_CriticalDamageEject"),
LocalizationService.GetString("CrashQuip_MinionsUnhappy"),
LocalizationService.GetString("CrashQuip_EmpireTriumphed"),
LocalizationService.GetString("CrashQuip_QuestEndedFailure"),
LocalizationService.GetString("CrashQuip_EatenByGrue"),
LocalizationService.GetString("CrashQuip_NoMessWithLoWang"),
LocalizationService.GetString("CrashQuip_SamKilled"),
LocalizationService.GetString("CrashQuip_AlienBastardsPay")
};
var randIndex = new Random().Next(0, _crashQuips.Length - 1);
RandomQuip = _crashQuips[randIndex];
}
private async void OnConnect(object? sender, EventArgs e)
{
await ImportManagerService.RequestImport();
}
public void Dispose()
{
if (ConnectionClient != null)
ConnectionClient.OnOfflineModeEnabled -= OnOfflineModeChanged;
}
async void OnOfflineModeChanged(object? sender, EventArgs eventArgs)
{
await InvokeAsync(StateHasChanged);
}
async void OnImportProcess(ImportHandler.ImportProgressEventArgs importProgress)
{
ImportStatus = importProgress;
await InvokeAsync(StateHasChanged);
}
async Task CopyError(Exception ex)
{
await JS.InvokeVoidAsync("navigator.clipboard.writeText", ex.Message + "\n" + ex.StackTrace);
MessageService.Info(LocalizationService.GetString("ErrorCopiedToClipboard"));
}
async Task Connect()
{
Connecting = true;
if (await ConnectionClient.ConnectAsync())
{
await ProfileService.DownloadProfileInfoAsync();
MessageService.Success(LocalizationService.GetString("BackOnline"));
await InvokeAsync(StateHasChanged);
}
else
{
await ModalService.ConfirmAsync(new ConfirmOptions()
{
Title = LocalizationService.GetString("CouldNotReconnect"),
Icon = @,
Content = LocalizationService.GetString("CouldNotReconnectMessage"),
OkText = LocalizationService.GetString("Logout"),
CancelText = LocalizationService.GetString("StayOffline"),
Centered = true,
OnOk = async (e) =>
{
await Logout();
}
});
}
Connecting = false;
await InvokeAsync(StateHasChanged);
}
async Task Logout()
{
await ConnectionClient.DisconnectAsync();
await AuthenticationService.Logout();
NavigationManager.NavigateTo("/Authenticate");
}
}