LANCommander/LANCommander.Launcher/UI/Components/ProfileButton.razor

122 lines
3.6 KiB
Text
Raw Permalink Normal View History

@using LANCommander.Launcher.Data.Models
@namespace LANCommander.Launcher.UI
@inject UserService UserService
@inject ProfileService ProfileService
@inject AuthenticationService AuthenticationService
@inject NavigationManager NavigationManager
@inject ModalService ModalService
@inject LocalizationService LocalizationService
@inject ISettingsProvider SettingsProvider
2025-10-05 17:13:47 -05:00
@inject IConnectionClient ConnectionClient
2025-11-03 23:24:47 -06:00
@inject ILogger<ProfileButton> Logger
<Dropdown>
<Overlay>
<Menu>
2025-10-05 17:13:47 -05:00
<MenuItem OnClick="ChangeAlias" Disabled="@ConnectionClient.IsOfflineMode()">
@LocalizationService.GetString("ChangeName")
</MenuItem>
<MenuItem OnClick="@(() => NavigationManager.NavigateTo("/Settings"))">
@LocalizationService.GetString("Settings")
</MenuItem>
@if (!SettingsProvider.CurrentValue.Authentication.OfflineModeEnabled)
{
<MenuItem OnClick="SwitchToOfflineMode">
@LocalizationService.GetString("SwitchToOfflineMode")
</MenuItem>
}
<MenuItem OnClick="Logout">
@LocalizationService.GetString("Logout")
</MenuItem>
</Menu>
</Overlay>
<ChildContent>
2024-12-31 18:21:41 -06:00
<Button Type="ButtonType.Primary" Class="appbar-profile-button">
2025-01-25 15:22:25 -06:00
@if (AvatarId != Guid.Empty)
{
2025-01-25 15:22:25 -06:00
<MediaImage Id="AvatarId" />
}
2025-01-25 15:22:25 -06:00
<span>@Alias</span>
</Button>
</ChildContent>
</Dropdown>
@code {
User User;
2025-01-25 15:22:25 -06:00
Guid AvatarId = Guid.Empty;
string Alias = SDK.Models.Settings.DEFAULT_GAME_USERNAME;
protected override async Task OnInitializedAsync()
{
2025-11-03 23:24:47 -06:00
Console.WriteLine(NavigationManager.Uri);
Console.WriteLine(NavigationManager.BaseUri);
ProfileService.OnProfileDownloaded += async (sender, args) =>
{
User = await UserService.GetCurrentUser();
2025-01-25 15:22:25 -06:00
AvatarId = User?.Avatar?.Id ?? Guid.Empty;
Alias = String.IsNullOrWhiteSpace(User?.Alias) ? User?.UserName ?? SDK.Models.Settings.DEFAULT_GAME_USERNAME : User.Alias;
2026-03-04 19:03:57 -06:00
await InvokeAsync(StateHasChanged);
};
2025-10-05 17:13:47 -05:00
if (ConnectionClient.IsOfflineMode())
{
string userName = AuthenticationService.GetCurrentUserName();
Alias = string.IsNullOrEmpty(userName) ? Alias : userName;
}
else
{
2025-11-03 23:24:47 -06:00
try
{
await ProfileService.DownloadProfileInfoAsync();
}
catch (Exception ex)
{
Logger.LogError(ex, "Could not download profile info");
}
}
}
async Task ChangeAlias()
{
var modalOptions = new ModalOptions()
{
Title = LocalizationService.GetString("ChangeName"),
Maximizable = false,
DefaultMaximized = false,
Closable = true,
Centered = true
};
var modalRef = ModalService.CreateModal<ChangeAliasDialog, string, string>(modalOptions, User.Alias);
modalRef.OnOk = async (newName) =>
{
await ProfileService.ChangeAlias(newName);
2025-01-25 02:58:10 -06:00
await ProfileService.DownloadProfileInfoAsync();
await InvokeAsync(StateHasChanged);
};
}
async Task Logout()
{
await AuthenticationService.Logout();
NavigationManager.NavigateTo("/Authenticate");
}
async Task SwitchToOfflineMode()
{
await AuthenticationService.SetOfflineModeAsync(true);
NavigationManager.NavigateTo("/", forceLoad: true);
}
}