Track rule reading in database, don't show popup locally (#7278)
This commit is contained in:
@@ -2,8 +2,6 @@ using Content.Client.EscapeMenu.UI;
|
||||
using Robust.Client.ResourceManagement;
|
||||
using Robust.Client.UserInterface.Controls;
|
||||
using Robust.Client.UserInterface.CustomControls;
|
||||
using Robust.Shared.IoC;
|
||||
using Robust.Shared.Localization;
|
||||
|
||||
namespace Content.Client.Info
|
||||
{
|
||||
@@ -62,12 +60,5 @@ namespace Content.Client.Info
|
||||
info.InfoContainer.AddChild(new InfoSection(title,
|
||||
_resourceManager.ContentFileReadAllText($"/Server Info/{path}"), markup));
|
||||
}
|
||||
|
||||
protected override void Opened()
|
||||
{
|
||||
base.Opened();
|
||||
|
||||
_rulesManager.SaveLastReadTime();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using Content.Client.Lobby;
|
||||
using Content.Client.Viewport;
|
||||
using Content.Shared.CCVar;
|
||||
@@ -8,28 +6,33 @@ using Robust.Client.Console;
|
||||
using Robust.Client.State;
|
||||
using Robust.Client.UserInterface;
|
||||
using Robust.Shared.Configuration;
|
||||
using Robust.Shared.ContentPack;
|
||||
using Robust.Shared.IoC;
|
||||
using Robust.Shared.Network;
|
||||
using Robust.Shared.Utility;
|
||||
|
||||
namespace Content.Client.Info;
|
||||
|
||||
public sealed class RulesManager : SharedRulesManager
|
||||
{
|
||||
[Dependency] private readonly IResourceManager _resource = default!;
|
||||
[Dependency] private readonly IConfigurationManager _configManager = default!;
|
||||
[Dependency] private readonly IUserInterfaceManager _userInterfaceManager = default!;
|
||||
[Dependency] private readonly IStateManager _stateManager = default!;
|
||||
[Dependency] private readonly IClientConsoleHost _consoleHost = default!;
|
||||
[Dependency] private readonly INetManager _netManager = default!;
|
||||
|
||||
private bool _shouldShowRules;
|
||||
|
||||
public void Initialize()
|
||||
{
|
||||
_netManager.RegisterNetMessage<ShouldShowRulesPopupMessage>(OnShouldShowRules);
|
||||
_netManager.RegisterNetMessage<ShowRulesPopupMessage>(OnShowRulesPopupMessage);
|
||||
_netManager.RegisterNetMessage<RulesAcceptedMessage>();
|
||||
_stateManager.OnStateChanged += OnStateChanged;
|
||||
}
|
||||
|
||||
private void OnShouldShowRules(ShouldShowRulesPopupMessage message)
|
||||
{
|
||||
_shouldShowRules = true;
|
||||
}
|
||||
|
||||
private void OnShowRulesPopupMessage(ShowRulesPopupMessage message)
|
||||
{
|
||||
ShowRules(message.PopupTime);
|
||||
@@ -39,32 +42,15 @@ public sealed class RulesManager : SharedRulesManager
|
||||
{
|
||||
if (args.NewState is not (GameScreen or LobbyState))
|
||||
return;
|
||||
_stateManager.OnStateChanged -= OnStateChanged;
|
||||
|
||||
var path = new ResourcePath($"/rules_last_seen_{_configManager.GetCVar(CCVars.ServerId)}");
|
||||
var showRules = true;
|
||||
if (_resource.UserData.TryReadAllText(path, out var lastReadTimeText)
|
||||
&& DateTime.TryParse(lastReadTimeText, null, DateTimeStyles.AssumeUniversal, out var lastReadTime))
|
||||
showRules = lastReadTime < DateTime.UtcNow - TimeSpan.FromDays(60);
|
||||
else
|
||||
SaveLastReadTime();
|
||||
|
||||
if (!showRules)
|
||||
if (!_shouldShowRules)
|
||||
return;
|
||||
|
||||
_shouldShowRules = false;
|
||||
|
||||
ShowRules(_configManager.GetCVar(CCVars.RulesWaitTime));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ran when the user opens ("read") the rules, stores the new ID to disk.
|
||||
/// </summary>
|
||||
public void SaveLastReadTime()
|
||||
{
|
||||
using var sw = _resource.UserData.OpenWriteText(new ResourcePath($"/rules_last_seen_{_configManager.GetCVar(CCVars.ServerId)}"));
|
||||
|
||||
sw.Write(DateTime.UtcNow.ToUniversalTime());
|
||||
}
|
||||
|
||||
private void ShowRules(float time)
|
||||
{
|
||||
var rulesPopup = new RulesPopup
|
||||
@@ -83,6 +69,7 @@ public sealed class RulesManager : SharedRulesManager
|
||||
|
||||
private void OnAcceptPressed()
|
||||
{
|
||||
SaveLastReadTime();
|
||||
var message = _netManager.CreateNetMessage<RulesAcceptedMessage>();
|
||||
_netManager.ClientSendMessage(message);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user