CatStation/Content.Client/Administration/UI/Tabs/ServerTab.xaml.cs

95 lines
3.6 KiB
C#

using System.Globalization;
using Content.Shared.CCVar;
using Robust.Client.AutoGenerated;
using Robust.Client.Console;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Configuration;
namespace Content.Client.Administration.UI.Tabs
{
[GenerateTypedNameReferences]
public sealed partial class ServerTab : Control
{
[Dependency] private IConfigurationManager _config = default!;
[Dependency] private IClientConsoleHost _console = default!;
public ServerTab()
{
RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this);
_config.OnValueChanged(CCVars.OocEnabled, OocEnabledChanged, true);
_config.OnValueChanged(CCVars.LoocEnabled, LoocEnabledChanged, true);
_config.OnValueChanged(CCVars.DeadChatEnabled, DeadChatEnabledChanged, true);
_config.OnValueChanged(CCVars.AfkTime, AfkTimeChanged, true);
_config.OnValueChanged(CCVars.AdminAfkTime, AdminAfkTimeChanged, true);
_config.OnValueChanged(CCVars.AfkConfirmTimeout, AfkConfirmTimeoutChanged, true);
ServerShutdownButton.OnPressed += _ => _console.ExecuteCommand("shutdown");
AfkTime.OnTextEntered += args => SendFloatCVar(CCVars.AfkTime.Name, args.Text);
AfkTime.OnFocusExit += args => SendFloatCVar(CCVars.AfkTime.Name, args.Text);
AdminAfkTime.OnTextEntered += args => SendFloatCVar(CCVars.AdminAfkTime.Name, args.Text);
AdminAfkTime.OnFocusExit += args => SendFloatCVar(CCVars.AdminAfkTime.Name, args.Text);
AfkConfirmTimeout.OnTextEntered += args => SendFloatCVar(CCVars.AfkConfirmTimeout.Name, args.Text);
AfkConfirmTimeout.OnFocusExit += args => SendFloatCVar(CCVars.AfkConfirmTimeout.Name, args.Text);
}
private void SendFloatCVar(string cvar, string text)
{
if (string.IsNullOrWhiteSpace(text) ||
!float.TryParse(text, CultureInfo.InvariantCulture, out var value) ||
value < 0f)
{
return;
}
_console.ExecuteCommand($"changecvar {cvar} {value.ToString(CultureInfo.InvariantCulture)}");
}
private void OocEnabledChanged(bool value)
{
SetOocButton.Pressed = value;
}
private void LoocEnabledChanged(bool value)
{
SetLoocButton.Pressed = value;
}
private void DeadChatEnabledChanged(bool value)
{
SetDeadChatButton.Pressed = value;
}
private void AfkTimeChanged(float value)
{
AfkTime.PlaceHolder = value.ToString(CultureInfo.InvariantCulture);
}
private void AdminAfkTimeChanged(float value)
{
AdminAfkTime.PlaceHolder = value.ToString(CultureInfo.InvariantCulture);
}
private void AfkConfirmTimeoutChanged(float value)
{
AfkConfirmTimeout.PlaceHolder = value.ToString(CultureInfo.InvariantCulture);
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (disposing)
{
_config.UnsubValueChanged(CCVars.OocEnabled, OocEnabledChanged);
_config.UnsubValueChanged(CCVars.LoocEnabled, LoocEnabledChanged);
_config.UnsubValueChanged(CCVars.AfkTime, AfkTimeChanged);
_config.UnsubValueChanged(CCVars.AdminAfkTime, AdminAfkTimeChanged);
_config.UnsubValueChanged(CCVars.AfkConfirmTimeout, AfkConfirmTimeoutChanged);
}
}
}
}