138 lines
3.3 KiB
C#
138 lines
3.3 KiB
C#
using System.Linq;
|
|
using Content.Client.Eui;
|
|
using Content.Shared.Administration;
|
|
using Content.Shared.Administration.Logs;
|
|
using Content.Shared.Eui;
|
|
using JetBrains.Annotations;
|
|
using Robust.Client.Graphics;
|
|
using Robust.Client.UserInterface;
|
|
using Robust.Client.UserInterface.Controls;
|
|
using Robust.Shared.IoC;
|
|
using static Content.Shared.Administration.AdminLogsEuiMsg;
|
|
|
|
namespace Content.Client.Administration.UI.Logs;
|
|
|
|
[UsedImplicitly]
|
|
public class AdminLogsEui : BaseEui
|
|
{
|
|
[Dependency] private readonly IClyde _clyde = default!;
|
|
[Dependency] private readonly IUserInterfaceManager _uiManager = default!;
|
|
|
|
public AdminLogsEui()
|
|
{
|
|
var monitor = _clyde.EnumerateMonitors().First();
|
|
|
|
ClydeWindow = _clyde.CreateWindow(new WindowCreateParameters
|
|
{
|
|
Maximized = true,
|
|
Title = "Admin Logs",
|
|
Monitor = monitor
|
|
});
|
|
|
|
ClydeWindow.RequestClosed += OnRequestClosed;
|
|
ClydeWindow.DisposeOnClose = true;
|
|
|
|
LogsWindow = new AdminLogsWindow();
|
|
LogsWindow.LogSearch.OnTextEntered += _ => RequestLogs();
|
|
LogsWindow.RefreshButton.OnPressed += _ => RequestLogs();
|
|
LogsWindow.NextButton.OnPressed += _ => NextLogs();
|
|
|
|
Root = _uiManager.CreateWindowRoot(ClydeWindow);
|
|
Root.AddChild(LogsWindow);
|
|
}
|
|
|
|
private WindowRoot Root { get; }
|
|
|
|
private IClydeWindow ClydeWindow { get; }
|
|
|
|
private AdminLogsWindow LogsWindow { get; }
|
|
|
|
private bool FirstState { get; set; } = true;
|
|
|
|
private void OnRequestClosed(WindowRequestClosedEventArgs args)
|
|
{
|
|
SendMessage(new Close());
|
|
}
|
|
|
|
private void RequestLogs()
|
|
{
|
|
var request = new LogsRequest(
|
|
LogsWindow.SelectedRoundId,
|
|
LogsWindow.SelectedTypes.ToList(),
|
|
null,
|
|
null,
|
|
null,
|
|
LogsWindow.SelectedPlayers.ToArray(),
|
|
null,
|
|
null,
|
|
DateOrder.Descending);
|
|
|
|
SendMessage(request);
|
|
}
|
|
|
|
private void NextLogs()
|
|
{
|
|
var request = new NextLogsRequest();
|
|
SendMessage(request);
|
|
}
|
|
|
|
private bool TrySetFirstState(AdminLogsEuiState state)
|
|
{
|
|
if (!FirstState)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
FirstState = false;
|
|
LogsWindow.SetCurrentRound(state.RoundId);
|
|
LogsWindow.SetRoundSpinBox(state.RoundId);
|
|
return true;
|
|
}
|
|
|
|
public override void HandleState(EuiStateBase state)
|
|
{
|
|
var s = (AdminLogsEuiState) state;
|
|
|
|
var first = TrySetFirstState(s);
|
|
|
|
if (s.IsLoading)
|
|
{
|
|
return;
|
|
}
|
|
|
|
LogsWindow.SetCurrentRound(s.RoundId);
|
|
LogsWindow.SetPlayers(s.Players);
|
|
|
|
if (first)
|
|
{
|
|
RequestLogs();
|
|
}
|
|
}
|
|
|
|
public override void HandleMessage(EuiMessageBase msg)
|
|
{
|
|
base.HandleMessage(msg);
|
|
|
|
switch (msg)
|
|
{
|
|
case NewLogs {Replace: true} newLogs:
|
|
LogsWindow.SetLogs(newLogs.Logs);
|
|
break;
|
|
case NewLogs {Replace: false} newLogs:
|
|
LogsWindow.AddLogs(newLogs.Logs);
|
|
break;
|
|
}
|
|
}
|
|
|
|
public override void Closed()
|
|
{
|
|
base.Closed();
|
|
|
|
ClydeWindow.RequestClosed -= OnRequestClosed;
|
|
|
|
LogsWindow.Dispose();
|
|
Root.Dispose();
|
|
ClydeWindow.Dispose();
|
|
}
|
|
}
|