< Summary

Class:BIWNFTController
Assembly:BuilderInWorldNFT
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/BuilderInWorld/Scripts/NFTs/BIWNFTController.cs
Covered lines:53
Uncovered lines:13
Coverable lines:66
Total lines:162
Line coverage:80.3% (53 of 66)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
BIWNFTController()0%110100%
StartFetchingNft()0%220100%
UserProfileUpdated(...)0%2.062075%
Dispose()0%3.583060%
StartEditMode()0%110100%
ExitEditMode()0%2100%
ClearNFTs()0%110100%
IsNFTInUse(...)0%4.024088.89%
StopUsingNFT(...)0%6.046090%
GetNfts()0%2100%
UseNFT(...)0%7.057090%
FetchNftsFromOwner()0%220100%
NftsFeteched(...)0%220100%
FetchNfts()0%440100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/BuilderInWorld/Scripts/NFTs/BIWNFTController.cs

#LineLine coverage
 1using DCL.Configuration;
 2using DCL.Helpers.NFT;
 3using System;
 4using System.Collections;
 5using System.Collections.Generic;
 6using System.Security.Cryptography;
 7using System.Text;
 8using UnityEngine;
 9
 10// Note: we should make this class a part of BIWController and only fetch the NFTs if the biw is active instead of only
 11// when you enter builder in world
 12public class BIWNFTController
 13{
 14    public event System.Action OnNFTUsageChange;
 15    public event System.Action<List<NFTInfo>> OnNftsFetched;
 16
 17    private NFTOwner nftOwner;
 18
 19    private Coroutine fechNftsCoroutine;
 20
 21    private static BIWNFTController instance;
 22
 123    private List<NFTInfo> nftsAlreadyInUse = new List<NFTInfo>();
 24
 25    private bool desactivateNFT = false;
 26    private bool isInit = false;
 27    private bool isActive = false;
 28    private UserProfile userProfile;
 29
 30    public static BIWNFTController i
 31    {
 32        get
 33        {
 9034            if (instance == null)
 35            {
 136                instance = new BIWNFTController();
 37            }
 38
 9039            return instance;
 40        }
 41    }
 42
 43    public void StartFetchingNft()
 44    {
 345        if (!isInit)
 46        {
 147            userProfile = UserProfile.GetOwnUserProfile();
 148            userProfile.OnUpdate += UserProfileUpdated;
 149            FetchNftsFromOwner();
 150            isInit = true;
 51        }
 352    }
 53
 54    private void UserProfileUpdated(UserProfile profile)
 55    {
 2056        if (!isActive)
 057            return;
 58
 2059        FetchNftsFromOwner();
 2060    }
 61
 62    public void Dispose()
 63    {
 864        if (userProfile != null)
 065            userProfile.OnUpdate -= UserProfileUpdated;
 66
 867        if (fechNftsCoroutine != null)
 068            CoroutineStarter.Stop(fechNftsCoroutine);
 869    }
 70
 71    public void StartEditMode()
 72    {
 573        isActive = true;
 574        ClearNFTs();
 575    }
 76
 077    public void ExitEditMode() { isActive = false; }
 78
 4279    public void ClearNFTs() { nftsAlreadyInUse.Clear(); }
 80
 81    public bool IsNFTInUse(string id)
 82    {
 383        if (desactivateNFT)
 084            return false;
 85
 786        foreach (NFTInfo info in nftsAlreadyInUse)
 87        {
 188            if (info.assetContract.address == id)
 189                return true;
 90        }
 91
 292        return false;
 193    }
 94
 95    public void StopUsingNFT(string id)
 96    {
 197        if (desactivateNFT)
 098            return;
 99
 4100        foreach (NFTInfo info in nftOwner.assets)
 101        {
 1102            if (info.assetContract.address != id)
 103                continue;
 1104            if (!nftsAlreadyInUse.Contains(info))
 105                continue;
 106
 1107            nftsAlreadyInUse.Remove(info);
 1108            OnNFTUsageChange?.Invoke();
 109        }
 1110    }
 111
 0112    public List<NFTInfo> GetNfts() { return nftOwner.assets; }
 113
 114    public void UseNFT(string id)
 115    {
 3116        if (desactivateNFT || nftOwner.assets == null)
 0117            return;
 118
 12119        foreach (NFTInfo info in nftOwner.assets)
 120        {
 3121            if (info.assetContract.address != id)
 122                continue;
 3123            if (nftsAlreadyInUse.Contains(info))
 124                continue;
 125
 3126            nftsAlreadyInUse.Add(info);
 3127            OnNFTUsageChange?.Invoke();
 128        }
 3129    }
 130
 131    private void FetchNftsFromOwner()
 132    {
 21133        if (fechNftsCoroutine != null)
 3134            CoroutineStarter.Stop(fechNftsCoroutine);
 21135        fechNftsCoroutine = CoroutineStarter.Start(FetchNfts());
 21136    }
 137
 138    public void NftsFeteched(NFTOwner nftOwner)
 139    {
 4140        this.nftOwner = nftOwner;
 4141        string json = JsonUtility.ToJson(nftOwner);
 4142        desactivateNFT = false;
 4143        OnNftsFetched?.Invoke(this.nftOwner.assets);
 4144    }
 145
 146    private IEnumerator FetchNfts()
 147    {
 21148        string userId = userProfile.ethAddress;
 21149        if (!string.IsNullOrEmpty(userId))
 150        {
 3151            yield return NFTUtils.FetchNFTsFromOwner(userId, (nftOwner) =>
 152                {
 0153                    NftsFeteched(nftOwner);
 0154                },
 155                (error) =>
 156                {
 0157                    desactivateNFT = true;
 0158                    Debug.LogError($"error getting NFT from owner:  {error}");
 0159                });
 160        }
 21161    }
 162}