PlayerPanel.xaml.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. using Content.Client.Administration.Managers;
  2. using Content.Client.UserInterface.Controls;
  3. using Content.Shared.Administration;
  4. using Robust.Client.AutoGenerated;
  5. using Robust.Client.UserInterface;
  6. using Robust.Client.UserInterface.XAML;
  7. using Robust.Shared.Network;
  8. using Robust.Shared.Utility;
  9. namespace Content.Client.Administration.UI.PlayerPanel;
  10. [GenerateTypedNameReferences]
  11. public sealed partial class PlayerPanel : FancyWindow
  12. {
  13. private readonly IClientAdminManager _adminManager;
  14. public event Action<string>? OnUsernameCopy;
  15. public event Action<NetUserId?>? OnOpenNotes;
  16. public event Action<NetUserId?>? OnOpenBans;
  17. public event Action<NetUserId?>? OnAhelp;
  18. public event Action<string?>? OnKick;
  19. public event Action<NetUserId?>? OnOpenBanPanel;
  20. public event Action<NetUserId?, bool>? OnWhitelistToggle;
  21. public event Action? OnFreezeAndMuteToggle;
  22. public event Action? OnFreeze;
  23. public event Action? OnLogs;
  24. public event Action? OnDelete;
  25. public event Action? OnRejuvenate;
  26. public NetUserId? TargetPlayer;
  27. public string? TargetUsername;
  28. private bool _isWhitelisted;
  29. public PlayerPanel(IClientAdminManager adminManager)
  30. {
  31. RobustXamlLoader.Load(this);
  32. _adminManager = adminManager;
  33. UsernameCopyButton.OnPressed += _ => OnUsernameCopy?.Invoke(PlayerName.Text ?? "");
  34. BanButton.OnPressed += _ => OnOpenBanPanel?.Invoke(TargetPlayer);
  35. KickButton.OnPressed += _ => OnKick?.Invoke(TargetUsername);
  36. NotesButton.OnPressed += _ => OnOpenNotes?.Invoke(TargetPlayer);
  37. ShowBansButton.OnPressed += _ => OnOpenBans?.Invoke(TargetPlayer);
  38. AhelpButton.OnPressed += _ => OnAhelp?.Invoke(TargetPlayer);
  39. WhitelistToggle.OnPressed += _ =>
  40. {
  41. OnWhitelistToggle?.Invoke(TargetPlayer, _isWhitelisted);
  42. SetWhitelisted(!_isWhitelisted);
  43. };
  44. FreezeButton.OnPressed += _ => OnFreeze?.Invoke();
  45. FreezeAndMuteToggleButton.OnPressed += _ => OnFreezeAndMuteToggle?.Invoke();
  46. LogsButton.OnPressed += _ => OnLogs?.Invoke();
  47. DeleteButton.OnPressed += _ => OnDelete?.Invoke();
  48. RejuvenateButton.OnPressed += _ => OnRejuvenate?.Invoke();
  49. }
  50. public void SetUsername(string player)
  51. {
  52. Title = Loc.GetString("player-panel-title", ("player", player));
  53. PlayerName.Text = Loc.GetString("player-panel-username", ("player", player));
  54. }
  55. public void SetWhitelisted(bool? whitelisted)
  56. {
  57. if (whitelisted == null)
  58. {
  59. Whitelisted.Text = null;
  60. WhitelistToggle.Visible = false;
  61. }
  62. else
  63. {
  64. Whitelisted.Text = Loc.GetString("player-panel-whitelisted");
  65. WhitelistToggle.Text = whitelisted.Value ? Loc.GetString("player-panel-true") : Loc.GetString("player-panel-false");
  66. WhitelistToggle.Visible = true;
  67. _isWhitelisted = whitelisted.Value;
  68. }
  69. }
  70. public void SetBans(int? totalBans, int? totalRoleBans)
  71. {
  72. // If one value exists then so should the other.
  73. DebugTools.Assert(totalBans.HasValue && totalRoleBans.HasValue || totalBans == null && totalRoleBans == null);
  74. Bans.Text = totalBans != null ? Loc.GetString("player-panel-bans", ("totalBans", totalBans)) : null;
  75. RoleBans.Text = totalRoleBans != null ? Loc.GetString("player-panel-rolebans", ("totalRoleBans", totalRoleBans)) : null;
  76. }
  77. public void SetNotes(int? totalNotes)
  78. {
  79. Notes.Text = totalNotes != null ? Loc.GetString("player-panel-notes", ("totalNotes", totalNotes)) : null;
  80. }
  81. public void SetSharedConnections(int sharedConnections)
  82. {
  83. SharedConnections.Text = Loc.GetString("player-panel-shared-connections", ("sharedConnections", sharedConnections));
  84. }
  85. public void SetPlaytime(TimeSpan playtime)
  86. {
  87. Playtime.Text = Loc.GetString("player-panel-playtime",
  88. ("days", playtime.Days),
  89. ("hours", playtime.Hours % 24),
  90. ("minutes", playtime.Minutes % (24 * 60)));
  91. }
  92. public void SetFrozen(bool canFreeze, bool frozen)
  93. {
  94. FreezeAndMuteToggleButton.Disabled = !canFreeze;
  95. FreezeButton.Disabled = !canFreeze || frozen;
  96. FreezeAndMuteToggleButton.Text = Loc.GetString(!frozen ? "player-panel-freeze-and-mute" : "player-panel-unfreeze");
  97. }
  98. public void SetAhelp(bool canAhelp)
  99. {
  100. AhelpButton.Disabled = !canAhelp;
  101. }
  102. public void SetButtons()
  103. {
  104. BanButton.Disabled = !_adminManager.CanCommand("banpanel");
  105. KickButton.Disabled = !_adminManager.CanCommand("kick");
  106. NotesButton.Disabled = !_adminManager.CanCommand("adminnotes");
  107. ShowBansButton.Disabled = !_adminManager.CanCommand("banlist");
  108. WhitelistToggle.Disabled =
  109. !(_adminManager.CanCommand("whitelistadd") && _adminManager.CanCommand("whitelistremove"));
  110. LogsButton.Disabled = !_adminManager.CanCommand("adminlogs");
  111. RejuvenateButton.Disabled = !_adminManager.HasFlag(AdminFlags.Debug);
  112. DeleteButton.Disabled = !_adminManager.HasFlag(AdminFlags.Debug);
  113. }
  114. }