diff --git a/Content.Client/Administration/Systems/AdminWhoSystem.cs b/Content.Client/Administration/Systems/AdminWhoSystem.cs new file mode 100644 index 0000000000..81e801ece5 --- /dev/null +++ b/Content.Client/Administration/Systems/AdminWhoSystem.cs @@ -0,0 +1,31 @@ +using Content.Shared.Administration; + +namespace Content.Client.Administration.Systems; + +/// +/// Client system for handling admin who requests +/// +public sealed class AdminWhoSystem : EntitySystem +{ + public event Action>? OnAdminWhoUpdate; + + public override void Initialize() + { + base.Initialize(); + + SubscribeNetworkEvent(OnAdminWhoResponse); + } + + /// + /// Request the list of online administrators from the server + /// + public void RequestAdminWho() + { + RaiseNetworkEvent(new RequestAdminWhoEvent()); + } + + private void OnAdminWhoResponse(AdminWhoResponseEvent args, EntitySessionEventArgs session) + { + OnAdminWhoUpdate?.Invoke(args.Admins); + } +} \ No newline at end of file diff --git a/Content.Client/Administration/UI/Bwoink/AdminWhoUIController.cs b/Content.Client/Administration/UI/Bwoink/AdminWhoUIController.cs new file mode 100644 index 0000000000..23cc08298a --- /dev/null +++ b/Content.Client/Administration/UI/Bwoink/AdminWhoUIController.cs @@ -0,0 +1,65 @@ + +using Content.Client.Administration.Systems; +using JetBrains.Annotations; +using Robust.Client.UserInterface.Controllers; + +namespace Content.Client.Administration.UI.Bwoink +{ + [UsedImplicitly] + public sealed class AdminWhoUIController : UIController, IOnSystemChanged + { + private AdminWhoWindow? _dialog; + private AdminWhoSystem? _adminWhoSystem; + + protected override string SawmillName => "c.c.admin.adminwho"; + + public void OnSystemLoaded(AdminWhoSystem system) + { + _adminWhoSystem = system; + + _dialog = new AdminWhoWindow(); + _dialog.Initialize(system); + } + + public void OnSystemUnloaded(AdminWhoSystem system) + { + if (_dialog != null) + { + _dialog.Close(); + _dialog.Uninitialize(); + _dialog.Dispose(); + _dialog = null; + } + + _adminWhoSystem = null; + } + + public void Open() + { + if (_dialog == null) + { + if (_adminWhoSystem == null) + return; + + _dialog = new AdminWhoWindow(); + _dialog.Initialize(_adminWhoSystem); + } + + _dialog.OpenCentered(); + _dialog.RefreshAdminList(); + } + + public void Toggle() + { + if (_dialog?.IsOpen == true) + Close(); + else + Open(); + } + + public void Close() + { + _dialog?.Close(); + } + } +} diff --git a/Content.Client/Administration/UI/Bwoink/AdminWhoWindow.xaml b/Content.Client/Administration/UI/Bwoink/AdminWhoWindow.xaml new file mode 100644 index 0000000000..811dbd9b97 --- /dev/null +++ b/Content.Client/Administration/UI/Bwoink/AdminWhoWindow.xaml @@ -0,0 +1,23 @@ + + + +