< Summary

Class:ExplorePlacesHelpers
Assembly:ExploreV2
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/ExploreV2/Scripts/Common/ExplorePlacesHelpers.cs
Covered lines:47
Uncovered lines:1
Coverable lines:48
Total lines:158
Line coverage:97.9% (47 of 48)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
ConfigurePlaceCardModal(...)0%220100%
ConfigurePlaceCardsPool(...)0%220100%
InstantiateAndConfigurePlaceCards(...)0%330100%
ConfigurePlaceCard(...)0%550100%
CreatePlaceCardModelFromAPIPlace(...)0%110100%
FormatDescription(...)0%220100%
FormatAuthorName(...)0%110100%
JumpInToPlace(...)0%6.136084.62%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/ExploreV2/Scripts/Common/ExplorePlacesHelpers.cs

#LineLine coverage
 1using DCL;
 2using DCL.Interface;
 3using System;
 4using System.Collections.Generic;
 5using System.Linq;
 6using UnityEngine;
 7using static HotScenesController;
 8
 9/// <summary>
 10/// Helpers related to the places management in ExploreV2.
 11/// </summary>
 12public static class ExplorePlacesHelpers
 13{
 14    internal const string PLACE_CARD_MODAL_ID = "PlaceCard_Modal";
 15    internal const string NO_PLACE_DESCRIPTION_WRITTEN = "The author hasn't written a description yet.";
 16
 17    /// <summary>
 18    /// Instantiates (if does not already exists) a place card modal from the given prefab.
 19    /// </summary>
 20    /// <param name="placeCardModalPrefab">Prefab to instantiate.</param>
 21    /// <returns>An instance of a place card modal.</returns>
 22    public static PlaceCardComponentView ConfigurePlaceCardModal(PlaceCardComponentView placeCardModalPrefab)
 23    {
 2524        PlaceCardComponentView placeModal = null;
 25
 2526        GameObject existingModal = GameObject.Find(PLACE_CARD_MODAL_ID);
 2527        if (existingModal != null)
 1728            placeModal = existingModal.GetComponent<PlaceCardComponentView>();
 29        else
 30        {
 831            placeModal = GameObject.Instantiate(placeCardModalPrefab);
 832            placeModal.name = PLACE_CARD_MODAL_ID;
 33        }
 34
 2535        placeModal.Hide(true);
 36
 2537        return placeModal;
 38    }
 39
 40    /// <summary>
 41    /// Creates and configures a pool for place cards.
 42    /// </summary>
 43    /// <param name="pool">Pool to configure.</param>
 44    /// <param name="poolName">Name of the pool.</param>
 45    /// <param name="placeCardPrefab">Place card prefab to use by the pool.</param>
 46    /// <param name="maxPrewarmCount">Max number of pre-created cards.</param>
 47    public static void ConfigurePlaceCardsPool(out Pool pool, string poolName, PlaceCardComponentView placeCardPrefab, i
 48    {
 3849        pool = PoolManager.i.GetPool(poolName);
 3850        if (pool == null)
 51        {
 352            pool = PoolManager.i.AddPool(
 53                poolName,
 54                GameObject.Instantiate(placeCardPrefab).gameObject,
 55                maxPrewarmCount: maxPrewarmCount,
 56                isPersistent: true);
 57        }
 3858    }
 59
 60    /// <summary>
 61    /// Instantiates and configures a given list of places.
 62    /// </summary>
 63    /// <param name="places">List of places data.</param>
 64    /// <param name="pool">Pool to use.</param>
 65    /// <param name="OnFriendHandlerAdded">Action to inform about the addition of a new friend handler.</param>
 66    /// <param name="OnPlaceInfoClicked">Action to inform when the Info button has been clicked.</param>
 67    /// <param name="OnPlaceJumpInClicked">Action to inform when the JumpIn button has been clicked.</param>
 68    /// <returns>A list of instances of places.</returns>
 69    public static List<BaseComponentView> InstantiateAndConfigurePlaceCards(
 70        List<PlaceCardComponentModel> places,
 71        Pool pool,
 72        Action<FriendsHandler> OnFriendHandlerAdded,
 73        Action<PlaceCardComponentModel> OnPlaceInfoClicked,
 74        Action<HotScenesController.HotSceneInfo> OnPlaceJumpInClicked)
 75    {
 476        List<BaseComponentView> instantiatedPlaces = new List<BaseComponentView>();
 77
 2478        foreach (PlaceCardComponentModel placeInfo in places)
 79        {
 880            PlaceCardComponentView placeGO = pool.Get().gameObject.GetComponent<PlaceCardComponentView>();
 881            ConfigurePlaceCard(placeGO, placeInfo, OnPlaceInfoClicked, OnPlaceJumpInClicked);
 882            OnFriendHandlerAdded?.Invoke(placeGO.friendsHandler);
 883            instantiatedPlaces.Add(placeGO);
 84        }
 85
 486        return instantiatedPlaces;
 87    }
 88
 89    /// <summary>
 90    /// Configure a place card with the given model.
 91    /// </summary>
 92    /// <param name="placeCard">Place card to configure.</param>
 93    /// <param name="placeInfo">Model to apply.</param>
 94    /// <param name="OnPlaceInfoClicked">Action to inform when the Info button has been clicked.</param>
 95    /// <param name="OnPlaceJumpInClicked">Action to inform when the JumpIn button has been clicked.</param>
 96    public static void ConfigurePlaceCard(
 97        PlaceCardComponentView placeCard,
 98        PlaceCardComponentModel placeInfo,
 99        Action<PlaceCardComponentModel> OnPlaceInfoClicked,
 100        Action<HotScenesController.HotSceneInfo> OnPlaceJumpInClicked)
 101    {
 11102        placeCard.Configure(placeInfo);
 11103        placeCard.onInfoClick?.RemoveAllListeners();
 11104        placeCard.onInfoClick?.AddListener(() => OnPlaceInfoClicked?.Invoke(placeInfo));
 11105        placeCard.onJumpInClick?.RemoveAllListeners();
 11106        placeCard.onJumpInClick?.AddListener(() => OnPlaceJumpInClicked?.Invoke(placeInfo.hotSceneInfo));
 11107    }
 108
 109    /// <summary>
 110    /// Returs a place card model from the given API data.
 111    /// </summary>
 112    /// <param name="placeFromAPI">Data received from the API.</param>
 113    /// <returns>A place card model.</returns>
 114    public static PlaceCardComponentModel CreatePlaceCardModelFromAPIPlace(HotSceneInfo placeFromAPI)
 115    {
 9116        PlaceCardComponentModel placeCardModel = new PlaceCardComponentModel();
 9117        placeCardModel.placePictureUri = placeFromAPI.thumbnail;
 9118        placeCardModel.placeName = placeFromAPI.name;
 9119        placeCardModel.placeDescription = FormatDescription(placeFromAPI);
 9120        placeCardModel.placeAuthor = FormatAuthorName(placeFromAPI);
 9121        placeCardModel.numberOfUsers = placeFromAPI.usersTotalCount;
 9122        placeCardModel.parcels = placeFromAPI.parcels;
 9123        placeCardModel.coords = placeFromAPI.baseCoords;
 9124        placeCardModel.hotSceneInfo = placeFromAPI;
 125
 9126        return placeCardModel;
 127    }
 128
 10129    internal static string FormatDescription(HotSceneInfo placeFromAPI) { return string.IsNullOrEmpty(placeFromAPI.descr
 130
 10131    internal static string FormatAuthorName(HotSceneInfo placeFromAPI) { return $"Author <b>{placeFromAPI.creator}</b>";
 132
 133    /// <summary>
 134    /// Makes a jump in to the place defined by the given place data from API.
 135    /// </summary>
 136    /// <param name="placeFromAPI">Place data from API.</param>
 137    public static void JumpInToPlace(HotSceneInfo placeFromAPI)
 138    {
 2139        HotScenesController.HotSceneInfo.Realm realm = new HotScenesController.HotSceneInfo.Realm() { layer = null, serv
 4140        placeFromAPI.realms = placeFromAPI.realms.OrderByDescending(x => x.usersCount).ToArray();
 141
 4142        for (int i = 0; i < placeFromAPI.realms.Length; i++)
 143        {
 2144            bool isArchipelagoRealm = string.IsNullOrEmpty(placeFromAPI.realms[i].layer);
 145
 2146            if (isArchipelagoRealm || placeFromAPI.realms[i].usersCount < placeFromAPI.realms[i].maxUsers)
 147            {
 2148                realm = placeFromAPI.realms[i];
 2149                break;
 150            }
 151        }
 152
 2153        if (string.IsNullOrEmpty(realm.serverName))
 0154            WebInterface.GoTo(placeFromAPI.baseCoords.x, placeFromAPI.baseCoords.y);
 155        else
 2156            WebInterface.JumpIn(placeFromAPI.baseCoords.x, placeFromAPI.baseCoords.y, realm.serverName, realm.layer);
 2157    }
 158}