< 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:70
Uncovered lines:21
Coverable lines:91
Total lines:201
Line coverage:76.9% (70 of 91)
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%
IsInShowAnimationTransitonChanged(...)0%2100%
RequestAllPlacesFromAPI()0%110100%
OnRequestedPlacesUpdated()0%110100%
LoadPlaces()0%2.062075%
ShowMorePlaces()0%4.344072.22%
Dispose()0%110100%
ShowPlaceDetailedInfo(...)0%110100%
JumpInToPlace(...)0%220100%
View_OnFriendHandlerAdded(...)0%2100%

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    void LoadPlaces();
 25
 26    /// <summary>
 27    /// Increment the number of places loaded.
 28    /// </summary>
 29    void ShowMorePlaces();
 30}
 31
 32public class PlacesSubSectionComponentController : IPlacesSubSectionComponentController
 33{
 34    public event Action OnCloseExploreV2;
 35    internal event Action OnPlacesFromAPIUpdated;
 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;
 1842    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
 1848    public PlacesSubSectionComponentController(
 49        IPlacesSubSectionComponentView view,
 50        IPlacesAPIController placesAPI,
 51        IFriendsController friendsController,
 52        IExploreV2Analytics exploreV2Analytics)
 53    {
 1854        this.view = view;
 1855        this.view.OnReady += FirstLoading;
 1856        this.view.OnInfoClicked += ShowPlaceDetailedInfo;
 1857        this.view.OnJumpInClicked += JumpInToPlace;
 1858        this.view.OnFriendHandlerAdded += View_OnFriendHandlerAdded;
 1859        this.view.OnShowMorePlacesClicked += ShowMorePlaces;
 60
 1861        placesAPIApiController = placesAPI;
 1862        OnPlacesFromAPIUpdated += OnRequestedPlacesUpdated;
 63
 1864        friendsTrackerController = new FriendTrackerController(friendsController, view.currentFriendColors);
 65
 1866        this.exploreV2Analytics = exploreV2Analytics;
 67
 1868        view.ConfigurePools();
 1869    }
 70
 71    internal void FirstLoading()
 72    {
 173        reloadPlaces = true;
 174        lastTimeAPIChecked = Time.realtimeSinceStartup - PlacesAndEventsSectionComponentController.MIN_TIME_TO_CHECK_API
 175        RequestAllPlaces();
 76
 177        view.OnPlacesSubSectionEnable += RequestAllPlaces;
 178        DataStore.i.exploreV2.isOpen.OnChange += OnExploreV2Open;
 179    }
 80
 81    internal void OnExploreV2Open(bool current, bool previous)
 82    {
 083        if (current)
 084            return;
 85
 086        reloadPlaces = true;
 087    }
 88
 89    public void RequestAllPlaces()
 90    {
 291        if (!reloadPlaces)
 092            return;
 93
 294        view.RestartScrollViewPosition();
 95
 296        if (Time.realtimeSinceStartup < lastTimeAPIChecked + PlacesAndEventsSectionComponentController.MIN_TIME_TO_CHECK
 097            return;
 98
 299        currentPlacesShowed = view.currentPlacesPerRow * INITIAL_NUMBER_OF_ROWS;
 2100        view.SetPlacesAsLoading(true);
 2101        view.SetShowMorePlacesButtonActive(false);
 102
 2103        reloadPlaces = false;
 2104        lastTimeAPIChecked = Time.realtimeSinceStartup;
 105
 2106        if (!DataStore.i.exploreV2.isInShowAnimationTransiton.Get())
 2107            RequestAllPlacesFromAPI();
 108        else
 0109            DataStore.i.exploreV2.isInShowAnimationTransiton.OnChange += IsInShowAnimationTransitonChanged;
 0110    }
 111
 112    internal void IsInShowAnimationTransitonChanged(bool current, bool previous)
 113    {
 0114        DataStore.i.exploreV2.isInShowAnimationTransiton.OnChange -= IsInShowAnimationTransitonChanged;
 0115        RequestAllPlacesFromAPI();
 0116    }
 117
 118    internal void RequestAllPlacesFromAPI()
 119    {
 3120        placesAPIApiController.GetAllPlaces(
 121            (placeList) =>
 122            {
 0123                placesFromAPI = placeList;
 0124                OnPlacesFromAPIUpdated?.Invoke();
 0125            });
 3126    }
 127
 2128    internal void OnRequestedPlacesUpdated() { LoadPlaces(); }
 129
 130    public void LoadPlaces()
 131    {
 2132        friendsTrackerController.RemoveAllHandlers();
 133
 2134        List<PlaceCardComponentModel> places = new List<PlaceCardComponentModel>();
 2135        List<HotSceneInfo> placesFiltered = placesFromAPI.Take(currentPlacesShowed).ToList();
 4136        foreach (HotSceneInfo receivedPlace in placesFiltered)
 137        {
 0138            PlaceCardComponentModel placeCardModel = ExplorePlacesUtils.CreatePlaceCardModelFromAPIPlace(receivedPlace);
 0139            places.Add(placeCardModel);
 140        }
 141
 2142        view.SetPlaces(places);
 2143        view.SetShowMorePlacesButtonActive(currentPlacesShowed < placesFromAPI.Count);
 2144        view.SetPlacesAsLoading(false);
 2145    }
 146
 147    public void ShowMorePlaces()
 148    {
 2149        List<PlaceCardComponentModel> places = new List<PlaceCardComponentModel>();
 2150        List<HotSceneInfo> placesFiltered = new List<HotSceneInfo>();
 2151        int numberOfExtraItemsToAdd = ((int)Mathf.Ceil((float)currentPlacesShowed / view.currentPlacesPerRow) * view.cur
 2152        int numberOfItemsToAdd = view.currentPlacesPerRow * SHOW_MORE_ROWS_INCREMENT + numberOfExtraItemsToAdd;
 153
 2154        if (currentPlacesShowed + numberOfItemsToAdd <= placesFromAPI.Count)
 2155            placesFiltered = placesFromAPI.GetRange(currentPlacesShowed, numberOfItemsToAdd);
 156        else
 0157            placesFiltered = placesFromAPI.GetRange(currentPlacesShowed, placesFromAPI.Count - currentPlacesShowed);
 158
 4159        foreach (HotSceneInfo receivedPlace in placesFiltered)
 160        {
 0161            PlaceCardComponentModel placeCardModel = ExplorePlacesUtils.CreatePlaceCardModelFromAPIPlace(receivedPlace);
 0162            places.Add(placeCardModel);
 163        }
 164
 2165        view.AddPlaces(places);
 166
 2167        currentPlacesShowed += numberOfItemsToAdd;
 2168        if (currentPlacesShowed > placesFromAPI.Count)
 0169            currentPlacesShowed = placesFromAPI.Count;
 170
 2171        view.SetShowMorePlacesButtonActive(currentPlacesShowed < placesFromAPI.Count);
 2172    }
 173
 174    public void Dispose()
 175    {
 18176        view.OnReady -= FirstLoading;
 18177        view.OnInfoClicked -= ShowPlaceDetailedInfo;
 18178        view.OnJumpInClicked -= JumpInToPlace;
 18179        view.OnPlacesSubSectionEnable -= RequestAllPlaces;
 18180        view.OnFriendHandlerAdded -= View_OnFriendHandlerAdded;
 18181        view.OnShowMorePlacesClicked -= ShowMorePlaces;
 18182        OnPlacesFromAPIUpdated -= OnRequestedPlacesUpdated;
 18183        DataStore.i.exploreV2.isOpen.OnChange -= OnExploreV2Open;
 18184    }
 185
 186    internal void ShowPlaceDetailedInfo(PlaceCardComponentModel placeModel)
 187    {
 1188        view.ShowPlaceModal(placeModel);
 1189        exploreV2Analytics.SendClickOnPlaceInfo(placeModel.hotSceneInfo.id, placeModel.placeName);
 1190    }
 191
 192    internal void JumpInToPlace(HotSceneInfo placeFromAPI)
 193    {
 1194        ExplorePlacesUtils.JumpInToPlace(placeFromAPI);
 1195        view.HidePlaceModal();
 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}