< Summary

Class:ChatHUDController
Assembly:ChatHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/ChatWidgetHUD/ChatHUDController.cs
Covered lines:58
Uncovered lines:6
Coverable lines:64
Total lines:141
Line coverage:90.6% (58 of 64)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
ChatHUDController()0%110100%
ChatHUDController(...)0%110100%
Initialize(...)0%330100%
View_OnPressPrivateMessage(...)0%6200%
ContextMenu_OnShowMenu()0%2100%
OnCloseButtonPressed(...)0%6200%
AddChatMessage(...)0%660100%
Dispose()0%220100%
ChatMessageToChatEntry(...)0%10100100%
IsProfanityFilteringEnabled()0%220100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/ChatWidgetHUD/ChatHUDController.cs

#LineLine coverage
 1using System;
 2using DCL;
 3using DCL.Interface;
 4using UnityEngine;
 5using UnityEngine.Events;
 6using Object = UnityEngine.Object;
 7
 8public class ChatHUDController : IDisposable
 9{
 110    public static int MAX_CHAT_ENTRIES { internal set; get; } = 30;
 11
 12    public ChatHUDView view;
 13
 14    public event UnityAction<string> OnPressPrivateMessage;
 15
 16    private readonly DataStore dataStore;
 17    private readonly RegexProfanityFilter profanityFilter;
 18    private InputAction_Trigger closeWindowTrigger;
 19
 3220    public ChatHUDController(DataStore dataStore, RegexProfanityFilter profanityFilter = null)
 21    {
 3222        this.dataStore = dataStore;
 3223        this.profanityFilter = profanityFilter;
 3224    }
 25
 26    public void Initialize(ChatHUDView view = null, UnityAction<ChatMessage> onSendMessage = null)
 27    {
 3228        this.view = view ?? ChatHUDView.Create();
 29
 3230        this.view.Initialize(this, onSendMessage);
 31
 3232        this.view.OnPressPrivateMessage -= View_OnPressPrivateMessage;
 3233        this.view.OnPressPrivateMessage += View_OnPressPrivateMessage;
 34
 3235        if (this.view.contextMenu != null)
 36        {
 2437            this.view.contextMenu.OnShowMenu -= ContextMenu_OnShowMenu;
 2438            this.view.contextMenu.OnShowMenu += ContextMenu_OnShowMenu;
 39        }
 40
 3241        closeWindowTrigger = Resources.Load<InputAction_Trigger>("CloseWindow");
 3242        closeWindowTrigger.OnTriggered -= OnCloseButtonPressed;
 3243        closeWindowTrigger.OnTriggered += OnCloseButtonPressed;
 3244    }
 45
 046    void View_OnPressPrivateMessage(string friendUserId) { OnPressPrivateMessage?.Invoke(friendUserId); }
 47
 048    private void ContextMenu_OnShowMenu() { view.OnMessageCancelHover(); }
 49
 50    private void OnCloseButtonPressed(DCLAction_Trigger action)
 51    {
 052        if (view.contextMenu != null)
 53        {
 054            view.contextMenu.Hide();
 055            view.confirmationDialog.Hide();
 56        }
 057    }
 58
 59    public void AddChatMessage(ChatEntry.Model chatEntryModel, bool setScrollPositionToBottom = false)
 60    {
 3861        chatEntryModel.bodyText = ChatUtils.AddNoParse(chatEntryModel.bodyText);
 62
 3863        if (IsProfanityFilteringEnabled() && chatEntryModel.messageType != ChatMessage.Type.PRIVATE)
 64        {
 2465            chatEntryModel.bodyText = profanityFilter.Filter(chatEntryModel.bodyText);
 2466            if (!string.IsNullOrEmpty(chatEntryModel.senderName))
 2467                chatEntryModel.senderName = profanityFilter.Filter(chatEntryModel.senderName);
 2468            if (!string.IsNullOrEmpty(chatEntryModel.recipientName))
 269                chatEntryModel.recipientName = profanityFilter.Filter(chatEntryModel.recipientName);
 70        }
 71
 3872        view.AddEntry(chatEntryModel, setScrollPositionToBottom);
 73
 3874        if (view.entries.Count > MAX_CHAT_ENTRIES)
 75        {
 576            Object.Destroy(view.entries[0].gameObject);
 577            view.entries.Remove(view.entries[0]);
 78        }
 3879    }
 80
 81    public void Dispose()
 82    {
 1483        view.OnPressPrivateMessage -= View_OnPressPrivateMessage;
 1484        if (view.contextMenu != null)
 85        {
 1486            view.contextMenu.OnShowMenu -= ContextMenu_OnShowMenu;
 87        }
 1488        closeWindowTrigger.OnTriggered -= OnCloseButtonPressed;
 1489        Object.Destroy(view.gameObject);
 1490    }
 91
 92    public static ChatEntry.Model ChatMessageToChatEntry(ChatMessage message)
 93    {
 1394        ChatEntry.Model model = new ChatEntry.Model();
 95
 1396        var ownProfile = UserProfile.GetOwnUserProfile();
 97
 1398        model.messageType = message.messageType;
 1399        model.bodyText = message.body;
 13100        model.timestamp = message.timestamp;
 101
 13102        if (message.recipient != null)
 103        {
 5104            var recipientProfile = UserProfileController.userProfilesCatalog.Get(message.recipient);
 5105            model.recipientName = recipientProfile != null ? recipientProfile.userName : message.recipient;
 106        }
 107
 13108        if (message.sender != null)
 109        {
 13110            var senderProfile = UserProfileController.userProfilesCatalog.Get(message.sender);
 13111            model.senderName = senderProfile != null ? senderProfile.userName : message.sender;
 13112            model.senderId = message.sender;
 113        }
 114
 13115        if (model.messageType == ChatMessage.Type.PRIVATE)
 116        {
 11117            if (message.recipient == ownProfile.userId)
 118            {
 4119                model.subType = ChatEntry.Model.SubType.PRIVATE_FROM;
 4120                model.otherUserId = message.sender;
 4121            }
 7122            else if (message.sender == ownProfile.userId)
 123            {
 1124                model.subType = ChatEntry.Model.SubType.PRIVATE_TO;
 1125                model.otherUserId = message.recipient;
 1126            }
 127            else
 128            {
 6129                model.subType = ChatEntry.Model.SubType.NONE;
 130            }
 131        }
 132
 13133        return model;
 134    }
 135
 136    private bool IsProfanityFilteringEnabled()
 137    {
 38138        return dataStore.settings.profanityChatFilteringEnabled.Get()
 139            && profanityFilter != null;
 140    }
 141}