< 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:61
Uncovered lines:17
Coverable lines:78
Total lines:182
Line coverage:78.2% (61 of 78)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
PlacesSubSectionComponentController(...)0%110100%
Dispose()0%110100%
FirstLoading()0%2100%
RequestAllPlaces()0%220100%
RequestAllFromAPI()0%110100%
OnRequestedEventsUpdated(...)0%2100%
TakeAllForAvailableSlots(...)0%110100%
ShowMorePlaces()0%3.013088.89%
ShowPlaceDetailedInfo(...)0%110100%
OnJumpInToPlace(...)0%220100%
View_OnFriendHandlerAdded(...)0%2100%
OnChannelToJoinChanged(...)0%12300%
JumpInToPlace(...)0%6.136084.62%

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;
 9using Environment = DCL.Environment;
 10
 11public class PlacesSubSectionComponentController : IPlacesSubSectionComponentController, IPlacesAndEventsAPIRequester
 12{
 13    public event Action OnCloseExploreV2;
 14
 15    internal const int INITIAL_NUMBER_OF_ROWS = 5;
 16    private const int SHOW_MORE_ROWS_INCREMENT = 3;
 17
 18    internal readonly IPlacesSubSectionComponentView view;
 19    internal readonly IPlacesAPIController placesAPIApiController;
 20    internal readonly FriendTrackerController friendsTrackerController;
 21    private readonly IExploreV2Analytics exploreV2Analytics;
 22    private readonly DataStore dataStore;
 23
 24    internal readonly PlaceAndEventsCardsReloader cardsReloader;
 25
 1726    internal List<HotSceneInfo> placesFromAPI = new ();
 27    internal int availableUISlots;
 28
 1729    public PlacesSubSectionComponentController(IPlacesSubSectionComponentView view, IPlacesAPIController placesAPI, IFri
 30    {
 1731        cardsReloader = new PlaceAndEventsCardsReloader(view, this, dataStore.exploreV2);
 32
 1733        this.view = view;
 34
 1735        this.view.OnReady += FirstLoading;
 36
 1737        this.view.OnInfoClicked += ShowPlaceDetailedInfo;
 1738        this.view.OnJumpInClicked += OnJumpInToPlace;
 39
 1740        this.view.OnShowMorePlacesClicked += ShowMorePlaces;
 41
 1742        this.view.OnFriendHandlerAdded += View_OnFriendHandlerAdded;
 43
 1744        this.dataStore = dataStore;
 1745        this.dataStore.channels.currentJoinChannelModal.OnChange += OnChannelToJoinChanged;
 46
 1747        placesAPIApiController = placesAPI;
 48
 1749        friendsTrackerController = new FriendTrackerController(friendsController, view.currentFriendColors);
 50
 1751        this.exploreV2Analytics = exploreV2Analytics;
 52
 1753        view.ConfigurePools();
 1754    }
 55
 56    public void Dispose()
 57    {
 1758        view.OnReady -= FirstLoading;
 1759        view.OnInfoClicked -= ShowPlaceDetailedInfo;
 1760        view.OnJumpInClicked -= OnJumpInToPlace;
 1761        view.OnPlacesSubSectionEnable -= RequestAllPlaces;
 1762        view.OnFriendHandlerAdded -= View_OnFriendHandlerAdded;
 1763        view.OnShowMorePlacesClicked -= ShowMorePlaces;
 64
 1765        dataStore.channels.currentJoinChannelModal.OnChange -= OnChannelToJoinChanged;
 66
 1767        cardsReloader.Dispose();
 1768    }
 69
 70    private void FirstLoading()
 71    {
 072        view.OnPlacesSubSectionEnable += RequestAllPlaces;
 073        cardsReloader.Initialize();
 074    }
 75
 76    internal void RequestAllPlaces()
 77    {
 278        if (cardsReloader.CanReload())
 79        {
 280            availableUISlots = view.CurrentTilesPerRow * INITIAL_NUMBER_OF_ROWS;
 281            view.SetShowMoreButtonActive(false);
 82
 283            cardsReloader.RequestAll();
 84        }
 285    }
 86
 87    public void RequestAllFromAPI()
 88    {
 389        placesAPIApiController.GetAllPlaces(
 90            OnCompleted: OnRequestedEventsUpdated);
 391    }
 92
 93    private void OnRequestedEventsUpdated(List<HotSceneInfo> placeList)
 94    {
 095        friendsTrackerController.RemoveAllHandlers();
 96
 097        placesFromAPI = placeList;
 98
 099        view.SetPlaces(PlacesAndEventsCardsFactory.CreatePlacesCards((TakeAllForAvailableSlots(placeList))));
 100
 0101        view.SetShowMorePlacesButtonActive(availableUISlots < placesFromAPI.Count);
 0102    }
 103
 104    internal List<HotSceneInfo> TakeAllForAvailableSlots(List<HotSceneInfo> modelsFromAPI) =>
 1105        modelsFromAPI.Take(availableUISlots).ToList();
 106
 107    internal void ShowMorePlaces()
 108    {
 2109        int numberOfExtraItemsToAdd = ((int)Mathf.Ceil((float)availableUISlots / view.currentPlacesPerRow) * view.curren
 2110        int numberOfItemsToAdd = (view.currentPlacesPerRow * SHOW_MORE_ROWS_INCREMENT) + numberOfExtraItemsToAdd;
 111
 2112        List<HotSceneInfo> placesFiltered = availableUISlots + numberOfItemsToAdd <= placesFromAPI.Count
 113            ? placesFromAPI.GetRange(availableUISlots, numberOfItemsToAdd)
 114            : placesFromAPI.GetRange(availableUISlots, placesFromAPI.Count - availableUISlots);
 115
 2116        view.AddPlaces(PlacesAndEventsCardsFactory.CreatePlacesCards(placesFiltered));
 117
 2118        availableUISlots += numberOfItemsToAdd;
 119
 2120        if (availableUISlots > placesFromAPI.Count)
 0121            availableUISlots = placesFromAPI.Count;
 122
 2123        view.SetShowMorePlacesButtonActive(availableUISlots < placesFromAPI.Count);
 2124    }
 125
 126    internal void ShowPlaceDetailedInfo(PlaceCardComponentModel placeModel)
 127    {
 1128        view.ShowPlaceModal(placeModel);
 1129        exploreV2Analytics.SendClickOnPlaceInfo(placeModel.hotSceneInfo.id, placeModel.placeName);
 130
 1131        dataStore.exploreV2.currentVisibleModal.Set(ExploreV2CurrentModal.Places);
 1132    }
 133
 134    internal void OnJumpInToPlace(HotSceneInfo placeFromAPI)
 135    {
 1136        JumpInToPlace(placeFromAPI);
 1137        view.HidePlaceModal();
 138
 1139        dataStore.exploreV2.currentVisibleModal.Set(ExploreV2CurrentModal.None);
 1140        OnCloseExploreV2?.Invoke();
 1141        exploreV2Analytics.SendPlaceTeleport(placeFromAPI.id, placeFromAPI.name, placeFromAPI.baseCoords);
 1142    }
 143
 144    private void View_OnFriendHandlerAdded(FriendsHandler friendsHandler) =>
 0145        friendsTrackerController.AddHandler(friendsHandler);
 146
 147    private void OnChannelToJoinChanged(string currentChannelId, string previousChannelId)
 148    {
 0149        if (!string.IsNullOrEmpty(currentChannelId))
 0150            return;
 151
 0152        view.HidePlaceModal();
 0153        dataStore.exploreV2.currentVisibleModal.Set(ExploreV2CurrentModal.None);
 0154        OnCloseExploreV2?.Invoke();
 0155    }
 156
 157    /// <summary>
 158    /// Makes a jump in to the place defined by the given place data from API.
 159    /// </summary>
 160    /// <param name="placeFromAPI">Place data from API.</param>
 161    public static void JumpInToPlace(HotSceneInfo placeFromAPI)
 162    {
 2163        HotSceneInfo.Realm realm = new HotSceneInfo.Realm() { layer = null, serverName = null };
 4164        placeFromAPI.realms = placeFromAPI.realms.OrderByDescending(x => x.usersCount).ToArray();
 165
 4166        for (int i = 0; i < placeFromAPI.realms.Length; i++)
 167        {
 2168            bool isArchipelagoRealm = string.IsNullOrEmpty(placeFromAPI.realms[i].layer);
 169
 2170            if (isArchipelagoRealm || placeFromAPI.realms[i].usersCount < placeFromAPI.realms[i].maxUsers)
 171            {
 2172                realm = placeFromAPI.realms[i];
 2173                break;
 174            }
 175        }
 176
 2177        if (string.IsNullOrEmpty(realm.serverName))
 0178            Environment.i.world.teleportController.Teleport(placeFromAPI.baseCoords.x, placeFromAPI.baseCoords.y);
 179        else
 2180            Environment.i.world.teleportController.JumpIn(placeFromAPI.baseCoords.x, placeFromAPI.baseCoords.y, realm.se
 2181    }
 182}