From 1fabbbb504da0822d889d517099f3d5405a280af Mon Sep 17 00:00:00 2001 From: Vigers Ray Date: Wed, 28 Jan 2026 00:20:07 +0100 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BC=D0=B5=D1=81=D1=81=D0=B5=D0=BD=D0=B6=D0=B5?= =?UTF-8?q?=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Cartridges/MessagePanel.xaml.cs | 30 ++ .../CartridgeLoader/Cartridges/MessengerUi.cs | 13 +- .../Cartridges/MessengerUiFragment.xaml | 27 +- .../Cartridges/MessengerUiFragment.xaml.cs | 372 ++++++++++++- .../Cartridges/MessengerCartridgeComponent.cs | 6 + .../MessengerCartridgeSystem.Messaging.cs | 161 ++++++ ...MessengerCartridgeSystem.PacketHandlers.cs | 181 +++++++ .../Cartridges/MessengerCartridgeSystem.UI.cs | 3 +- .../_Sunrise/Messenger/MessengerCommands.cs | 21 + .../Messenger/MessengerServerComponent.cs | 8 +- .../Messenger/MessengerServerSystem.Groups.cs | 505 +++++++++++++++++- .../MessengerServerSystem.Messages.cs | 82 +++ .../MessengerServerSystem.UserRegistration.cs | 95 ++-- .../Messenger/MessengerServerSystem.cs | 12 + .../Cartridges/MessengerUiMessageEvent.cs | 11 +- .../Cartridges/MessengerUiState.cs | 9 +- .../Messenger/MessengerGroupInvite.cs | 50 ++ .../_strings/cartridge-loader/messenger.ftl | 12 + .../_strings/cartridge-loader/messenger.ftl | 12 + 19 files changed, 1526 insertions(+), 84 deletions(-) create mode 100644 Content.Shared/_Sunrise/Messenger/MessengerGroupInvite.cs diff --git a/Content.Client/_Sunrise/CartridgeLoader/Cartridges/MessagePanel.xaml.cs b/Content.Client/_Sunrise/CartridgeLoader/Cartridges/MessagePanel.xaml.cs index 7eadbe4839..590afa7603 100644 --- a/Content.Client/_Sunrise/CartridgeLoader/Cartridges/MessagePanel.xaml.cs +++ b/Content.Client/_Sunrise/CartridgeLoader/Cartridges/MessagePanel.xaml.cs @@ -1,5 +1,6 @@ using Content.Client._Sunrise.Messenger; using Content.Client.Resources; +using Content.Client.Stylesheets; using Content.Shared._Sunrise.Messenger; using Robust.Client.AutoGenerated; using Robust.Client.GameObjects; @@ -21,6 +22,11 @@ public sealed partial class MessagePanel : PanelContainer private ClientEmojiSystem? EmojiSystem => _entitySystemManager.GetEntitySystemOrNull(); private SpriteSystem GetSpriteSystem() => _entitySystemManager.GetEntitySystem(); + /// + /// ID сообщения для идентификации при обновлении + /// + public long MessageId { get; private set; } + private static readonly Type[] MessageTagsAllowed = [ typeof(BoldItalicTag), @@ -38,14 +44,38 @@ public sealed partial class MessagePanel : PanelContainer RobustXamlLoader.Load(this); } + public event Action? OnDeleteMessage; + private Button? _deleteButton; + public void UpdateMessage(MessengerMessage message, bool isOwnMessage, bool isPersonalChat, string? currentUserId) { + MessageId = message.MessageId; SenderLabel.Text = message.SenderName; TimeLabel.Text = message.Timestamp.ToString(@"hh\:mm"); var parsedContent = EmojiSystem?.ParseEmojis(message.Content) ?? message.Content; ContentLabel.SetMessage(FormattedMessage.FromMarkupPermissive(parsedContent), MessageTagsAllowed); + if (isOwnMessage && _deleteButton == null) + { + _deleteButton = new Button + { + Text = "✖", + SetWidth = 24, + SetHeight = 24, + ToolTip = Loc.GetString("messenger-delete-message"), + Margin = new Thickness(2, 0) + }; + _deleteButton.AddStyleClass(StyleClass.ButtonSmall); + _deleteButton.OnPressed += _ => OnDeleteMessage?.Invoke(MessageId); + RightContainer.AddChild(_deleteButton); + } + else if (!isOwnMessage && _deleteButton != null) + { + RightContainer.RemoveChild(_deleteButton); + _deleteButton = null; + } + var roundedButtonTex = _resourceCache.GetTexture("/Textures/Interface/Nano/rounded_button_bordered.svg.96dpi.png"); var roundedStyleBox = new StyleBoxTexture { diff --git a/Content.Client/_Sunrise/CartridgeLoader/Cartridges/MessengerUi.cs b/Content.Client/_Sunrise/CartridgeLoader/Cartridges/MessengerUi.cs index 0867950af0..0db7b11624 100644 --- a/Content.Client/_Sunrise/CartridgeLoader/Cartridges/MessengerUi.cs +++ b/Content.Client/_Sunrise/CartridgeLoader/Cartridges/MessengerUi.cs @@ -29,6 +29,14 @@ public sealed partial class MessengerUi : UIFragment SendMessengerMessage(MessengerUiAction.RequestMessages, userInterface, chatId: chatId); _fragment.OnToggleMute += (chatId, isMuted) => SendMessengerMessage(MessengerUiAction.ToggleMute, userInterface, chatId: chatId, isMuted: isMuted); + _fragment.OnAcceptInvite += (groupId) => + SendMessengerMessage(MessengerUiAction.AcceptInvite, userInterface, groupId: groupId); + _fragment.OnDeclineInvite += (groupId) => + SendMessengerMessage(MessengerUiAction.DeclineInvite, userInterface, groupId: groupId); + _fragment.OnLeaveGroup += (groupId) => + SendMessengerMessage(MessengerUiAction.LeaveGroup, userInterface, groupId: groupId); + _fragment.OnDeleteMessage += (chatId, messageId) => + SendMessengerMessage(MessengerUiAction.DeleteMessage, userInterface, chatId: chatId, messageId: messageId); } public override void UpdateState(BoundUserInterfaceState state) @@ -48,9 +56,10 @@ public sealed partial class MessengerUi : UIFragment string? groupName = null, string? userId = null, string? chatId = null, - bool? isMuted = null) + bool? isMuted = null, + long? messageId = null) { - var messengerMessage = new MessengerUiMessageEvent(action, recipientId, groupId, content, groupName, userId, chatId, isMuted); + var messengerMessage = new MessengerUiMessageEvent(action, recipientId, groupId, content, groupName, userId, chatId, isMuted, messageId); var message = new CartridgeUiMessage(messengerMessage); userInterface.SendMessage(message); } diff --git a/Content.Client/_Sunrise/CartridgeLoader/Cartridges/MessengerUiFragment.xaml b/Content.Client/_Sunrise/CartridgeLoader/Cartridges/MessengerUiFragment.xaml index 4c85109c3d..e6d9920aee 100644 --- a/Content.Client/_Sunrise/CartridgeLoader/Cartridges/MessengerUiFragment.xaml +++ b/Content.Client/_Sunrise/CartridgeLoader/Cartridges/MessengerUiFragment.xaml @@ -9,7 +9,7 @@ VerticalExpand="True"> -