< Summary

Class:ChatController
Assembly:ChatController
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/ChatController/ChatController.cs
Covered lines:11
Uncovered lines:75
Coverable lines:86
Total lines:248
Line coverage:12.7% (11 of 86)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
ChatController()0%110100%
Awake()0%110100%
InitializeChat(...)0%6200%
AddMessageToChatWindow(...)0%72800%
AddChatMessages(...)0%90900%
UpdateTotalUnseenMessages(...)0%6200%
UpdateUserUnseenMessages(...)0%6200%
UpdateTotalUnseenMessagesByUser(...)0%12300%
Send(...)0%2100%
MarkMessagesAsSeen(...)0%64050%
GetPrivateMessages(...)0%2100%
GetUnseenMessagesByUser()0%2100%
GetAllocatedUnseenMessages(...)0%3.333066.67%
GetAllocatedEntries()0%110100%
GetPrivateAllocatedEntriesByUser(...)0%2100%
FakePublicMessage()0%2100%
FakePrivateMessage()0%2100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/ChatController/ChatController.cs

#LineLine coverage
 1using DCL.Interface;
 2using System;
 3using System.Collections.Generic;
 4using System.Linq;
 5using DCL.Chat;
 6using DCL.Chat.WebApi;
 7using JetBrains.Annotations;
 8using UnityEngine;
 9
 10public class ChatController : MonoBehaviour, IChatController
 11{
 012    public static ChatController i { get; private set; }
 13
 214    private readonly List<ChatMessage> entries = new List<ChatMessage>();
 215    private readonly Dictionary<string, int> unseenMessagesByUser = new Dictionary<string, int>();
 16    private int nearbyUnseenMessages;
 17    private int privateUnseenMessages;
 18
 19    public void Awake()
 20    {
 221        i = this;
 222    }
 23
 224    public int TotalUnseenMessages => privateUnseenMessages + nearbyUnseenMessages;
 25    public event Action<ChatMessage> OnAddMessage;
 26    public event Action<int> OnTotalUnseenMessagesUpdated;
 27    public event Action<string, int> OnUserUnseenMessagesUpdated;
 28
 29    // called by kernel
 30    [UsedImplicitly]
 31    public void InitializeChat(string json)
 32    {
 033        var msg = JsonUtility.FromJson<InitializeChatPayload>(json);
 34
 035        privateUnseenMessages = msg.totalUnseenMessages;
 036        OnTotalUnseenMessagesUpdated?.Invoke(TotalUnseenMessages);
 037    }
 38
 39    // called by kernel
 40    [UsedImplicitly]
 41    public void AddMessageToChatWindow(string jsonMessage)
 42    {
 043        var message = JsonUtility.FromJson<ChatMessage>(jsonMessage);
 044        if (message == null) return;
 45
 046        var wasNearbyMessage = false;
 047        if (message.messageType == ChatMessage.Type.PUBLIC
 48            && string.IsNullOrEmpty(message.recipient))
 49        {
 050            nearbyUnseenMessages++;
 051            wasNearbyMessage = true;
 52        }
 53
 054        entries.Add(message);
 055        OnAddMessage?.Invoke(message);
 56
 057        if (wasNearbyMessage)
 58        {
 059            OnTotalUnseenMessagesUpdated?.Invoke(TotalUnseenMessages);
 060            OnUserUnseenMessagesUpdated?.Invoke(ChatUtils.NEARBY_CHANNEL_ID, nearbyUnseenMessages);
 61        }
 062    }
 63
 64    // called by kernel
 65    [UsedImplicitly]
 66    public void AddChatMessages(string jsonMessage)
 67    {
 068        var messages = JsonUtility.FromJson<ChatMessageListPayload>(jsonMessage);
 69
 070        if (messages == null) return;
 71
 072        var wasNearbyMessage = false;
 73
 074        foreach (var message in messages.messages)
 75        {
 076            entries.Add(message);
 77
 078            if (message.messageType == ChatMessage.Type.PUBLIC
 79                && string.IsNullOrEmpty(message.recipient))
 80            {
 081                nearbyUnseenMessages++;
 082                wasNearbyMessage = true;
 83            }
 84
 085            OnAddMessage?.Invoke(message);
 86        }
 87
 088        if (wasNearbyMessage)
 89        {
 090            OnTotalUnseenMessagesUpdated?.Invoke(TotalUnseenMessages);
 091            OnUserUnseenMessagesUpdated?.Invoke(ChatUtils.NEARBY_CHANNEL_ID, nearbyUnseenMessages);
 92        }
 093    }
 94
 95    // called by kernel
 96    [UsedImplicitly]
 97    public void UpdateTotalUnseenMessages(string json)
 98    {
 099        var msg = JsonUtility.FromJson<UpdateTotalUnseenMessagesPayload>(json);
 0100        privateUnseenMessages = msg.total;
 0101        OnTotalUnseenMessagesUpdated?.Invoke(TotalUnseenMessages);
 0102    }
 103
 104    // called by kernel
 105    [UsedImplicitly]
 106    public void UpdateUserUnseenMessages(string json)
 107    {
 0108        var msg = JsonUtility.FromJson<UpdateUserUnseenMessagesPayload>(json);
 0109        unseenMessagesByUser[msg.userId] = msg.total;
 0110        OnUserUnseenMessagesUpdated?.Invoke(msg.userId, msg.total);
 0111    }
 112
 113    // called by kernel
 114    [UsedImplicitly]
 115    public void UpdateTotalUnseenMessagesByUser(string json)
 116    {
 0117        var msg = JsonUtility.FromJson<UpdateTotalUnseenMessagesByUserPayload>(json);
 118
 0119        foreach (var unseenMessages in msg.unseenPrivateMessages)
 120        {
 0121            var userId = unseenMessages.userId;
 0122            var count = unseenMessages.count;
 0123            unseenMessagesByUser[userId] = count;
 0124            OnUserUnseenMessagesUpdated?.Invoke(userId, count);
 125        }
 0126    }
 127
 0128    public void Send(ChatMessage message) => WebInterface.SendChatMessage(message);
 129
 130    public void MarkMessagesAsSeen(string userId)
 131    {
 2132        WebInterface.MarkMessagesAsSeen(userId);
 133
 2134        if (userId == ChatUtils.NEARBY_CHANNEL_ID)
 135        {
 0136            nearbyUnseenMessages = 0;
 0137            OnTotalUnseenMessagesUpdated?.Invoke(TotalUnseenMessages);
 0138            OnUserUnseenMessagesUpdated?.Invoke(ChatUtils.NEARBY_CHANNEL_ID, nearbyUnseenMessages);
 139        }
 2140    }
 141
 142    public void GetPrivateMessages(string userId, int limit, string fromMessageId)
 143    {
 0144        WebInterface.GetPrivateMessages(userId, limit, fromMessageId);
 0145    }
 146
 0147    public void GetUnseenMessagesByUser() => WebInterface.GetUnseenMessagesByUser();
 148
 149    public int GetAllocatedUnseenMessages(string userId)
 150    {
 2151        if (userId == ChatUtils.NEARBY_CHANNEL_ID)
 2152            return nearbyUnseenMessages;
 0153        return unseenMessagesByUser.ContainsKey(userId) ? unseenMessagesByUser[userId] : 0;
 154    }
 155
 1156    public List<ChatMessage> GetAllocatedEntries() => new List<ChatMessage>(entries);
 157
 158    public List<ChatMessage> GetPrivateAllocatedEntriesByUser(string userId)
 159    {
 0160        return entries
 0161            .Where(x => (x.sender == userId || x.recipient == userId) && x.messageType == ChatMessage.Type.PRIVATE)
 162            .ToList();
 163    }
 164
 165    [ContextMenu("Fake Public Message")]
 166    public void FakePublicMessage()
 167    {
 0168        UserProfile ownProfile = UserProfile.GetOwnUserProfile();
 169
 0170        var model = new UserProfileModel()
 171        {
 172            userId = "test user 1",
 173            name = "test user 1",
 174        };
 175
 0176        UserProfileController.i.AddUserProfileToCatalog(model);
 177
 0178        var model2 = new UserProfileModel()
 179        {
 180            userId = "test user 2",
 181            name = "test user 2",
 182        };
 183
 0184        UserProfileController.i.AddUserProfileToCatalog(model2);
 185
 0186        var msg = new ChatMessage()
 187        {
 188            body = "test message",
 189            sender = model.userId,
 190            messageType = ChatMessage.Type.PUBLIC,
 191            timestamp = (ulong) DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
 192        };
 193
 0194        var msg2 = new ChatMessage()
 195        {
 196            body = "test message 2",
 197            sender = ownProfile.userId,
 198            messageType = ChatMessage.Type.PRIVATE,
 199            timestamp = (ulong) DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
 200        };
 201
 0202        AddMessageToChatWindow(JsonUtility.ToJson(msg));
 0203        AddMessageToChatWindow(JsonUtility.ToJson(msg2));
 0204    }
 205
 206    [ContextMenu("Fake Private Message")]
 207    public void FakePrivateMessage()
 208    {
 0209        UserProfile ownProfile = UserProfile.GetOwnUserProfile();
 210
 0211        var model = new UserProfileModel()
 212        {
 213            userId = "test user 1",
 214            name = "test user 1",
 215        };
 216
 0217        UserProfileController.i.AddUserProfileToCatalog(model);
 218
 0219        var model2 = new UserProfileModel()
 220        {
 221            userId = "test user 2",
 222            name = "test user 2",
 223        };
 224
 0225        UserProfileController.i.AddUserProfileToCatalog(model2);
 226
 0227        var msg = new ChatMessage()
 228        {
 229            body = "test message",
 230            sender = model.userId,
 231            recipient = ownProfile.userId,
 232            messageType = ChatMessage.Type.PRIVATE,
 233            timestamp = (ulong) DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
 234        };
 235
 0236        var msg2 = new ChatMessage()
 237        {
 238            body = "test message 2",
 239            recipient = model2.userId,
 240            sender = ownProfile.userId,
 241            messageType = ChatMessage.Type.PRIVATE,
 242            timestamp = (ulong) DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
 243        };
 244
 0245        AddMessageToChatWindow(JsonUtility.ToJson(msg));
 0246        AddMessageToChatWindow(JsonUtility.ToJson(msg2));
 0247    }
 248}