< Summary

Class:BIWCatalogManager
Assembly:BuilderInWorldCatalog
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/BuilderMode/Catalog/BIWCatalogManager.cs
Covered lines:104
Uncovered lines:18
Coverable lines:122
Total lines:247
Line coverage:85.2% (104 of 122)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Init()0%220100%
Dispose()0%110100%
ClearCatalog()0%110100%
GetCatalogItemPackList()0%20400%
GetCatalogItemPacksFilteredByCategories()0%9.19089.29%
AddSceneObject(...)0%2.032080%
AddSceneAssetPack(...)0%3.043083.33%
GetAssetPackNameById(...)0%2.062075%
ConvertCollectiblesPack(...)0%10.147060%
CreateNewCollectiblePack()0%220100%
CreateCatalogItemPack(...)0%330100%
CreateCatalogItem(...)0%55095%
CreateCatalogItem(...)0%110100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/BuilderMode/Catalog/BIWCatalogManager.cs

#LineLine coverage
 1using DCL;
 2using DCL.Configuration;
 3using DCL.Helpers.NFT;
 4using System.Collections.Generic;
 5using System.Linq;
 6using UnityEngine;
 7
 8public static class BIWCatalogManager
 9{
 10    public static bool VERBOSE = false;
 11    private static bool IS_INIT = false;
 12
 13    public static void Init()
 14    {
 2615        if (!IS_INIT)
 16        {
 1417            BuilderInWorldNFTController.i.OnNftsFetched += ConvertCollectiblesPack;
 1418            AssetCatalogBridge.OnSceneObjectAdded += AddSceneObject;
 1419            AssetCatalogBridge.OnSceneAssetPackAdded += AddSceneAssetPack;
 1420            IS_INIT = true;
 21        }
 2622    }
 23
 24    public static void Dispose()
 25    {
 1426        BuilderInWorldNFTController.i.OnNftsFetched -= ConvertCollectiblesPack;
 1427        AssetCatalogBridge.OnSceneObjectAdded -= AddSceneObject;
 1428        AssetCatalogBridge.OnSceneAssetPackAdded -= AddSceneAssetPack;
 1429        IS_INIT = false;
 1430    }
 31
 32    public static void ClearCatalog()
 33    {
 3334        DataStore.i.builderInWorld.catalogItemDict.Clear();
 3335        DataStore.i.builderInWorld.catalogItemPackDict.Clear();
 3336    }
 37
 38    public static List<CatalogItemPack> GetCatalogItemPackList()
 39    {
 040        var assetPacks = DataStore.i.builderInWorld.catalogItemPackDict.GetValues();
 41
 042        foreach (CatalogItemPack catalogAssetPack in assetPacks)
 43        {
 044            foreach (CatalogItem catalogItem in catalogAssetPack.assets)
 45            {
 046                catalogItem.categoryName = catalogItem.category;
 47            }
 48        }
 49
 050        return assetPacks.OrderBy(x => x.title).ToList();
 51    }
 52
 53    public static List<CatalogItemPack> GetCatalogItemPacksFilteredByCategories()
 54    {
 255        var assetPacks = DataStore.i.builderInWorld.catalogItemPackDict.GetValues();
 56
 257        Dictionary<string, CatalogItemPack> assetPackDic = new Dictionary<string, CatalogItemPack>();
 58
 259        if (DataStore.i.builderInWorld.catalogItemPackDict.ContainsKey(BuilderInWorldSettings.ASSETS_COLLECTIBLES))
 160            assetPackDic.Add(BuilderInWorldSettings.ASSETS_COLLECTIBLES, DataStore.i.builderInWorld.catalogItemPackDict[
 61        else
 162            CreateNewCollectiblePack();
 63
 864        foreach (CatalogItemPack catalogAssetPack in assetPacks)
 65        {
 866            foreach (CatalogItem catalogItem in catalogAssetPack.assets)
 67            {
 268                if (catalogItem.IsNFT())
 69                    continue;
 170                if (!assetPackDic.ContainsKey(catalogItem.category))
 71                {
 172                    CatalogItemPack categoryAssetPack = new CatalogItemPack();
 173                    categoryAssetPack.SetThumbnailULR(catalogItem.thumbnailURL);
 174                    categoryAssetPack.title = catalogItem.category;
 175                    categoryAssetPack.assets = new List<CatalogItem>();
 176                    catalogItem.categoryName = catalogAssetPack.title;
 177                    categoryAssetPack.assets.Add(catalogItem);
 78
 179                    if (!string.IsNullOrEmpty(categoryAssetPack.title))
 80                    {
 181                        if (categoryAssetPack.title.Length == 1)
 082                            categoryAssetPack.title = categoryAssetPack.title.ToUpper();
 83                        else
 184                            categoryAssetPack.title = char.ToUpper(categoryAssetPack.title[0]) + categoryAssetPack.title
 85                    }
 86
 187                    assetPackDic.Add(catalogItem.category, categoryAssetPack);
 188                    continue;
 89                }
 90                else
 91                {
 092                    catalogItem.categoryName = catalogAssetPack.title;
 093                    assetPackDic[catalogItem.category].assets.Add(catalogItem);
 94                }
 95            }
 96        }
 97
 498        return assetPackDic.Values.OrderBy(x => x.title).ToList();
 99    }
 100
 101    public static void AddSceneObject(SceneObject sceneObject)
 102    {
 26103        if (DataStore.i.builderInWorld.catalogItemDict.ContainsKey(sceneObject.id))
 0104            return;
 105
 26106        CatalogItem catalogItem = CreateCatalogItem(sceneObject);
 26107        DataStore.i.builderInWorld.catalogItemDict.Add(catalogItem.id, catalogItem);
 26108    }
 109
 110    public static void AddSceneAssetPack(SceneAssetPack sceneAssetPack)
 111    {
 22112        if (DataStore.i.builderInWorld.catalogItemPackDict.ContainsKey(sceneAssetPack.id))
 0113            return;
 114
 22115        CatalogItemPack catalogItemPack = CreateCatalogItemPack(sceneAssetPack);
 116
 22117        if (catalogItemPack.assets.Count != 0)
 21118            DataStore.i.builderInWorld.catalogItemPackDict.Add(catalogItemPack.id, catalogItemPack);
 22119    }
 120
 121    public static string GetAssetPackNameById(string assetPackId)
 122    {
 26123        DataStore.i.builderInWorld.catalogItemPackDict.TryGetValue(assetPackId, out CatalogItemPack catalogItemPack);
 26124        if (catalogItemPack != null)
 0125            return catalogItemPack.title;
 126
 26127        return "";
 128    }
 129
 130    public static void ConvertCollectiblesPack(List<NFTInfo> nftList)
 131    {
 3132        if (nftList == null)
 0133            return;
 134
 135        CatalogItemPack collectiblesItemPack;
 136
 3137        if (!DataStore.i.builderInWorld.catalogItemPackDict.ContainsKey(BuilderInWorldSettings.ASSETS_COLLECTIBLES))
 138        {
 3139            collectiblesItemPack = CreateNewCollectiblePack();
 3140        }
 141        else
 142        {
 0143            collectiblesItemPack = DataStore.i.builderInWorld.catalogItemPackDict[BuilderInWorldSettings.ASSETS_COLLECTI
 0144            foreach (CatalogItem catalogItem in collectiblesItemPack.assets)
 145            {
 0146                if (DataStore.i.builderInWorld.catalogItemDict.ContainsKey(catalogItem.id))
 0147                    DataStore.i.builderInWorld.catalogItemDict.Remove(catalogItem.id);
 148            }
 149
 0150            collectiblesItemPack.assets.Clear();
 151        }
 152
 12153        foreach (NFTInfo info in nftList)
 154        {
 3155            CatalogItem catalogItem = CreateCatalogItem(info);
 3156            if (!DataStore.i.builderInWorld.catalogItemDict.ContainsKey(catalogItem.id))
 3157                DataStore.i.builderInWorld.catalogItemDict.Add(catalogItem.id, catalogItem);
 158
 3159            collectiblesItemPack.assets.Add(catalogItem);
 160        }
 3161    }
 162
 163    private static CatalogItemPack CreateNewCollectiblePack()
 164    {
 4165        CatalogItemPack collectiblesItemPack = new CatalogItemPack();
 4166        collectiblesItemPack.id = BuilderInWorldSettings.ASSETS_COLLECTIBLES;
 4167        collectiblesItemPack.title = BuilderInWorldSettings.ASSETS_COLLECTIBLES;
 4168        collectiblesItemPack.assets = new List<CatalogItem>();
 4169        if (!DataStore.i.builderInWorld.catalogItemPackDict.ContainsKey(collectiblesItemPack.id))
 4170            DataStore.i.builderInWorld.catalogItemPackDict.Add(collectiblesItemPack.id, collectiblesItemPack);
 4171        return collectiblesItemPack;
 172    }
 173
 174    public static CatalogItemPack CreateCatalogItemPack(SceneAssetPack sceneAssetPack)
 175    {
 22176        CatalogItemPack catalogItemPack = new CatalogItemPack();
 177
 22178        catalogItemPack.id = sceneAssetPack.id;
 22179        catalogItemPack.title = sceneAssetPack.title;
 180
 22181        catalogItemPack.assets = new List<CatalogItem>();
 182
 22183        catalogItemPack.SetThumbnailULR(sceneAssetPack.ComposeThumbnailUrl());
 184
 96185        foreach (SceneObject sceneObject in sceneAssetPack.assets)
 186        {
 187            //TODO: SmartItems disabled until kernel has them implemented
 26188            if (sceneObject.IsSmartItem())
 189                continue;
 190
 25191            catalogItemPack.assets.Add(CreateCatalogItem(sceneObject, sceneAssetPack.title));
 192        }
 193
 22194        return catalogItemPack;
 195    }
 196
 197    public static CatalogItem CreateCatalogItem(SceneObject sceneObject, string assetPackName = null)
 198    {
 51199        CatalogItem catalogItem = new CatalogItem();
 51200        catalogItem.id = sceneObject.id;
 51201        if (sceneObject.asset_pack_id == BuilderInWorldSettings.VOXEL_ASSETS_PACK_ID)
 0202            catalogItem.isVoxel = true;
 51203        catalogItem.name = sceneObject.name;
 51204        catalogItem.model = sceneObject.model;
 51205        catalogItem.assetPackName = assetPackName == null ? GetAssetPackNameById(sceneObject.asset_pack_id) : assetPackN
 51206        catalogItem.thumbnailURL = sceneObject.GetComposedThumbnailUrl();
 51207        catalogItem.tags = sceneObject.tags;
 208
 51209        catalogItem.category = sceneObject.category;
 51210        catalogItem.categoryName = catalogItem.category;
 211
 51212        catalogItem.contents = sceneObject.contents;
 213
 51214        catalogItem.metrics = sceneObject.metrics;
 215
 51216        if (!string.IsNullOrEmpty(sceneObject.script))
 217        {
 1218            catalogItem.itemType = CatalogItem.ItemType.SMART_ITEM;
 1219            catalogItem.parameters = sceneObject.parameters;
 1220            catalogItem.actions = sceneObject.actions;
 1221        }
 222        else
 223        {
 50224            catalogItem.itemType = CatalogItem.ItemType.SCENE_OBJECT;
 225        }
 226
 51227        return catalogItem;
 228    }
 229
 230    public static CatalogItem CreateCatalogItem(NFTInfo nFTInfo)
 231    {
 3232        CatalogItem catalogItem = new CatalogItem();
 3233        catalogItem.itemType = CatalogItem.ItemType.NFT;
 234
 3235        catalogItem.id = nFTInfo.assetContract.address;
 3236        catalogItem.thumbnailURL = nFTInfo.thumbnailUrl;
 3237        catalogItem.name = nFTInfo.name;
 3238        catalogItem.assetPackName = BuilderInWorldSettings.ASSETS_COLLECTIBLES;
 3239        catalogItem.category = nFTInfo.assetContract.name;
 3240        catalogItem.model = $"{BuilderInWorldSettings.COLLECTIBLE_MODEL_PROTOCOL}{nFTInfo.assetContract.address}/{nFTInf
 3241        catalogItem.tags = new List<string>();
 3242        catalogItem.contents = new Dictionary<string, string>();
 3243        catalogItem.metrics = new SceneObject.ObjectMetrics();
 244
 3245        return catalogItem;
 246    }
 247}