< 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:146
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;
 5using static PrivateChatEntry;
 6
 7public class PrivateChatEntry : BaseComponentView, IComponentModelConfig<PrivateChatEntryModel>
 8{
 9    [SerializeField] internal Button openChatButton;
 10    [SerializeField] internal PrivateChatEntryModel model;
 11    [SerializeField] internal TMP_Text userNameLabel;
 12    [SerializeField] internal TMP_Text lastMessageLabel;
 13    [SerializeField] internal ImageComponentView picture;
 14    [SerializeField] internal UnreadNotificationBadge unreadNotifications;
 15    [SerializeField] internal Button optionsButton;
 16    [SerializeField] internal GameObject blockedContainer;
 17    [SerializeField] internal GameObject onlineStatusContainer;
 18    [SerializeField] internal GameObject offlineStatusContainer;
 19    [SerializeField] internal RectTransform userContextMenuPositionReference;
 20
 21    private UserContextMenu userContextMenu;
 22    private IChatController chatController;
 23    private ILastReadMessagesService lastReadMessagesService;
 24
 025    public PrivateChatEntryModel Model => model;
 26
 27    public event Action<PrivateChatEntry> OnOpenChat;
 28
 29    public static PrivateChatEntry Create()
 30    {
 731        return Instantiate(Resources.Load<PrivateChatEntry>("SocialBarV1/WhisperChannelElement"));
 32    }
 33
 34    public override void Awake()
 35    {
 3236        base.Awake();
 3237        optionsButton.onClick.AddListener(() =>
 38        {
 039            userContextMenu.Show(model.userId);
 040            Dock(userContextMenu);
 041        });
 3442        openChatButton.onClick.AddListener(() => OnOpenChat?.Invoke(this));
 3243    }
 44
 45    public void Initialize(IChatController chatController,
 46        UserContextMenu userContextMenu,
 47        ILastReadMessagesService lastReadMessagesService)
 48    {
 2449        this.chatController = chatController;
 2450        this.userContextMenu = userContextMenu;
 2451        this.lastReadMessagesService = lastReadMessagesService;
 2452        userContextMenu.OnBlock -= HandleUserBlocked;
 2453        userContextMenu.OnBlock += HandleUserBlocked;
 2454    }
 55
 56    public void Configure(PrivateChatEntryModel newModel)
 57    {
 3558        model = newModel;
 3559        RefreshControl();
 3560    }
 61
 62    public override void RefreshControl()
 63    {
 3564        userNameLabel.text = model.userName;
 3565        lastMessageLabel.text = model.lastMessage;
 3566        SetBlockStatus(model.isBlocked);
 3567        SetPresence(model.isOnline);
 3568        unreadNotifications.Initialize(chatController, model.userId, lastReadMessagesService);
 69
 3570        if (model.imageFetchingEnabled)
 171            EnableAvatarSnapshotFetching();
 72        else
 3473            DisableAvatarSnapshotFetching();
 3474    }
 75
 76    private void HandleUserBlocked(string userId, bool blocked)
 77    {
 078        if (userId != model.userId) return;
 079        SetBlockStatus(blocked);
 080    }
 81
 82    public void SetBlockStatus(bool isBlocked)
 83    {
 3584        model.isBlocked = isBlocked;
 3585        blockedContainer.SetActive(isBlocked);
 3586    }
 87
 88    private void SetPresence(bool isOnline)
 89    {
 3590        model.isOnline = isOnline;
 3591        onlineStatusContainer.SetActive(isOnline && !model.isBlocked);
 3592        offlineStatusContainer.SetActive(!isOnline && !model.isBlocked);
 3593    }
 94
 95    private void Dock(UserContextMenu userContextMenu)
 96    {
 097        var menuTransform = (RectTransform) userContextMenu.transform;
 098        menuTransform.pivot = userContextMenuPositionReference.pivot;
 099        menuTransform.position = userContextMenuPositionReference.position;
 0100    }
 101
 102    public bool IsVisible(RectTransform container)
 103    {
 21104        if (!gameObject.activeSelf) return false;
 21105        return ((RectTransform) transform).CountCornersVisibleFrom(container) > 0;
 106    }
 107
 108    public void EnableAvatarSnapshotFetching()
 109    {
 24110        if (model.imageFetchingEnabled) return;
 22111        picture.Configure(new ImageComponentModel {uri = model.pictureUrl});
 22112        model.imageFetchingEnabled = true;
 22113    }
 114
 115    public void DisableAvatarSnapshotFetching()
 116    {
 69117        if (!model.imageFetchingEnabled) return;
 1118        picture.SetImage((string) null);
 1119        model.imageFetchingEnabled = false;
 1120    }
 121
 122    [Serializable]
 123    public class PrivateChatEntryModel : BaseComponentModel
 124    {
 125        public string userId;
 126        public string userName;
 127        public string lastMessage;
 128        public ulong lastMessageTimestamp;
 129        public string pictureUrl;
 130        public bool isBlocked;
 131        public bool isOnline;
 132        public bool imageFetchingEnabled;
 133
 35134        public PrivateChatEntryModel(string userId, string userName, string lastMessage, string pictureUrl, bool isBlock
 135            ulong lastMessageTimestamp)
 136        {
 35137            this.userId = userId;
 35138            this.userName = userName;
 35139            this.lastMessage = lastMessage;
 35140            this.pictureUrl = pictureUrl;
 35141            this.isBlocked = isBlocked;
 35142            this.isOnline = isOnline;
 35143            this.lastMessageTimestamp = lastMessageTimestamp;
 35144        }
 145    }
 146}