< Summary

Class:UnreadNotificationBadge
Assembly:NotificationBadge
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/NotificationBadge/UnreadNotificationBadge.cs
Covered lines:36
Uncovered lines:2
Coverable lines:38
Total lines:104
Line coverage:94.7% (36 of 38)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
UnreadNotificationBadge()0%110100%
Initialize(...)0%22090.91%
OnDestroy()0%220100%
ChatController_OnAddMessage(...)0%330100%
LastReadChatMessages_OnAdded(...)0%220100%
UpdateUnreadMessages()0%110100%
RefreshNotificationBadge()0%330100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/NotificationBadge/UnreadNotificationBadge.cs

#LineLine coverage
 1using DCL.Interface;
 2using System.Linq;
 3using TMPro;
 4using UnityEngine;
 5
 6/// <summary>
 7/// Shows the number of unread messages from a friend.
 8/// </summary>
 9public class UnreadNotificationBadge : MonoBehaviour
 10{
 11    public TextMeshProUGUI notificationText;
 12    public GameObject notificationContainer;
 5613    public int maxNumberToShow = 9;
 14
 15    private IChatController currentChatController;
 16    private string currentUserId;
 17    private long currentTimestampReading;
 18    private int currentUnreadMessagesValue;
 19
 20    public int currentUnreadMessages
 21    {
 022        get => currentUnreadMessagesValue;
 23        set
 24        {
 4325            currentUnreadMessagesValue = value;
 4326            RefreshNotificationBadge();
 4327        }
 28    }
 29
 30    /// <summary>
 31    /// Prepares the notification badge for listening to a specific user
 32    /// </summary>
 33    /// <param name="chatController">Chat Controlled to be listened</param>
 34    /// <param name="userId">User ID to listen to</param>
 35    public void Initialize(IChatController chatController, string userId)
 36    {
 2237        if (chatController == null)
 038            return;
 39
 2240        currentChatController = chatController;
 2241        currentUserId = userId;
 42
 2243        CommonScriptableObjects.lastReadChatMessages.TryGetValue(currentUserId, out currentTimestampReading);
 2244        UpdateUnreadMessages();
 45
 2246        currentChatController.OnAddMessage -= ChatController_OnAddMessage;
 2247        currentChatController.OnAddMessage += ChatController_OnAddMessage;
 48
 2249        CommonScriptableObjects.lastReadChatMessages.OnAdded -= LastReadChatMessages_OnAdded;
 2250        CommonScriptableObjects.lastReadChatMessages.OnAdded += LastReadChatMessages_OnAdded;
 2251    }
 52
 53    private void OnDestroy()
 54    {
 5155        if (currentChatController == null)
 2956            return;
 57
 2258        currentChatController.OnAddMessage -= ChatController_OnAddMessage;
 2259        CommonScriptableObjects.lastReadChatMessages.OnAdded -= LastReadChatMessages_OnAdded;
 2260    }
 61
 62    private void ChatController_OnAddMessage(ChatMessage newMessage)
 63    {
 1564        if (newMessage.messageType == ChatMessage.Type.PRIVATE &&
 65            newMessage.sender == currentUserId)
 66        {
 67            // A new message from [userId] is received
 1368            UpdateUnreadMessages();
 69        }
 1570    }
 71
 72    private void LastReadChatMessages_OnAdded(string addedKey, long addedValue)
 73    {
 674        if (addedKey == currentUserId)
 75        {
 76            // The player reads the latest messages of [userId]
 477            currentTimestampReading = addedValue;
 478            currentUnreadMessages = 0;
 479            UpdateUnreadMessages();
 80        }
 681    }
 82
 83    private void UpdateUnreadMessages()
 84    {
 3985        currentUnreadMessages = currentChatController.GetEntries()
 86                                                     .Count(
 5987                                                         msg => msg.messageType == ChatMessage.Type.PRIVATE &&
 88                                                                msg.sender == currentUserId &&
 89                                                                msg.timestamp > (ulong)currentTimestampReading);
 3990    }
 91
 92    private void RefreshNotificationBadge()
 93    {
 4394        if (currentUnreadMessagesValue > 0)
 95        {
 1396            notificationContainer.SetActive(true);
 1397            notificationText.text = currentUnreadMessagesValue <= maxNumberToShow ? currentUnreadMessagesValue.ToString(
 1398        }
 99        else
 100        {
 30101            notificationContainer.SetActive(false);
 102        }
 30103    }
 104}