From abc5094a16aa98da45cb14399913f08f0fe4cb5a Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Fri, 12 Jan 2024 19:04:55 +1100 Subject: [PATCH] NewsSystem fixes (#23969) --- Content.Client/MassMedia/NewsSystem.cs | 8 +++++++ .../Ui/NewsWriteBoundUserInterface.cs | 24 +++++++------------ .../MassMedia/Systems/NewsSystem.cs | 19 +++++++++------ .../MassMedia/Systems/SharedNewsSystem.cs | 6 +++++ 4 files changed, 34 insertions(+), 23 deletions(-) create mode 100644 Content.Client/MassMedia/NewsSystem.cs diff --git a/Content.Client/MassMedia/NewsSystem.cs b/Content.Client/MassMedia/NewsSystem.cs new file mode 100644 index 0000000000..59c5197091 --- /dev/null +++ b/Content.Client/MassMedia/NewsSystem.cs @@ -0,0 +1,8 @@ +using Content.Shared.MassMedia.Systems; + +namespace Content.Client.MassMedia; + +public sealed class NewsSystem : SharedNewsSystem +{ + +} diff --git a/Content.Client/MassMedia/Ui/NewsWriteBoundUserInterface.cs b/Content.Client/MassMedia/Ui/NewsWriteBoundUserInterface.cs index 975dfa3f81..ecd0aeccd2 100644 --- a/Content.Client/MassMedia/Ui/NewsWriteBoundUserInterface.cs +++ b/Content.Client/MassMedia/Ui/NewsWriteBoundUserInterface.cs @@ -1,9 +1,6 @@ -using Robust.Shared.Timing; using JetBrains.Annotations; -using Robust.Client.GameObjects; -using Content.Shared.MassMedia.Systems; using Content.Shared.MassMedia.Components; -using Content.Client.GameTicking.Managers; +using Content.Shared.MassMedia.Systems; using Robust.Shared.Utility; namespace Content.Client.MassMedia.Ui @@ -14,16 +11,11 @@ namespace Content.Client.MassMedia.Ui [ViewVariables] private NewsWriteMenu? _menu; - [Dependency] private readonly IEntitySystemManager _entitySystem = default!; - [Dependency] private readonly IGameTiming _gameTiming = default!; - private ClientGameTicker? _gameTicker; - [ViewVariables] private string _windowName = Loc.GetString("news-read-ui-default-title"); public NewsWriteBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) { - } protected override void Open() @@ -36,8 +28,6 @@ namespace Content.Client.MassMedia.Ui _menu.ShareButtonPressed += OnShareButtonPressed; _menu.DeleteButtonPressed += OnDeleteButtonPressed; - _gameTicker = _entitySystem.GetEntitySystem(); - SendMessage(new NewsWriteArticlesRequestMessage()); } @@ -67,19 +57,21 @@ namespace Content.Client.MassMedia.Ui var stringContent = Rope.Collapse(_menu.ContentInput.TextRope); - if (stringContent == null || stringContent.Length == 0) + if (stringContent.Length == 0) return; - var stringName = _menu.NameInput.Text; - var name = (stringName.Length <= 25 ? stringName.Trim() : $"{stringName.Trim().Substring(0, 25)}..."); + var stringName = _menu.NameInput.Text.Trim(); + var name = stringName[..(SharedNewsSystem.MaxNameLength)]; + var content = stringContent[..(SharedNewsSystem.MaxArticleLength)]; _menu.ContentInput.TextRope = new Rope.Leaf(string.Empty); _menu.NameInput.Text = string.Empty; - SendMessage(new NewsWriteShareMessage(name, stringContent)); + SendMessage(new NewsWriteShareMessage(name, content)); } private void OnDeleteButtonPressed(int articleNum) { - if (_menu == null) return; + if (_menu == null) + return; SendMessage(new NewsWriteDeleteMessage(articleNum)); } diff --git a/Content.Server/MassMedia/Systems/NewsSystem.cs b/Content.Server/MassMedia/Systems/NewsSystem.cs index 30de1d21d9..40e2a0911b 100644 --- a/Content.Server/MassMedia/Systems/NewsSystem.cs +++ b/Content.Server/MassMedia/Systems/NewsSystem.cs @@ -36,7 +36,7 @@ using Robust.Shared.Timing; namespace Content.Server.MassMedia.Systems; -public sealed class NewsSystem : EntitySystem +public sealed class NewsSystem : SharedNewsSystem { [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly UserInterfaceSystem _ui = default!; @@ -50,6 +50,7 @@ public sealed class NewsSystem : EntitySystem [Dependency] private readonly StationRecordsSystem _stationRecords = default!; // TODO remove this. Dont store data on systems + // Honestly NewsSystem just needs someone to rewrite it entirely. private readonly List _articles = new List(); public override void Initialize() @@ -68,7 +69,7 @@ public sealed class NewsSystem : EntitySystem private void OnRoundRestart(RoundRestartCleanupEvent ev) { - _articles?.Clear(); + _articles.Clear(); } public void ToggleUi(EntityUid user, EntityUid deviceEnt, NewsWriteComponent? component) @@ -133,10 +134,12 @@ public sealed class NewsSystem : EntitySystem if (!_accessReader.FindAccessItemsInventory(author, out var items)) return; - if (!_accessReader.FindStationRecordKeys(author, out var stationRecordKeys, items)) + if (!_accessReader.FindStationRecordKeys(author, out _, items)) return; string? authorName = null; + + // TODO: There is a dedicated helper for this. foreach (var item in items) { // ID Card @@ -155,13 +158,15 @@ public sealed class NewsSystem : EntitySystem } } - NewsArticle article = new NewsArticle + var trimmedName = msg.Name.Trim(); + var trimmedContent = msg.Content.Trim(); + + var article = new NewsArticle { Author = authorName, - Name = (msg.Name.Length <= 25 ? msg.Name.Trim() : $"{msg.Name.Trim().Substring(0, 25)}..."), - Content = msg.Content, + Name = trimmedName.Length <= MaxNameLength ? trimmedName : $"{trimmedName[..MaxNameLength]}...", + Content = trimmedContent.Length <= MaxArticleLength ? trimmedContent : $"{trimmedContent[..MaxArticleLength]}...", ShareTime = _ticker.RoundDuration() - }; _audio.PlayPvs(component.ConfirmSound, uid); diff --git a/Content.Shared/MassMedia/Systems/SharedNewsSystem.cs b/Content.Shared/MassMedia/Systems/SharedNewsSystem.cs index 64bc74229c..057ce9a2ed 100644 --- a/Content.Shared/MassMedia/Systems/SharedNewsSystem.cs +++ b/Content.Shared/MassMedia/Systems/SharedNewsSystem.cs @@ -2,6 +2,12 @@ using Robust.Shared.Serialization; namespace Content.Shared.MassMedia.Systems; +public abstract class SharedNewsSystem : EntitySystem +{ + public const int MaxNameLength = 25; + public const int MaxArticleLength = 2048; +} + [Serializable, NetSerializable] public struct NewsArticle { -- 2.51.2