< Summary

Class:MainScripts.DCL.Controllers.HotScenes.HotScenesController
Assembly:HotScenesController
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HotScenes/HotScenesController.cs
Covered lines:16
Uncovered lines:16
Coverable lines:32
Total lines:103
Line coverage:50% (16 of 32)
Covered branches:0
Total branches:0
Covered methods:6
Total methods:11
Method coverage:54.5% (6 of 11)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
HotScenesController()0%110100%
Awake()0%110100%
GetHotScenesListAsync(...)0%2100%
GetHotWorldsListAsync()0%72800%
UpdateHotScenesList(...)0%550100%
Dispose()0%2100%
Initialize()0%2100%

File(s)

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

#LineLine coverage
 1using Cysharp.Threading.Tasks;
 2using DCL.Helpers;
 3using DCL.Interface;
 4using JetBrains.Annotations;
 5using System;
 6using System.Collections.Generic;
 7using System.Threading;
 8using UnityEngine;
 9using UnityEngine.Networking;
 10using Environment = DCL.Environment;
 11
 12namespace MainScripts.DCL.Controllers.HotScenes
 13{
 14    /// <summary>
 15    /// We have to keep this class to communicate with Kernel
 16    /// </summary>
 17    public class HotScenesController : MonoBehaviour, IHotScenesController
 18    {
 19        [Obsolete]
 120        public static HotScenesController i { get; private set; }
 21
 22        [Obsolete]
 23        public event Action OnHotSceneListFinishUpdating;
 24
 25        [Obsolete]
 26        public event Action OnHotSceneListChunkUpdated;
 27
 328        public List<IHotScenesController.HotSceneInfo> hotScenesList => hotScenes;
 29
 30        [Obsolete]
 031        public float timeSinceLastUpdate => Time.realtimeSinceStartup - lastUpdateTime;
 32
 33        [Obsolete]
 134        private float lastUpdateTime = float.MinValue * .5f;
 35
 136        private List<IHotScenesController.HotSceneInfo> hotScenes = new ();
 37
 38        [Serializable]
 39        internal struct HotScenesUpdatePayload
 40        {
 41            public int chunkIndex;
 42            public int chunksCount;
 43            public IHotScenesController.HotSceneInfo[] scenesInfo;
 44        }
 45
 146        private readonly AutoResetUniTaskCompletionSource<IReadOnlyList<IHotScenesController.HotSceneInfo>> source
 47            = AutoResetUniTaskCompletionSource<IReadOnlyList<IHotScenesController.HotSceneInfo>>.Create();
 48
 49        private void Awake()
 50        {
 151            i = this;
 152        }
 53
 54        public UniTask<IReadOnlyList<IHotScenesController.HotSceneInfo>> GetHotScenesListAsync(CancellationToken cancell
 55        {
 056            WebInterface.FetchHotScenes();
 057            return source.Task.AttachExternalCancellation(cancellationToken);
 58        }
 59
 60        public async UniTask<IReadOnlyList<IHotScenesController.HotWorldInfo.WorldInfo>> GetHotWorldsListAsync(Cancellat
 61        {
 062            UnityWebRequest result = await Environment.i.platform.webRequest.GetAsync("https://worlds-content-server.dec
 63
 064            if (result.result != UnityWebRequest.Result.Success)
 065                throw new Exception($"Error fetching hot world info:\n{result.error}");
 66
 067            var response = Utils.SafeFromJson<IHotScenesController.HotWorldInfo>(result.downloadHandler.text);
 68
 069            if (response == null)
 070                throw new Exception($"Error parsing hot world info:\n{result.downloadHandler.text}");
 71
 072            if (response.data == null)
 073                throw new Exception($"No worlds info retrieved:\n{result.downloadHandler.text}");
 74
 075            return response.data.perWorld != null ? response.data.perWorld : new List<IHotScenesController.HotWorldInfo.
 076        }
 77
 78        [UsedImplicitly]
 79        public void UpdateHotScenesList(string json)
 80        {
 181            var updatePayload = Utils.SafeFromJson<HotScenesUpdatePayload>(json);
 82
 283            if (updatePayload.chunkIndex == 0) { hotScenes.Clear(); }
 84
 185            hotScenes.AddRange(updatePayload.scenesInfo);
 186            OnHotSceneListChunkUpdated?.Invoke();
 87
 188            if (updatePayload.chunkIndex >= updatePayload.chunksCount - 1)
 89            {
 190                lastUpdateTime = Time.realtimeSinceStartup;
 191                OnHotSceneListFinishUpdating?.Invoke();
 192                source.TrySetResult(hotScenesList);
 93            }
 194        }
 95
 96        public void Dispose()
 97        {
 098            hotScenes.Clear();
 099        }
 100
 0101        public void Initialize() { }
 102    }
 103}