< 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:66
Uncovered lines:20
Coverable lines:86
Total lines:191
Line coverage:76.7% (66 of 86)
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%3.183072.73%
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
 1847    public PlacesSubSectionComponentController(
 48        IPlacesSubSectionComponentView view,
 49        IPlacesAPIController placesAPI,
 50        IFriendsController friendsController,
 51        IExploreV2Analytics exploreV2Analytics)
 52    {
 1853        this.view = view;
 1854        this.view.OnReady += FirstLoading;
 1855        this.view.OnInfoClicked += ShowPlaceDetailedInfo;
 1856        this.view.OnJumpInClicked += JumpInToPlace;
 1857        this.view.OnFriendHandlerAdded += View_OnFriendHandlerAdded;
 1858        this.view.OnShowMorePlacesClicked += ShowMorePlaces;
 59
 1860        placesAPIApiController = placesAPI;
 1861        OnPlacesFromAPIUpdated += OnRequestedPlacesUpdated;
 62
 1863        friendsTrackerController = new FriendTrackerController(friendsController, view.currentFriendColors);
 64
 1865        this.exploreV2Analytics = exploreV2Analytics;
 1866    }
 67
 68    internal void FirstLoading()
 69    {
 170        reloadPlaces = true;
 171        RequestAllPlaces();
 72
 173        view.OnPlacesSubSectionEnable += RequestAllPlaces;
 174        DataStore.i.exploreV2.isOpen.OnChange += OnExploreV2Open;
 175    }
 76
 77    internal void OnExploreV2Open(bool current, bool previous)
 78    {
 079        if (current)
 080            return;
 81
 082        reloadPlaces = true;
 083    }
 84
 85    public void RequestAllPlaces()
 86    {
 287        if (!reloadPlaces)
 088            return;
 89
 290        currentPlacesShowed = view.currentPlacesPerRow * INITIAL_NUMBER_OF_ROWS;
 291        view.RestartScrollViewPosition();
 292        view.SetPlacesAsLoading(true);
 293        view.SetShowMorePlacesButtonActive(false);
 294        reloadPlaces = false;
 95
 296        if (!DataStore.i.exploreV2.isInShowAnimationTransiton.Get())
 297            RequestAllPlacesFromAPI();
 98        else
 099            DataStore.i.exploreV2.isInShowAnimationTransiton.OnChange += IsInShowAnimationTransitonChanged;
 0100    }
 101
 102    internal void IsInShowAnimationTransitonChanged(bool current, bool previous)
 103    {
 0104        DataStore.i.exploreV2.isInShowAnimationTransiton.OnChange -= IsInShowAnimationTransitonChanged;
 0105        RequestAllPlacesFromAPI();
 0106    }
 107
 108    internal void RequestAllPlacesFromAPI()
 109    {
 3110        placesAPIApiController.GetAllPlaces(
 111            (placeList) =>
 112            {
 0113                placesFromAPI = placeList;
 0114                OnPlacesFromAPIUpdated?.Invoke();
 0115            });
 3116    }
 117
 2118    internal void OnRequestedPlacesUpdated() { LoadPlaces(); }
 119
 120    public void LoadPlaces()
 121    {
 2122        friendsTrackerController.RemoveAllHandlers();
 123
 2124        List<PlaceCardComponentModel> places = new List<PlaceCardComponentModel>();
 2125        List<HotSceneInfo> placesFiltered = placesFromAPI.Take(currentPlacesShowed).ToList();
 4126        foreach (HotSceneInfo receivedPlace in placesFiltered)
 127        {
 0128            PlaceCardComponentModel placeCardModel = ExplorePlacesHelpers.CreatePlaceCardModelFromAPIPlace(receivedPlace
 0129            places.Add(placeCardModel);
 130        }
 131
 2132        view.SetPlaces(places);
 2133        view.SetShowMorePlacesButtonActive(currentPlacesShowed < placesFromAPI.Count);
 2134        view.SetPlacesAsLoading(false);
 2135    }
 136
 137    public void ShowMorePlaces()
 138    {
 2139        List<PlaceCardComponentModel> places = new List<PlaceCardComponentModel>();
 2140        List<HotSceneInfo> placesFiltered = new List<HotSceneInfo>();
 2141        int numberOfExtraItemsToAdd = ((int)Mathf.Ceil((float)currentPlacesShowed / view.currentPlacesPerRow) * view.cur
 2142        int numberOfItemsToAdd = view.currentPlacesPerRow * SHOW_MORE_ROWS_INCREMENT + numberOfExtraItemsToAdd;
 143
 2144        if (currentPlacesShowed + numberOfItemsToAdd <= placesFromAPI.Count)
 2145            placesFiltered = placesFromAPI.GetRange(currentPlacesShowed, numberOfItemsToAdd);
 146        else
 0147            placesFiltered = placesFromAPI.GetRange(currentPlacesShowed, placesFromAPI.Count - currentPlacesShowed);
 148
 4149        foreach (HotSceneInfo receivedPlace in placesFiltered)
 150        {
 0151            PlaceCardComponentModel placeCardModel = ExplorePlacesHelpers.CreatePlaceCardModelFromAPIPlace(receivedPlace
 0152            places.Add(placeCardModel);
 153        }
 154
 2155        view.AddPlaces(places);
 156
 2157        currentPlacesShowed += numberOfItemsToAdd;
 2158        if (currentPlacesShowed > placesFromAPI.Count)
 0159            currentPlacesShowed = placesFromAPI.Count;
 160
 2161        view.SetShowMorePlacesButtonActive(currentPlacesShowed < placesFromAPI.Count);
 2162    }
 163
 164    public void Dispose()
 165    {
 18166        view.OnReady -= FirstLoading;
 18167        view.OnInfoClicked -= ShowPlaceDetailedInfo;
 18168        view.OnJumpInClicked -= JumpInToPlace;
 18169        view.OnPlacesSubSectionEnable -= RequestAllPlaces;
 18170        view.OnFriendHandlerAdded -= View_OnFriendHandlerAdded;
 18171        view.OnShowMorePlacesClicked -= ShowMorePlaces;
 18172        OnPlacesFromAPIUpdated -= OnRequestedPlacesUpdated;
 18173        DataStore.i.exploreV2.isOpen.OnChange -= OnExploreV2Open;
 18174    }
 175
 176    internal void ShowPlaceDetailedInfo(PlaceCardComponentModel placeModel)
 177    {
 1178        view.ShowPlaceModal(placeModel);
 1179        exploreV2Analytics.SendClickOnPlaceInfo(placeModel.hotSceneInfo.id, placeModel.placeName);
 1180    }
 181
 182    internal void JumpInToPlace(HotSceneInfo placeFromAPI)
 183    {
 1184        ExplorePlacesHelpers.JumpInToPlace(placeFromAPI);
 1185        view.HidePlaceModal();
 1186        OnCloseExploreV2?.Invoke();
 1187        exploreV2Analytics.SendPlaceTeleport(placeFromAPI.id, placeFromAPI.name, placeFromAPI.baseCoords);
 1188    }
 189
 0190    internal void View_OnFriendHandlerAdded(FriendsHandler friendsHandler) { friendsTrackerController.AddHandler(friends
 191}