1
0

AdminLogsEui.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. using System.Linq;
  2. using Content.Client.Eui;
  3. using Content.Shared.Administration.Logs;
  4. using Content.Shared.Eui;
  5. using JetBrains.Annotations;
  6. using Robust.Client.Graphics;
  7. using Robust.Client.UserInterface;
  8. using Robust.Client.UserInterface.Controls;
  9. using static Content.Shared.Administration.Logs.AdminLogsEuiMsg;
  10. namespace Content.Client.Administration.UI.Logs;
  11. [UsedImplicitly]
  12. public sealed class AdminLogsEui : BaseEui
  13. {
  14. [Dependency] private readonly IClyde _clyde = default!;
  15. [Dependency] private readonly IUserInterfaceManager _uiManager = default!;
  16. public AdminLogsEui()
  17. {
  18. LogsWindow = new AdminLogsWindow();
  19. LogsWindow.OnClose += OnCloseWindow;
  20. LogsControl = LogsWindow.Logs;
  21. LogsControl.LogSearch.OnTextEntered += _ => RequestLogs();
  22. LogsControl.RefreshButton.OnPressed += _ => RequestLogs();
  23. LogsControl.NextButton.OnPressed += _ => NextLogs();
  24. LogsControl.PopOutButton.OnPressed += _ => PopOut();
  25. }
  26. private WindowRoot? Root { get; set; }
  27. private IClydeWindow? ClydeWindow { get; set; }
  28. private AdminLogsWindow? LogsWindow { get; set; }
  29. private AdminLogsControl LogsControl { get; }
  30. private bool FirstState { get; set; } = true;
  31. private void OnRequestClosed(WindowRequestClosedEventArgs args)
  32. {
  33. SendMessage(new CloseEuiMessage());
  34. }
  35. private void OnCloseWindow()
  36. {
  37. if (ClydeWindow == null)
  38. SendMessage(new CloseEuiMessage());
  39. }
  40. private void RequestLogs()
  41. {
  42. var request = new LogsRequest(
  43. LogsControl.SelectedRoundId,
  44. LogsControl.Search,
  45. LogsControl.SelectedTypes.ToHashSet(),
  46. null,
  47. null,
  48. null,
  49. LogsControl.SelectedPlayers.Count != 0,
  50. LogsControl.SelectedPlayers.ToArray(),
  51. null,
  52. LogsControl.IncludeNonPlayerLogs,
  53. DateOrder.Descending);
  54. SendMessage(request);
  55. }
  56. private void NextLogs()
  57. {
  58. LogsControl.NextButton.Disabled = true;
  59. var request = new NextLogsRequest();
  60. SendMessage(request);
  61. }
  62. private void PopOut()
  63. {
  64. if (LogsWindow == null)
  65. {
  66. return;
  67. }
  68. var monitor = _clyde.EnumerateMonitors().First();
  69. ClydeWindow = _clyde.CreateWindow(new WindowCreateParameters
  70. {
  71. Maximized = false,
  72. Title = "Admin Logs",
  73. Monitor = monitor,
  74. Width = 1100,
  75. Height = 400
  76. });
  77. LogsControl.Orphan();
  78. LogsWindow.Dispose();
  79. LogsWindow = null;
  80. ClydeWindow.RequestClosed += OnRequestClosed;
  81. ClydeWindow.DisposeOnClose = true;
  82. Root = _uiManager.CreateWindowRoot(ClydeWindow);
  83. Root.AddChild(LogsControl);
  84. LogsControl.PopOutButton.Disabled = true;
  85. LogsControl.PopOutButton.Visible = false;
  86. }
  87. public override void HandleState(EuiStateBase state)
  88. {
  89. var s = (AdminLogsEuiState) state;
  90. if (s.IsLoading)
  91. {
  92. return;
  93. }
  94. LogsControl.SetCurrentRound(s.RoundId);
  95. LogsControl.SetPlayers(s.Players);
  96. LogsControl.UpdateCount(round: s.RoundLogs);
  97. if (!FirstState)
  98. {
  99. return;
  100. }
  101. FirstState = false;
  102. LogsControl.SetRoundSpinBox(s.RoundId);
  103. RequestLogs();
  104. }
  105. public override void HandleMessage(EuiMessageBase msg)
  106. {
  107. base.HandleMessage(msg);
  108. switch (msg)
  109. {
  110. case NewLogs newLogs:
  111. if (newLogs.Replace)
  112. {
  113. LogsControl.SetLogs(newLogs.Logs);
  114. }
  115. else
  116. {
  117. LogsControl.AddLogs(newLogs.Logs);
  118. }
  119. LogsControl.NextButton.Disabled = !newLogs.HasNext;
  120. break;
  121. case SetLogFilter setLogFilter:
  122. if (setLogFilter.Search != null)
  123. LogsControl.LogSearch.SetText(setLogFilter.Search);
  124. if (setLogFilter.Types != null)
  125. LogsControl.SetTypesSelection(setLogFilter.Types, setLogFilter.InvertTypes);
  126. break;
  127. }
  128. }
  129. public override void Opened()
  130. {
  131. base.Opened();
  132. LogsWindow?.OpenCentered();
  133. }
  134. public override void Closed()
  135. {
  136. base.Closed();
  137. if (ClydeWindow != null)
  138. {
  139. ClydeWindow.RequestClosed -= OnRequestClosed;
  140. }
  141. LogsControl.Dispose();
  142. LogsWindow?.Dispose();
  143. Root?.Dispose();
  144. ClydeWindow?.Dispose();
  145. }
  146. }