mirror of
https://github.com/spacebarchat/server.git
synced 2026-09-17 12:27:35 +00:00
81 lines
3.2 KiB
Plaintext
81 lines
3.2 KiB
Plaintext
@using ArcaneLibs.Blazor.Components
|
|
@using ArcaneLibs.Blazor.Components.Services
|
|
@using Spacebar.Client.WebCore
|
|
@using Spacebar.Sdk.Core
|
|
@inject SessionStore sessionStore
|
|
@inject SpacebarClientProviderService clientProvider
|
|
@inject JsConsoleService jsConsole
|
|
|
|
<DebugBanner Name="@GetType().Name" @ref="_dbgBanner"/>
|
|
@if (_sessionPickerVisible)
|
|
{
|
|
<ModalWindow Title="Session manager" OnCloseClickedAsync="@(() => SetSessionPickerVisible(false))">
|
|
@foreach (var (sessionId, session) in _sessionEntries)
|
|
{
|
|
<LinkButton
|
|
OnClickAsync="@(() => SetCurrentSessionAsync(sessionId))">@(session.ProfileCache?.Username ?? "Unknown user")#@(session.ProfileCache?.Discriminator ?? "0000") <sub
|
|
class="code">on @session.ServerName</sub></LinkButton>
|
|
<LinkButton OnClickAsync="@(() => RemoveSessionAsync(sessionId))">x</LinkButton>
|
|
}
|
|
<br/><br/>
|
|
<LinkButton href="/login">Log in</LinkButton>
|
|
<LinkButton href="/register">Register</LinkButton>
|
|
</ModalWindow>
|
|
}
|
|
|
|
@code {
|
|
private bool _sessionPickerVisible;
|
|
private DebugBanner _dbgBanner;
|
|
|
|
private Dictionary<Guid, SessionEntry> _sessionEntries = [];
|
|
|
|
protected override async Task OnAfterRenderAsync(bool firstRender)
|
|
{
|
|
if (!firstRender) return;
|
|
await _dbgBanner.SetStatus("Crunching numbers...");
|
|
_sessionPickerVisible = await sessionStore.GetCurrentSessionAsync() == null;
|
|
await _dbgBanner.SetStatus("Ready!");
|
|
await _dbgBanner.SetStatus(null, 1000);
|
|
}
|
|
|
|
public async Task SetSessionPickerVisible(bool visible = true)
|
|
{
|
|
await jsConsole.Info("[SessionManager] showing session picker...");
|
|
_sessionEntries = visible ? await sessionStore.GetAllSessionsAsync() : [];
|
|
_sessionPickerVisible = visible;
|
|
StateHasChanged();
|
|
await Task.Delay(1);
|
|
}
|
|
|
|
private async Task SetCurrentSessionAsync(Guid sessionId)
|
|
{
|
|
_sessionPickerVisible = false;
|
|
StateHasChanged();
|
|
await sessionStore.SetCurrentSessionAsync(sessionId);
|
|
var cs = await sessionStore.GetCurrentSessionAsync();
|
|
await _dbgBanner.SetStatus($"Current session changed to {cs!.ProfileCache?.Username}#{cs.ProfileCache?.Discriminator} ({cs.ProfileCache.Id}) / {sessionId.ToString()}!");
|
|
await _dbgBanner.SetStatus(null, 3000);
|
|
}
|
|
|
|
private async Task RemoveSessionAsync(Guid sessionId)
|
|
{
|
|
try
|
|
{
|
|
await _dbgBanner.SetStatus("Trying to log out...");
|
|
var sess = _sessionEntries[sessionId];
|
|
var client = await clientProvider.GetAuthenticatedClientAsync(sess.ServerName, sess.AccessToken);
|
|
await client.LogOutAsync();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
await _dbgBanner.SetStatus("Failed to log out, removing anyway: " + string.Join("\n", e.ToString().Split("\n").Where(x => !x.Trim().StartsWith("at "))));
|
|
await Task.Delay(1000);
|
|
}
|
|
|
|
await sessionStore.RemoveSessionAsync(sessionId);
|
|
await _dbgBanner.SetStatus("Session removed successfully!");
|
|
await _dbgBanner.SetStatus(null, 1000);
|
|
await SetSessionPickerVisible();
|
|
}
|
|
|
|
} |