< Summary

Class:NavmapSearchController
Assembly:Navmap
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/NavMap/NavmapSearchController.cs
Covered lines:12
Uncovered lines:56
Coverable lines:68
Total lines:158
Line coverage:17.6% (12 of 68)
Covered branches:0
Total branches:0
Covered methods:1
Total methods:11
Method coverage:9% (1 of 11)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
NavmapSearchController(...)0%110100%
OnSelectedSearchRecord(...)0%2100%
Activate(...)0%12300%
Deactivate()0%6200%
OnSearchedText(...)0%6200%
SearchAndDisplay()0%42600%
OnSelectedSearchbarChange(...)0%12300%
GetAndShowPreviousSearches()0%6200%
Dispose()0%2100%
AddToPreviousSearch(...)0%56700%
GetPreviousSearches()0%6200%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/NavMap/NavmapSearchController.cs

#LineLine coverage
 1using Cysharp.Threading.Tasks;
 2using DCL;
 3using DCL.Helpers;
 4using DCLServices.PlacesAPIService;
 5using MainScripts.DCL.Controllers.HotScenes;
 6using System;
 7using System.Collections.Generic;
 8using System.Linq;
 9using System.Threading;
 10using DCL.Tasks;
 11using DCLServices.MapRendererV2.ConsumerUtils;
 12using DCLServices.MapRendererV2.MapCameraController;
 13using ExploreV2Analytics;
 14using UnityEngine;
 15
 16public class NavmapSearchController : IDisposable
 17{
 18    private const string PREVIOUS_SEARCHES_KEY = "previous_searches";
 19
 20    private const float TRANSLATION_DURATION = 1;
 21
 22    private readonly IPlacesAPIService placesAPIService;
 23    private readonly INavmapSearchComponentView view;
 24    private readonly IPlayerPrefs playerPrefs;
 25    private readonly NavmapZoomViewController navmapZoomViewController;
 26    private readonly INavmapToastViewController toastViewController;
 27    private readonly IExploreV2Analytics exploreV2Analytics;
 28
 29    private CancellationTokenSource searchCts;
 30    private bool isAlreadySelected = false;
 31    private IMapCameraController mapCamera;
 32    private bool active;
 33
 134    public NavmapSearchController(
 35        INavmapSearchComponentView view,
 36        IPlacesAPIService placesAPIService,
 37        IPlayerPrefs playerPrefs,
 38        NavmapZoomViewController navmapZoomViewController,
 39        INavmapToastViewController toastViewController,
 40        IExploreV2Analytics exploreV2Analytics)
 41    {
 142        this.view = view;
 143        this.placesAPIService = placesAPIService;
 144        this.playerPrefs = playerPrefs;
 145        this.navmapZoomViewController = navmapZoomViewController;
 146        this.toastViewController = toastViewController;
 147        this.exploreV2Analytics = exploreV2Analytics;
 48
 149        searchCts = new CancellationTokenSource();
 150        view.OnSelectedSearchBar += OnSelectedSearchbarChange;
 151        view.OnSearchedText += OnSearchedText;
 152        view.OnSelectedSearchRecord += OnSelectedSearchRecord;
 153    }
 54
 55    private void OnSelectedSearchRecord(Vector2Int coordinates)
 56    {
 057        mapCamera.TranslateTo(
 58            coordinates: coordinates,
 59            duration: TRANSLATION_DURATION,
 060            onComplete: () => toastViewController.ShowPlaceToast(new MapRenderImage.ParcelClickData(){Parcel = coordinat
 61
 062        OnSelectedSearchbarChange(false);
 063        exploreV2Analytics.SendClickedNavmapSearchResult(coordinates);
 064    }
 65
 66    public void Activate(IMapCameraController mapCameraController)
 67    {
 068        if (active && mapCamera == mapCameraController)
 069            return;
 70
 071        mapCamera = mapCameraController;
 072        active = true;
 073    }
 74
 75    public void Deactivate()
 76    {
 077        if (!active) return;
 078        active = false;
 079    }
 80
 81    private void OnSearchedText(string searchText)
 82    {
 083        if (string.IsNullOrEmpty(searchText))
 84        {
 085            GetAndShowPreviousSearches();
 086            return;
 87        }
 88
 089        AddToPreviousSearch(searchText);
 090        searchCts = searchCts.SafeRestart();
 091        SearchAndDisplay(searchText, searchCts).Forget();
 092    }
 93
 94    private async UniTaskVoid SearchAndDisplay(string searchText, CancellationTokenSource cts)
 95    {
 096        (IReadOnlyList<IHotScenesController.PlaceInfo> places, int total) searchPlaces = await placesAPIService.SearchPl
 097        List<Vector2Int> resultsCoordinates = new List<Vector2Int>();
 098        List<string> resultsIds = new List<string>();
 099        foreach (var place in searchPlaces.places)
 100        {
 0101            resultsCoordinates.Add(Utils.ConvertStringToVector(place.base_position));
 0102            resultsIds.Add(place.id);
 103        }
 0104        view.SetSearchResultRecords(searchPlaces.places);
 0105        exploreV2Analytics.SendSearchPlaces(searchText, resultsCoordinates.ToArray(), resultsIds.ToArray(), ActionSource
 0106    }
 107
 108    private void OnSelectedSearchbarChange(bool isSelected)
 109    {
 0110        if (isSelected == isAlreadySelected)
 0111            return;
 112
 0113        isAlreadySelected = isSelected;
 0114        if (isSelected)
 0115            GetAndShowPreviousSearches();
 116        else
 0117            view.ClearResults();
 0118    }
 119
 120    private void GetAndShowPreviousSearches()
 121    {
 0122        searchCts = searchCts.SafeRestart();
 0123        string[] previousSearches = GetPreviousSearches();
 124
 0125        if (previousSearches.Length > 0)
 0126            view.SetHistoryRecords(previousSearches);
 0127    }
 128
 129    public void Dispose()
 130    {
 0131        view.OnSelectedSearchBar -= OnSelectedSearchbarChange;
 0132        view.OnSearchedText -= OnSearchedText;
 0133        view.OnSelectedSearchRecord -= OnSelectedSearchRecord;
 0134    }
 135
 136    private void AddToPreviousSearch(string searchToAdd)
 137    {
 0138        string playerPrefsPreviousSearches = playerPrefs.GetString(PREVIOUS_SEARCHES_KEY);
 0139        string[] previousSearches = string.IsNullOrEmpty(playerPrefsPreviousSearches) ? Array.Empty<string>() : playerPr
 0140        switch (previousSearches.Length)
 141        {
 0142            case > 0 when previousSearches[0] == searchToAdd:
 0143                return;
 144            case < 5:
 0145                playerPrefs.Set(PREVIOUS_SEARCHES_KEY, previousSearches.Length > 0 ? searchToAdd + "|" + string.Join("|"
 0146                break;
 147            default:
 0148                playerPrefs.Set(PREVIOUS_SEARCHES_KEY, searchToAdd + "|" + string.Join("|", previousSearches.Take(4)));
 149                break;
 150        }
 0151    }
 152
 153    private string[] GetPreviousSearches()
 154    {
 0155        string previousSearches = playerPrefs.GetString(PREVIOUS_SEARCHES_KEY, "");
 0156        return string.IsNullOrEmpty(previousSearches) ? Array.Empty<string>() : previousSearches.Split('|');
 157    }
 158}