using System.Linq; using Content.Shared._Sunrise.CartridgeLoader.Cartridges; namespace Content.Server._Sunrise.CartridgeLoader.Cartridges; /// /// Часть системы картриджа мессенджера, отвечающая за обновление UI состояния /// public sealed partial class MessengerCartridgeSystem { private void UpdateUiState(EntityUid uid, EntityUid loaderUid, MessengerCartridgeComponent? component) { if (!Resolve(uid, ref component)) return; var unreadCounts = new Dictionary(); if (component.ServerAddress != null && component.UserId != null) { foreach (var (chatId, messages) in component.MessageHistory) { if (messages == null || messages.Count == 0) continue; if (chatId.StartsWith("personal_")) { var unreadCount = messages.Count(m => !m.IsRead && m.RecipientId == component.UserId && !string.IsNullOrEmpty(m.RecipientId)); if (component.ServerUnreadCounts.TryGetValue(chatId, out var serverCount) && serverCount > unreadCount) { unreadCount = serverCount; } if (unreadCount > 0) { unreadCounts[chatId] = unreadCount; } } } foreach (var (chatId, count) in component.ServerUnreadCounts) { if (!chatId.StartsWith("personal_") && count > 0) { unreadCounts[chatId] = count; } } } var state = new MessengerUiState( component.IsRegistered, component.ServerAddress != null, component.UserId, component.Users, component.Groups, component.MessageHistory, component.MutedPersonalChats, component.MutedGroupChats, unreadCounts ); _cartridgeLoader.UpdateCartridgeUiState(loaderUid, state); } private void ToggleMute(EntityUid uid, MessengerCartridgeComponent component, string chatId, bool isMuted) { var isGroup = component.Groups.Any(g => g.GroupId == chatId); if (isGroup) { if (isMuted) component.MutedGroupChats.Add(chatId); else component.MutedGroupChats.Remove(chatId); } else { if (isMuted) component.MutedPersonalChats.Add(chatId); else component.MutedPersonalChats.Remove(chatId); } if (component.LoaderUid.HasValue) UpdateUiState(uid, component.LoaderUid.Value, component); } }