< Summary

Class:NFTItemInfo
Assembly:AvatarEditorHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/AvatarEditorHUD/Scripts/NFTItemInfo.cs
Covered lines:39
Uncovered lines:15
Coverable lines:54
Total lines:184
Line coverage:72.2% (39 of 54)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Equals(...)0%56700%
FromWearableItem(...)0%220100%
FromEmoteItem(...)0%110100%
SetModel(...)0%8.228085%
SetActive(...)0%110100%
SetBackgroundColor(...)0%2.062075%
SetRarityName(...)0%2.062075%
UpdateItemThumbnail(...)0%6200%
GetThumbnail()0%3.793055.56%
ForgetThumbnail()0%110100%
OnEnable()0%110100%
OnDisable()0%110100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/AvatarEditorHUD/Scripts/NFTItemInfo.cs

#LineLine coverage
 1using DCL;
 2using DCL.EmotesCustomization;
 3using DCL.Helpers;
 4using System;
 5using System.Collections.Generic;
 6using System.Linq;
 7using TMPro;
 8using UnityEngine;
 9using UnityEngine.UI;
 10
 11public class NFTItemInfo : MonoBehaviour
 12{
 13    [Serializable]
 14    internal class IconToGameObjectMap
 15    {
 16        public string iconId;
 17        public GameObject gameObject;
 18    }
 19
 20    public class Model
 21    {
 22        public string name;
 23        public string thumbnail;
 24        public Sprite thumbnailSprite;
 25        public List<string> iconIds;
 26        public string description;
 27        public int issuedId;
 28        public int issuedTotal;
 29        public bool isInL2;
 30
 31        public bool Equals(Model other)
 32        {
 033            return name == other.name
 34                   && thumbnail == other.thumbnail
 35                   && thumbnailSprite == other.thumbnailSprite
 36                   && iconIds.SequenceEqual(other.iconIds)
 37                   && description == other.description
 38                   && issuedId == other.issuedId
 39                   && issuedTotal == other.issuedTotal;
 40        }
 41
 42        public static Model FromWearableItem(WearableItem wearable)
 43        {
 7844            var iconsIds = wearable.data.representations.SelectMany(x => x.bodyShapes).ToList();
 4245            iconsIds.Add(wearable.data.category);
 46
 4247            return new Model()
 48            {
 49                name = wearable.GetName(),
 50                thumbnail = wearable.baseUrl + wearable.thumbnail,
 51                thumbnailSprite = wearable.thumbnailSprite,
 52                iconIds = iconsIds,
 53                description = wearable.description,
 54                issuedId = wearable.issuedId,
 55                issuedTotal = wearable.GetIssuedCountFromRarity(wearable.rarity),
 56                isInL2 = wearable.IsInL2()
 57            };
 58        }
 59
 60        public static Model FromEmoteItem(EmoteCardComponentModel emote)
 61        {
 162            return new Model
 63            {
 64                name = emote.name,
 65                thumbnail = emote.pictureUri,
 66                thumbnailSprite = emote.pictureSprite,
 67                iconIds = new List<string>(),
 68                description = emote.description,
 69                issuedId = 1,
 70                issuedTotal = int.MaxValue,
 71                isInL2 = emote.isInL2
 72            };
 73        }
 74    }
 75
 76    [SerializeField] internal TextMeshProUGUI name;
 77    [SerializeField] internal Image thumbnail;
 78    [SerializeField] internal IconToGameObjectMap[] icons;
 79    [SerializeField] internal TextMeshProUGUI description;
 80    [SerializeField] internal TextMeshProUGUI minted;
 81    [SerializeField] internal GameObject ethNetwork;
 82    [SerializeField] internal GameObject l2Network;
 83    [SerializeField] internal Image backgroundImage;
 84    [SerializeField] internal TextMeshProUGUI rarityName;
 85    [SerializeField] internal Button sellButton;
 86    [SerializeField] internal Button closeButton;
 87
 88    private Model currentModel;
 89    private AssetPromise_Texture thumbnailPromise;
 90
 91    public void SetModel(Model newModel)
 92    {
 4393        if (newModel == null)
 094            return;
 95
 4396        if (currentModel != null && newModel.Equals(currentModel))
 097            return;
 98
 4399        currentModel = newModel;
 100
 43101        name.text = currentModel.name;
 102
 1548103        foreach (var icon in icons)
 104        {
 731105            icon.gameObject.SetActive(currentModel.iconIds.Contains(icon.iconId));
 106        }
 107
 43108        if (!string.IsNullOrEmpty(currentModel.description))
 37109            description.text = currentModel.description;
 110        else
 6111            description.text = "No description.";
 112
 43113        minted.text = $"{currentModel.issuedId} / {currentModel.issuedTotal}";
 114
 43115        Utils.InverseTransformChildTraversal<LayoutGroup>((x) =>
 116        {
 387117            RectTransform rt = x.transform as RectTransform;
 387118            Utils.ForceRebuildLayoutImmediate(rt);
 387119        }, transform);
 120
 121
 43122        ethNetwork.SetActive(!currentModel.isInL2);
 43123        l2Network.SetActive(currentModel.isInL2);
 124
 43125        if (gameObject.activeInHierarchy)
 0126            GetThumbnail();
 43127    }
 128
 180129    public void SetActive(bool active) { gameObject.SetActive(active); }
 130
 131    public void SetBackgroundColor(Color color)
 132    {
 1133        if (backgroundImage == null)
 0134            return;
 135
 1136        backgroundImage.color = color;
 1137    }
 138
 139    public void SetRarityName(string name)
 140    {
 1141        if (rarityName == null)
 0142            return;
 143
 1144        rarityName.text = name;
 1145    }
 146
 147    private void UpdateItemThumbnail(Asset_Texture texture)
 148    {
 0149        if (thumbnail.sprite != null)
 150        {
 0151            Destroy(thumbnail.sprite);
 152        }
 153
 0154        thumbnail.sprite = ThumbnailsManager.CreateSpriteFromTexture(texture.texture);
 0155        thumbnail.preserveAspect = true;
 0156    }
 157
 158    private void GetThumbnail()
 159    {
 3160        if (currentModel == null)
 2161            return;
 162
 1163        if (currentModel.thumbnailSprite != null)
 164        {
 1165            thumbnail.sprite = currentModel.thumbnailSprite;
 1166            return;
 167        }
 168
 169        //NOTE(Brian): Get before forget to prevent referenceCount == 0 and asset unload
 0170        var newThumbnailPromise = ThumbnailsManager.GetThumbnail(currentModel.thumbnail, UpdateItemThumbnail);
 0171        ThumbnailsManager.ForgetThumbnail(thumbnailPromise);
 0172        thumbnailPromise = newThumbnailPromise;
 0173    }
 174
 175    private void ForgetThumbnail()
 176    {
 3177        ThumbnailsManager.ForgetThumbnail(thumbnailPromise);
 3178        thumbnailPromise = null;
 3179    }
 180
 6181    private void OnEnable() { GetThumbnail(); }
 182
 6183    private void OnDisable() { ForgetThumbnail(); }
 184}