< Summary

Class:PrivateChatEntry
Assembly:WorldChatWindowHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/WorldChatWindowHUD/PrivateChatEntry.cs
Covered lines:49
Uncovered lines:11
Coverable lines:60
Total lines:145
Line coverage:81.6% (49 of 60)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Create()0%110100%
Awake()0%110100%
Initialize(...)0%110100%
Configure(...)0%110100%
RefreshControl()0%220100%
HandleUserBlocked(...)0%6200%
SetBlockStatus(...)0%110100%
SetPresence(...)0%330100%
Dock(...)0%2100%
IsVisible(...)0%2.152066.67%
EnableAvatarSnapshotFetching()0%220100%
DisableAvatarSnapshotFetching()0%220100%
PrivateChatEntryModel(...)0%110100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/WorldChatWindowHUD/PrivateChatEntry.cs

#LineLine coverage
 1using System;
 2using TMPro;
 3using UnityEngine;
 4using UnityEngine.UI;
 5
 6public class PrivateChatEntry : BaseComponentView, IComponentModelConfig
 7{
 8    [SerializeField] internal Button openChatButton;
 9    [SerializeField] internal PrivateChatEntryModel model;
 10    [SerializeField] internal TMP_Text userNameLabel;
 11    [SerializeField] internal TMP_Text lastMessageLabel;
 12    [SerializeField] internal ImageComponentView picture;
 13    [SerializeField] internal UnreadNotificationBadge unreadNotifications;
 14    [SerializeField] internal Button optionsButton;
 15    [SerializeField] internal GameObject blockedContainer;
 16    [SerializeField] internal GameObject onlineStatusContainer;
 17    [SerializeField] internal GameObject offlineStatusContainer;
 18    [SerializeField] internal RectTransform userContextMenuPositionReference;
 19
 20    private UserContextMenu userContextMenu;
 21    private IChatController chatController;
 22    private ILastReadMessagesService lastReadMessagesService;
 23
 024    public PrivateChatEntryModel Model => model;
 25
 26    public event Action<PrivateChatEntry> OnOpenChat;
 27
 28    public static PrivateChatEntry Create()
 29    {
 730        return Instantiate(Resources.Load<PrivateChatEntry>("SocialBarV1/WhisperChannelElement"));
 31    }
 32
 33    public override void Awake()
 34    {
 3235        base.Awake();
 3236        optionsButton.onClick.AddListener(() =>
 37        {
 038            userContextMenu.Show(model.userId);
 039            Dock(userContextMenu);
 040        });
 3441        openChatButton.onClick.AddListener(() => OnOpenChat?.Invoke(this));
 3242    }
 43
 44    public void Initialize(IChatController chatController,
 45        UserContextMenu userContextMenu,
 46        ILastReadMessagesService lastReadMessagesService)
 47    {
 2448        this.chatController = chatController;
 2449        this.userContextMenu = userContextMenu;
 2450        this.lastReadMessagesService = lastReadMessagesService;
 2451        userContextMenu.OnBlock -= HandleUserBlocked;
 2452        userContextMenu.OnBlock += HandleUserBlocked;
 2453    }
 54
 55    public void Configure(BaseComponentModel newModel)
 56    {
 3557        model = (PrivateChatEntryModel) newModel;
 3558        RefreshControl();
 3559    }
 60
 61    public override void RefreshControl()
 62    {
 3563        userNameLabel.text = model.userName;
 3564        lastMessageLabel.text = model.lastMessage;
 3565        SetBlockStatus(model.isBlocked);
 3566        SetPresence(model.isOnline);
 3567        unreadNotifications.Initialize(chatController, model.userId, lastReadMessagesService);
 68
 3569        if (model.imageFetchingEnabled)
 170            EnableAvatarSnapshotFetching();
 71        else
 3472            DisableAvatarSnapshotFetching();
 3473    }
 74
 75    private void HandleUserBlocked(string userId, bool blocked)
 76    {
 077        if (userId != model.userId) return;
 078        SetBlockStatus(blocked);
 079    }
 80
 81    public void SetBlockStatus(bool isBlocked)
 82    {
 3583        model.isBlocked = isBlocked;
 3584        blockedContainer.SetActive(isBlocked);
 3585    }
 86
 87    private void SetPresence(bool isOnline)
 88    {
 3589        model.isOnline = isOnline;
 3590        onlineStatusContainer.SetActive(isOnline && !model.isBlocked);
 3591        offlineStatusContainer.SetActive(!isOnline && !model.isBlocked);
 3592    }
 93
 94    private void Dock(UserContextMenu userContextMenu)
 95    {
 096        var menuTransform = (RectTransform) userContextMenu.transform;
 097        menuTransform.pivot = userContextMenuPositionReference.pivot;
 098        menuTransform.position = userContextMenuPositionReference.position;
 099    }
 100
 101    public bool IsVisible(RectTransform container)
 102    {
 21103        if (!gameObject.activeSelf) return false;
 21104        return ((RectTransform) transform).CountCornersVisibleFrom(container) > 0;
 105    }
 106
 107    public void EnableAvatarSnapshotFetching()
 108    {
 24109        if (model.imageFetchingEnabled) return;
 22110        picture.Configure(new ImageComponentModel {uri = model.pictureUrl});
 22111        model.imageFetchingEnabled = true;
 22112    }
 113
 114    public void DisableAvatarSnapshotFetching()
 115    {
 69116        if (!model.imageFetchingEnabled) return;
 1117        picture.SetImage((string) null);
 1118        model.imageFetchingEnabled = false;
 1119    }
 120
 121    [Serializable]
 122    public class PrivateChatEntryModel : BaseComponentModel
 123    {
 124        public string userId;
 125        public string userName;
 126        public string lastMessage;
 127        public ulong lastMessageTimestamp;
 128        public string pictureUrl;
 129        public bool isBlocked;
 130        public bool isOnline;
 131        public bool imageFetchingEnabled;
 132
 35133        public PrivateChatEntryModel(string userId, string userName, string lastMessage, string pictureUrl, bool isBlock
 134            ulong lastMessageTimestamp)
 135        {
 35136            this.userId = userId;
 35137            this.userName = userName;
 35138            this.lastMessage = lastMessage;
 35139            this.pictureUrl = pictureUrl;
 35140            this.isBlocked = isBlocked;
 35141            this.isOnline = isOnline;
 35142            this.lastMessageTimestamp = lastMessageTimestamp;
 35143        }
 144    }
 145}