< Summary

Class:PlacesSubSectionComponentController
Assembly:ExploreV2
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/ExploreV2/Scripts/Sections/PlacesAndEventsSection/SubSections/PlacesSubSection/PlacesSubSectionMenu/PlacesSubSectionComponentController.cs
Covered lines:72
Uncovered lines:24
Coverable lines:96
Total lines:211
Line coverage:75% (72 of 96)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
PlacesSubSectionComponentController(...)0%110100%
FirstLoading()0%110100%
OnExploreV2Open(...)0%6200%
RequestAllPlaces()0%4.374071.43%
DelayedRequestAllPlacesFromAPI(...)0%2100%
RequestAllPlacesFromAPI()0%110100%
LoadPlaces(...)0%2.062075%
ShowMorePlaces()0%4.344072.22%
Dispose()0%110100%
ShowPlaceDetailedInfo(...)0%110100%
JumpInToPlace(...)0%220100%
View_OnFriendHandlerAdded(...)0%2100%
OnChannelToJoinChanged(...)0%12300%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/ExploreV2/Scripts/Sections/PlacesAndEventsSection/SubSections/PlacesSubSection/PlacesSubSectionMenu/PlacesSubSectionComponentController.cs

#LineLine coverage
 1using DCL;
 2using ExploreV2Analytics;
 3using System;
 4using System.Collections.Generic;
 5using System.Linq;
 6using UnityEngine;
 7using static HotScenesController;
 8
 9public interface IPlacesSubSectionComponentController : IDisposable
 10{
 11    /// <summary>
 12    /// It will be triggered when the sub-section want to request to close the ExploreV2 main menu.
 13    /// </summary>
 14    event Action OnCloseExploreV2;
 15
 16    /// <summary>
 17    /// Request all places from the API.
 18    /// </summary>
 19    void RequestAllPlaces();
 20
 21    /// <summary>
 22    /// Load the places with the last requested ones.
 23    /// </summary>
 24    /// <param name="placeList"></param>
 25    void LoadPlaces(List<HotSceneInfo> placeList);
 26
 27    /// <summary>
 28    /// Increment the number of places loaded.
 29    /// </summary>
 30    void ShowMorePlaces();
 31}
 32
 33public class PlacesSubSectionComponentController : IPlacesSubSectionComponentController
 34{
 35    public event Action OnCloseExploreV2;
 36
 37    internal const int INITIAL_NUMBER_OF_ROWS = 5;
 38    internal const int SHOW_MORE_ROWS_INCREMENT = 3;
 39    internal IPlacesSubSectionComponentView view;
 40    internal IPlacesAPIController placesAPIApiController;
 41    internal FriendTrackerController friendsTrackerController;
 1742    internal List<HotSceneInfo> placesFromAPI = new List<HotSceneInfo>();
 43    internal int currentPlacesShowed = 0;
 44    internal bool reloadPlaces = false;
 45    internal IExploreV2Analytics exploreV2Analytics;
 46    internal float lastTimeAPIChecked = 0;
 47    private DataStore dataStore;
 48
 1749    public PlacesSubSectionComponentController(
 50        IPlacesSubSectionComponentView view,
 51        IPlacesAPIController placesAPI,
 52        IFriendsController friendsController,
 53        IExploreV2Analytics exploreV2Analytics,
 54        DataStore dataStore)
 55    {
 1756        this.view = view;
 1757        this.view.OnReady += FirstLoading;
 1758        this.view.OnInfoClicked += ShowPlaceDetailedInfo;
 1759        this.view.OnJumpInClicked += JumpInToPlace;
 1760        this.view.OnFriendHandlerAdded += View_OnFriendHandlerAdded;
 1761        this.view.OnShowMorePlacesClicked += ShowMorePlaces;
 62
 1763        this.dataStore = dataStore;
 1764        this.dataStore.channels.currentJoinChannelModal.OnChange += OnChannelToJoinChanged;
 65
 1766        placesAPIApiController = placesAPI;
 67
 1768        friendsTrackerController = new FriendTrackerController(friendsController, view.currentFriendColors);
 69
 1770        this.exploreV2Analytics = exploreV2Analytics;
 71
 1772        view.ConfigurePools();
 1773    }
 74
 75    internal void FirstLoading()
 76    {
 177        reloadPlaces = true;
 178        lastTimeAPIChecked = Time.realtimeSinceStartup - PlacesAndEventsSectionComponentController.MIN_TIME_TO_CHECK_API
 179        RequestAllPlaces();
 80
 181        view.OnPlacesSubSectionEnable += RequestAllPlaces;
 182        dataStore.exploreV2.isOpen.OnChange += OnExploreV2Open;
 183    }
 84
 85    internal void OnExploreV2Open(bool current, bool previous)
 86    {
 087        if (current)
 088            return;
 89
 090        reloadPlaces = true;
 091    }
 92
 93    public void RequestAllPlaces()
 94    {
 295        if (!reloadPlaces)
 096            return;
 97
 298        view.RestartScrollViewPosition();
 99
 2100        if (Time.realtimeSinceStartup < lastTimeAPIChecked + PlacesAndEventsSectionComponentController.MIN_TIME_TO_CHECK
 0101            return;
 102
 2103        currentPlacesShowed = view.currentPlacesPerRow * INITIAL_NUMBER_OF_ROWS;
 2104        view.SetPlacesAsLoading(true);
 2105        view.SetShowMorePlacesButtonActive(false);
 106
 2107        reloadPlaces = false;
 2108        lastTimeAPIChecked = Time.realtimeSinceStartup;
 109
 2110        if (!dataStore.exploreV2.isInShowAnimationTransiton.Get())
 2111            RequestAllPlacesFromAPI();
 112        else
 0113            dataStore.exploreV2.isInShowAnimationTransiton.OnChange += DelayedRequestAllPlacesFromAPI;
 0114    }
 115
 116    private void DelayedRequestAllPlacesFromAPI(bool current, bool previous)
 117    {
 0118        dataStore.exploreV2.isInShowAnimationTransiton.OnChange -= DelayedRequestAllPlacesFromAPI;
 0119        RequestAllPlacesFromAPI();
 0120    }
 121
 122    internal void RequestAllPlacesFromAPI()
 123    {
 3124        placesAPIApiController.GetAllPlaces(OnCompleted: LoadPlaces);
 3125    }
 126
 127    public void LoadPlaces(List<HotSceneInfo> placeList)
 128    {
 1129        placesFromAPI = placeList;
 1130        friendsTrackerController.RemoveAllHandlers();
 131
 1132        List<PlaceCardComponentModel> places = new List<PlaceCardComponentModel>();
 1133        List<HotSceneInfo> placesFiltered = placesFromAPI.Take(currentPlacesShowed).ToList();
 2134        foreach (HotSceneInfo receivedPlace in placesFiltered)
 135        {
 0136            PlaceCardComponentModel placeCardModel = ExplorePlacesUtils.CreatePlaceCardModelFromAPIPlace(receivedPlace);
 0137            places.Add(placeCardModel);
 138        }
 139
 1140        view.SetPlaces(places);
 1141        view.SetShowMorePlacesButtonActive(currentPlacesShowed < placesFromAPI.Count);
 1142    }
 143
 144    public void ShowMorePlaces()
 145    {
 2146        List<PlaceCardComponentModel> places = new List<PlaceCardComponentModel>();
 2147        List<HotSceneInfo> placesFiltered = new List<HotSceneInfo>();
 148
 2149        int numberOfExtraItemsToAdd = ((int)Mathf.Ceil((float)currentPlacesShowed / view.currentPlacesPerRow) * view.cur
 2150        int numberOfItemsToAdd = view.currentPlacesPerRow * SHOW_MORE_ROWS_INCREMENT + numberOfExtraItemsToAdd;
 151
 2152        if (currentPlacesShowed + numberOfItemsToAdd <= placesFromAPI.Count)
 2153            placesFiltered = placesFromAPI.GetRange(currentPlacesShowed, numberOfItemsToAdd);
 154        else
 0155            placesFiltered = placesFromAPI.GetRange(currentPlacesShowed, placesFromAPI.Count - currentPlacesShowed);
 156
 4157        foreach (HotSceneInfo receivedPlace in placesFiltered)
 158        {
 0159            PlaceCardComponentModel placeCardModel = ExplorePlacesUtils.CreatePlaceCardModelFromAPIPlace(receivedPlace);
 0160            places.Add(placeCardModel);
 161        }
 162
 2163        view.AddPlaces(places);
 164
 2165        currentPlacesShowed += numberOfItemsToAdd;
 2166        if (currentPlacesShowed > placesFromAPI.Count)
 0167            currentPlacesShowed = placesFromAPI.Count;
 168
 2169        view.SetShowMorePlacesButtonActive(currentPlacesShowed < placesFromAPI.Count);
 2170    }
 171
 172    public void Dispose()
 173    {
 17174        view.OnReady -= FirstLoading;
 17175        view.OnInfoClicked -= ShowPlaceDetailedInfo;
 17176        view.OnJumpInClicked -= JumpInToPlace;
 17177        view.OnPlacesSubSectionEnable -= RequestAllPlaces;
 17178        view.OnFriendHandlerAdded -= View_OnFriendHandlerAdded;
 17179        view.OnShowMorePlacesClicked -= ShowMorePlaces;
 17180        dataStore.exploreV2.isOpen.OnChange -= OnExploreV2Open;
 17181        dataStore.channels.currentJoinChannelModal.OnChange -= OnChannelToJoinChanged;
 17182    }
 183
 184    internal void ShowPlaceDetailedInfo(PlaceCardComponentModel placeModel)
 185    {
 1186        view.ShowPlaceModal(placeModel);
 1187        exploreV2Analytics.SendClickOnPlaceInfo(placeModel.hotSceneInfo.id, placeModel.placeName);
 1188        dataStore.exploreV2.currentVisibleModal.Set(ExploreV2CurrentModal.Places);
 1189    }
 190
 191    internal void JumpInToPlace(HotSceneInfo placeFromAPI)
 192    {
 1193        ExplorePlacesUtils.JumpInToPlace(placeFromAPI);
 1194        view.HidePlaceModal();
 1195        dataStore.exploreV2.currentVisibleModal.Set(ExploreV2CurrentModal.None);
 1196        OnCloseExploreV2?.Invoke();
 1197        exploreV2Analytics.SendPlaceTeleport(placeFromAPI.id, placeFromAPI.name, placeFromAPI.baseCoords);
 1198    }
 199
 0200    internal void View_OnFriendHandlerAdded(FriendsHandler friendsHandler) { friendsTrackerController.AddHandler(friends
 201
 202    private void OnChannelToJoinChanged(string currentChannelId, string previousChannelId)
 203    {
 0204        if (!string.IsNullOrEmpty(currentChannelId))
 0205            return;
 206
 0207        view.HidePlaceModal();
 0208        dataStore.exploreV2.currentVisibleModal.Set(ExploreV2CurrentModal.None);
 0209        OnCloseExploreV2?.Invoke();
 0210    }
 211}