< 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:76
Uncovered lines:20
Coverable lines:96
Total lines:212
Line coverage:79.1% (76 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%220100%
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 DCL.Social.Friends;
 3using ExploreV2Analytics;
 4using System;
 5using System.Collections.Generic;
 6using System.Linq;
 7using UnityEngine;
 8using static HotScenesController;
 9
 10public interface IPlacesSubSectionComponentController : IDisposable
 11{
 12    /// <summary>
 13    /// It will be triggered when the sub-section want to request to close the ExploreV2 main menu.
 14    /// </summary>
 15    event Action OnCloseExploreV2;
 16
 17    /// <summary>
 18    /// Request all places from the API.
 19    /// </summary>
 20    void RequestAllPlaces();
 21
 22    /// <summary>
 23    /// Load the places with the last requested ones.
 24    /// </summary>
 25    /// <param name="placeList"></param>
 26    void LoadPlaces(List<HotSceneInfo> placeList);
 27
 28    /// <summary>
 29    /// Increment the number of places loaded.
 30    /// </summary>
 31    void ShowMorePlaces();
 32}
 33
 34public class PlacesSubSectionComponentController : IPlacesSubSectionComponentController
 35{
 36    public event Action OnCloseExploreV2;
 37
 38    internal const int INITIAL_NUMBER_OF_ROWS = 5;
 39    internal const int SHOW_MORE_ROWS_INCREMENT = 3;
 40    internal IPlacesSubSectionComponentView view;
 41    internal IPlacesAPIController placesAPIApiController;
 42    internal FriendTrackerController friendsTrackerController;
 1743    internal List<HotSceneInfo> placesFromAPI = new List<HotSceneInfo>();
 44    internal int currentPlacesShowed = 0;
 45    internal bool reloadPlaces = false;
 46    internal IExploreV2Analytics exploreV2Analytics;
 47    internal float lastTimeAPIChecked = 0;
 48    private DataStore dataStore;
 49
 1750    public PlacesSubSectionComponentController(
 51        IPlacesSubSectionComponentView view,
 52        IPlacesAPIController placesAPI,
 53        IFriendsController friendsController,
 54        IExploreV2Analytics exploreV2Analytics,
 55        DataStore dataStore)
 56    {
 1757        this.view = view;
 1758        this.view.OnReady += FirstLoading;
 1759        this.view.OnInfoClicked += ShowPlaceDetailedInfo;
 1760        this.view.OnJumpInClicked += JumpInToPlace;
 1761        this.view.OnFriendHandlerAdded += View_OnFriendHandlerAdded;
 1762        this.view.OnShowMorePlacesClicked += ShowMorePlaces;
 63
 1764        this.dataStore = dataStore;
 1765        this.dataStore.channels.currentJoinChannelModal.OnChange += OnChannelToJoinChanged;
 66
 1767        placesAPIApiController = placesAPI;
 68
 1769        friendsTrackerController = new FriendTrackerController(friendsController, view.currentFriendColors);
 70
 1771        this.exploreV2Analytics = exploreV2Analytics;
 72
 1773        view.ConfigurePools();
 1774    }
 75
 76    internal void FirstLoading()
 77    {
 178        reloadPlaces = true;
 179        lastTimeAPIChecked = Time.realtimeSinceStartup - PlacesAndEventsSectionComponentController.MIN_TIME_TO_CHECK_API
 180        RequestAllPlaces();
 81
 182        view.OnPlacesSubSectionEnable += RequestAllPlaces;
 183        dataStore.exploreV2.isOpen.OnChange += OnExploreV2Open;
 184    }
 85
 86    internal void OnExploreV2Open(bool current, bool previous)
 87    {
 288        if (current)
 189            return;
 90
 191        reloadPlaces = true;
 192    }
 93
 94    public void RequestAllPlaces()
 95    {
 296        if (!reloadPlaces)
 097            return;
 98
 299        view.RestartScrollViewPosition();
 100
 2101        if (Time.realtimeSinceStartup < lastTimeAPIChecked + PlacesAndEventsSectionComponentController.MIN_TIME_TO_CHECK
 0102            return;
 103
 2104        currentPlacesShowed = view.currentPlacesPerRow * INITIAL_NUMBER_OF_ROWS;
 2105        view.SetPlacesAsLoading(true);
 2106        view.SetShowMorePlacesButtonActive(false);
 107
 2108        reloadPlaces = false;
 2109        lastTimeAPIChecked = Time.realtimeSinceStartup;
 110
 2111        if (!dataStore.exploreV2.isInShowAnimationTransiton.Get())
 2112            RequestAllPlacesFromAPI();
 113        else
 0114            dataStore.exploreV2.isInShowAnimationTransiton.OnChange += DelayedRequestAllPlacesFromAPI;
 0115    }
 116
 117    private void DelayedRequestAllPlacesFromAPI(bool current, bool previous)
 118    {
 0119        dataStore.exploreV2.isInShowAnimationTransiton.OnChange -= DelayedRequestAllPlacesFromAPI;
 0120        RequestAllPlacesFromAPI();
 0121    }
 122
 123    internal void RequestAllPlacesFromAPI()
 124    {
 3125        placesAPIApiController.GetAllPlaces(OnCompleted: LoadPlaces);
 3126    }
 127
 128    public void LoadPlaces(List<HotSceneInfo> placeList)
 129    {
 1130        placesFromAPI = placeList;
 1131        friendsTrackerController.RemoveAllHandlers();
 132
 1133        List<PlaceCardComponentModel> places = new List<PlaceCardComponentModel>();
 1134        List<HotSceneInfo> placesFiltered = placesFromAPI.Take(currentPlacesShowed).ToList();
 2135        foreach (HotSceneInfo receivedPlace in placesFiltered)
 136        {
 0137            PlaceCardComponentModel placeCardModel = ExplorePlacesUtils.CreatePlaceCardModelFromAPIPlace(receivedPlace);
 0138            places.Add(placeCardModel);
 139        }
 140
 1141        view.SetPlaces(places);
 1142        view.SetShowMorePlacesButtonActive(currentPlacesShowed < placesFromAPI.Count);
 1143    }
 144
 145    public void ShowMorePlaces()
 146    {
 2147        List<PlaceCardComponentModel> places = new List<PlaceCardComponentModel>();
 2148        List<HotSceneInfo> placesFiltered = new List<HotSceneInfo>();
 149
 2150        int numberOfExtraItemsToAdd = ((int)Mathf.Ceil((float)currentPlacesShowed / view.currentPlacesPerRow) * view.cur
 2151        int numberOfItemsToAdd = view.currentPlacesPerRow * SHOW_MORE_ROWS_INCREMENT + numberOfExtraItemsToAdd;
 152
 2153        if (currentPlacesShowed + numberOfItemsToAdd <= placesFromAPI.Count)
 2154            placesFiltered = placesFromAPI.GetRange(currentPlacesShowed, numberOfItemsToAdd);
 155        else
 0156            placesFiltered = placesFromAPI.GetRange(currentPlacesShowed, placesFromAPI.Count - currentPlacesShowed);
 157
 4158        foreach (HotSceneInfo receivedPlace in placesFiltered)
 159        {
 0160            PlaceCardComponentModel placeCardModel = ExplorePlacesUtils.CreatePlaceCardModelFromAPIPlace(receivedPlace);
 0161            places.Add(placeCardModel);
 162        }
 163
 2164        view.AddPlaces(places);
 165
 2166        currentPlacesShowed += numberOfItemsToAdd;
 2167        if (currentPlacesShowed > placesFromAPI.Count)
 0168            currentPlacesShowed = placesFromAPI.Count;
 169
 2170        view.SetShowMorePlacesButtonActive(currentPlacesShowed < placesFromAPI.Count);
 2171    }
 172
 173    public void Dispose()
 174    {
 17175        view.OnReady -= FirstLoading;
 17176        view.OnInfoClicked -= ShowPlaceDetailedInfo;
 17177        view.OnJumpInClicked -= JumpInToPlace;
 17178        view.OnPlacesSubSectionEnable -= RequestAllPlaces;
 17179        view.OnFriendHandlerAdded -= View_OnFriendHandlerAdded;
 17180        view.OnShowMorePlacesClicked -= ShowMorePlaces;
 17181        dataStore.exploreV2.isOpen.OnChange -= OnExploreV2Open;
 17182        dataStore.channels.currentJoinChannelModal.OnChange -= OnChannelToJoinChanged;
 17183    }
 184
 185    internal void ShowPlaceDetailedInfo(PlaceCardComponentModel placeModel)
 186    {
 1187        view.ShowPlaceModal(placeModel);
 1188        exploreV2Analytics.SendClickOnPlaceInfo(placeModel.hotSceneInfo.id, placeModel.placeName);
 1189        dataStore.exploreV2.currentVisibleModal.Set(ExploreV2CurrentModal.Places);
 1190    }
 191
 192    internal void JumpInToPlace(HotSceneInfo placeFromAPI)
 193    {
 1194        ExplorePlacesUtils.JumpInToPlace(placeFromAPI);
 1195        view.HidePlaceModal();
 1196        dataStore.exploreV2.currentVisibleModal.Set(ExploreV2CurrentModal.None);
 1197        OnCloseExploreV2?.Invoke();
 1198        exploreV2Analytics.SendPlaceTeleport(placeFromAPI.id, placeFromAPI.name, placeFromAPI.baseCoords);
 1199    }
 200
 0201    internal void View_OnFriendHandlerAdded(FriendsHandler friendsHandler) { friendsTrackerController.AddHandler(friends
 202
 203    private void OnChannelToJoinChanged(string currentChannelId, string previousChannelId)
 204    {
 0205        if (!string.IsNullOrEmpty(currentChannelId))
 0206            return;
 207
 0208        view.HidePlaceModal();
 0209        dataStore.exploreV2.currentVisibleModal.Set(ExploreV2CurrentModal.None);
 0210        OnCloseExploreV2?.Invoke();
 0211    }
 212}