< Summary

Class:UsersAroundListHUDController
Assembly:UsersAroundListHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/UsersAroundListHUD/UsersAroundListHUDController.cs
Covered lines:61
Uncovered lines:44
Coverable lines:105
Total lines:243
Line coverage:58% (61 of 105)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
UsersAroundListHUDController()0%110100%
UsersAroundListHUDController(...)0%2100%
Dispose()0%44093.75%
SetVisibility(...)0%110100%
SetButtonView(...)0%110100%
SetUsersMuted(...)0%6200%
SetUserRecording(...)0%2100%
Initialize(...)0%110100%
MapRenderer_OnUserInfoUpdated(...)0%7.297081.82%
MapRenderer_OnUserInfoRemoved(...)0%330100%
ToggleVisibility()0%2100%
OnMuteUser(...)0%20400%
OnMuteUsers(...)0%12300%
OnMuteAll(...)0%6200%
OnGoToCrowd()0%2100%
OnListOpen()0%2.52050%
OnRendererStateChanged(...)0%12300%
OnUserProfileUpdate(...)0%20400%
ReportMuteStatuses()0%3.213071.43%
MuteStateUpdateRoutine()0%12300%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/UsersAroundListHUD/UsersAroundListHUDController.cs

#LineLine coverage
 1using System.Collections;
 2using System.Collections.Generic;
 3using DCL.Interface;
 4using UnityEngine;
 5
 6public class UsersAroundListHUDController : IHUD
 7{
 8    const float MUTE_STATUS_UPDATE_INTERVAL = 0.3f;
 9
 10    internal IUsersAroundListHUDButtonView usersButtonView;
 11    internal IUsersAroundListHUDListView usersListView;
 12
 13    private bool isVisible = false;
 414    private readonly HashSet<string> trackedUsersHashSet = new HashSet<string>();
 1715    private UserProfile profile => UserProfile.GetOwnUserProfile();
 16
 417    private readonly List<string> usersToMute = new List<string>();
 418    private readonly List<string> usersToUnmute = new List<string>();
 19    private bool isMuteAll = false;
 20    private Coroutine updateMuteStatusRoutine = null;
 21
 22    public event System.Action OnOpen;
 23
 424    public UsersAroundListHUDController()
 25    {
 426        UsersAroundListHUDListView view = Object.Instantiate(Resources.Load<GameObject>("UsersAroundListHUD")).GetCompon
 427        view.name = "_UsersAroundListHUD";
 428        view.gameObject.SetActive(false);
 429        Initialize(view);
 430    }
 31
 032    public UsersAroundListHUDController(IUsersAroundListHUDListView usersListView) { Initialize(usersListView); }
 33
 34    /// <summary>
 35    /// Dispose HUD controller
 36    /// </summary>
 37    public void Dispose()
 38    {
 439        ReportMuteStatuses();
 40
 441        if (updateMuteStatusRoutine != null)
 42        {
 043            CoroutineStarter.Stop(updateMuteStatusRoutine);
 44        }
 45
 446        MinimapMetadata.GetMetadata().OnUserInfoUpdated -= MapRenderer_OnUserInfoUpdated;
 447        MinimapMetadata.GetMetadata().OnUserInfoRemoved -= MapRenderer_OnUserInfoRemoved;
 48
 449        CommonScriptableObjects.rendererState.OnChange -= OnRendererStateChanged;
 450        profile.OnUpdate -= OnUserProfileUpdate;
 51
 452        if (usersListView != null)
 53        {
 454            usersListView.OnRequestMuteUser -= OnMuteUser;
 455            usersListView.OnRequestMuteGlobal -= OnMuteAll;
 456            usersListView.OnGoToCrowdPressed -= OnGoToCrowd;
 457            usersListView.OnOpen -= OnListOpen;
 58
 459            usersListView.Dispose();
 60        }
 61
 462        if (usersButtonView != null)
 63        {
 164            usersButtonView.OnClick -= ToggleVisibility;
 65        }
 466    }
 67
 68    /// <summary>
 69    /// Set HUD's visibility
 70    /// </summary>
 71    /// <param name="visible"></param>
 72    public void SetVisibility(bool visible)
 73    {
 174        isVisible = visible;
 175        usersListView.SetVisibility(visible);
 176    }
 77
 78    /// <summary>
 79    /// Set button to toggle HUD visibility and display users count
 80    /// </summary>
 81    /// <param name="view">Button view</param>
 82    public void SetButtonView(IUsersAroundListHUDButtonView view)
 83    {
 184        usersButtonView = view;
 185        usersButtonView.OnClick += ToggleVisibility;
 186    }
 87
 88    /// <summary>
 89    /// Set mute status for users' id
 90    /// </summary>
 91    /// <param name="usersId">Array of user ids</param>
 92    /// <param name="isMuted">Set if users should be mute or unmute</param>
 93    public void SetUsersMuted(string[] usersId, bool isMuted)
 94    {
 095        for (int i = 0; i < usersId.Length; i++)
 96        {
 097            usersListView.SetUserMuted(usersId[i], isMuted);
 98        }
 099    }
 100
 101    /// <summary>
 102    /// Set user status as "talking"
 103    /// </summary>
 104    /// <param name="userId">User's id</param>
 105    /// <param name="isRecording">Set user status as "talking" or "not talking"</param>
 0106    public void SetUserRecording(string userId, bool isRecording) { usersListView.SetUserRecording(userId, isRecording);
 107
 108    void Initialize(IUsersAroundListHUDListView view)
 109    {
 4110        usersListView = view;
 111
 4112        usersListView.OnRequestMuteUser += OnMuteUser;
 4113        usersListView.OnRequestMuteGlobal += OnMuteAll;
 4114        usersListView.OnGoToCrowdPressed += OnGoToCrowd;
 4115        usersListView.OnOpen += OnListOpen;
 116
 4117        MinimapMetadata.GetMetadata().OnUserInfoUpdated += MapRenderer_OnUserInfoUpdated;
 4118        MinimapMetadata.GetMetadata().OnUserInfoRemoved += MapRenderer_OnUserInfoRemoved;
 119
 4120        CommonScriptableObjects.rendererState.OnChange += OnRendererStateChanged;
 4121        profile.OnUpdate += OnUserProfileUpdate;
 4122    }
 123
 124    void MapRenderer_OnUserInfoUpdated(MinimapMetadata.MinimapUserInfo userInfo)
 125    {
 3126        usersListView.AddOrUpdateUser(userInfo);
 127
 3128        if (!trackedUsersHashSet.Contains(userInfo.userId))
 129        {
 3130            trackedUsersHashSet.Add(userInfo.userId);
 131
 3132            bool isMuted = profile.muted.Contains(userInfo.userId);
 3133            bool isBlocked = profile.blocked != null ? profile.blocked.Contains(userInfo.userId) : false;
 134
 3135            usersListView.SetUserMuted(userInfo.userId, isMuted);
 3136            usersListView.SetUserBlocked(userInfo.userId, isBlocked);
 137
 3138            if (isMuteAll && !isMuted)
 139            {
 0140                OnMuteUser(userInfo.userId, true);
 141            }
 142        }
 143
 3144        usersButtonView?.SetUsersCount(trackedUsersHashSet.Count);
 0145    }
 146
 147    void MapRenderer_OnUserInfoRemoved(string userId)
 148    {
 2149        if (trackedUsersHashSet.Contains(userId))
 150        {
 2151            trackedUsersHashSet.Remove(userId);
 2152            usersButtonView?.SetUsersCount(trackedUsersHashSet.Count);
 153        }
 2154        usersListView.RemoveUser(userId);
 2155    }
 156
 157    void ToggleVisibility()
 158    {
 0159        bool setVisible = !isVisible;
 0160        SetVisibility(setVisible);
 0161    }
 162
 163    void OnMuteUser(string userId, bool mute)
 164    {
 0165        var list = mute ? usersToMute : usersToUnmute;
 0166        list.Add(userId);
 167
 0168        if (updateMuteStatusRoutine == null)
 169        {
 0170            updateMuteStatusRoutine = CoroutineStarter.Start(MuteStateUpdateRoutine());
 171        }
 0172    }
 173
 174    void OnMuteUsers(IEnumerable<string> usersId, bool mute)
 175    {
 0176        using (var iterator = usersId.GetEnumerator())
 177        {
 0178            while (iterator.MoveNext())
 179            {
 0180                OnMuteUser(iterator.Current, mute);
 181            }
 0182        }
 0183    }
 184
 185    void OnMuteAll(bool mute)
 186    {
 0187        isMuteAll = mute;
 188
 0189        if (mute)
 190        {
 0191            usersToUnmute.Clear();
 0192        }
 193        else
 194        {
 0195            usersToMute.Clear();
 196        }
 0197        OnMuteUsers(trackedUsersHashSet, mute);
 0198    }
 199
 0200    void OnGoToCrowd() { WebInterface.GoToCrowd(); }
 201
 1202    void OnListOpen() { OnOpen?.Invoke(); }
 203
 204    private void OnRendererStateChanged(bool isEnable, bool prevState)
 205    {
 0206        if (isEnable || !isVisible)
 0207            return;
 208
 0209        SetVisibility(false);
 0210    }
 211
 212    private void OnUserProfileUpdate(UserProfile profile)
 213    {
 0214        using (var iterator = trackedUsersHashSet.GetEnumerator())
 215        {
 0216            while (iterator.MoveNext())
 217            {
 0218                usersListView.SetUserBlocked(iterator.Current, profile.blocked != null ? profile.blocked.Contains(iterat
 219            }
 0220        }
 0221    }
 222
 223    void ReportMuteStatuses()
 224    {
 4225        if (usersToUnmute.Count > 0)
 226        {
 0227            WebInterface.SetMuteUsers(usersToUnmute.ToArray(), false);
 228        }
 4229        if (usersToMute.Count > 0)
 230        {
 0231            WebInterface.SetMuteUsers(usersToMute.ToArray(), true);
 232        }
 4233        usersToUnmute.Clear();
 4234        usersToMute.Clear();
 4235    }
 236
 237    IEnumerator MuteStateUpdateRoutine()
 238    {
 0239        yield return WaitForSecondsCache.Get(MUTE_STATUS_UPDATE_INTERVAL);
 0240        ReportMuteStatuses();
 0241        updateMuteStatusRoutine = null;
 0242    }
 243}