< Summary

Class:UserProfile
Assembly:UserProfile
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/UserProfile/UserProfile.cs
Covered lines:58
Uncovered lines:23
Coverable lines:81
Total lines:162
Line coverage:71.6% (58 of 81)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
UserProfile()0%2100%
UserProfile()0%110100%
UpdateData(...)0%6.016092.59%
GetItemAmount(...)0%330100%
OverrideAvatar(...)0%220100%
SetAvatarExpression(...)0%330100%
SetInventory(...)0%440100%
GetInventoryItemsIds()0%2100%
GetOwnUserProfile()0%220100%
CloneModel()0%2100%
IsBlocked(...)0%220100%
Block(...)0%2.062075%
Unblock(...)0%2100%
OnEnable()0%110100%
CleanUp()0%6200%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/UserProfile/UserProfile.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.Linq;
 4using DCL;
 5using DCL.Helpers;
 6using DCL.Interface;
 7using UnityEngine;
 8
 9[CreateAssetMenu(fileName = "UserProfile", menuName = "UserProfile")]
 10public class UserProfile : ScriptableObject //TODO Move to base variable
 11{
 012    static DateTime epochStart = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
 13    public event Action<UserProfile> OnUpdate;
 14    public event Action<string, long> OnAvatarEmoteSet;
 15
 016    public string userId => model.userId;
 017    public string ethAddress => model.ethAddress;
 018    public string userName => model.name;
 019    public string description => model.description;
 020    public string email => model.email;
 021    public string bodySnapshotURL => model.snapshots.body;
 022    public string face256SnapshotURL => model.snapshots.face256;
 023    public UserProfileModel.ParcelsWithAccess[] parcelsWithAccess => model.parcelsWithAccess;
 20424    public List<string> blocked => model.blocked != null ? model.blocked : new List<string>();
 325    public List<string> muted => model.muted ?? new List<string>();
 026    public bool hasConnectedWeb3 => model.hasConnectedWeb3;
 027    public bool hasClaimedName => model.hasClaimedName;
 028    public AvatarModel avatar => model.avatar;
 029    public int tutorialStep => model.tutorialStep;
 30
 15831    internal Dictionary<string, int> inventory = new Dictionary<string, int>();
 32
 15833    public ILazyTextureObserver snapshotObserver = new LazyTextureObserver();
 15834    public ILazyTextureObserver bodySnapshotObserver = new LazyTextureObserver();
 35
 15836    internal UserProfileModel model = new UserProfileModel() //Empty initialization to avoid nullchecks
 37    {
 38        avatar = new AvatarModel()
 39    };
 40
 41    public void UpdateData(UserProfileModel newModel)
 42    {
 23243        if (newModel == null)
 44        {
 045            model = null;
 046            return;
 47        }
 23248        bool faceSnapshotDirty = model.snapshots.face256 != newModel.snapshots.face256;
 23249        bool bodySnapshotDirty = model.snapshots.body != newModel.snapshots.body;
 50
 23251        model.userId = newModel.userId;
 23252        model.ethAddress = newModel.ethAddress;
 23253        model.parcelsWithAccess = newModel.parcelsWithAccess;
 23254        model.tutorialStep = newModel.tutorialStep;
 23255        model.hasClaimedName = newModel.hasClaimedName;
 23256        model.name = newModel.name;
 23257        model.email = newModel.email;
 23258        model.description = newModel.description;
 23259        model.avatar.CopyFrom(newModel.avatar);
 23260        model.snapshots = newModel.snapshots;
 23261        model.hasConnectedWeb3 = newModel.hasConnectedWeb3;
 23262        model.inventory = newModel.inventory;
 23263        model.blocked = newModel.blocked;
 23264        model.muted = newModel.muted;
 65
 23266        if (model.inventory != null)
 67        {
 2968            SetInventory(model.inventory);
 69        }
 70
 23271        if (model.snapshots != null && faceSnapshotDirty)
 72        {
 573            this.snapshotObserver.RefreshWithUri(model.snapshots.face256);
 74        }
 75
 23276        if (model.snapshots != null && bodySnapshotDirty)
 77        {
 178            bodySnapshotObserver.RefreshWithUri(model.snapshots.body);
 79        }
 80
 23281        OnUpdate?.Invoke(this);
 7382    }
 83
 84    public int GetItemAmount(string itemId)
 85    {
 521286        if (inventory == null || !inventory.ContainsKey(itemId))
 517487            return 0;
 88
 3889        return inventory[itemId];
 90    }
 91
 92    public void OverrideAvatar(AvatarModel newModel, Texture2D newFaceSnapshot)
 93    {
 194        model.avatar.CopyFrom(newModel);
 195        this.snapshotObserver.RefreshWithTexture(newFaceSnapshot);
 96
 197        OnUpdate?.Invoke(this);
 198    }
 99
 100    public void SetAvatarExpression(string id)
 101    {
 2102        var timestamp = (long) (DateTime.UtcNow - epochStart).TotalMilliseconds;
 2103        avatar.expressionTriggerId = id;
 2104        avatar.expressionTriggerTimestamp = timestamp;
 2105        WebInterface.SendExpression(id, timestamp);
 2106        OnUpdate?.Invoke(this);
 2107        OnAvatarEmoteSet?.Invoke(id, timestamp);
 2108    }
 109
 110    public void SetInventory(string[] inventoryIds)
 111    {
 94112        inventory.Clear();
 1075113        inventory = inventoryIds.GroupBy(x => x).ToDictionary(x => x.Key, x => x.Count());
 94114    }
 115
 0116    public string[] GetInventoryItemsIds() { return inventory.Keys.ToArray(); }
 117
 118    internal static UserProfile ownUserProfile;
 119
 120    public static UserProfile GetOwnUserProfile()
 121    {
 2786122        if (ownUserProfile == null)
 123        {
 3124            ownUserProfile = Resources.Load<UserProfile>("ScriptableObjects/OwnUserProfile");
 125        }
 126
 2786127        return ownUserProfile;
 128    }
 129
 0130    public UserProfileModel CloneModel() => model.Clone();
 131
 132    public bool IsBlocked(string userId)
 133    {
 50134        return blocked != null && blocked.Contains(userId);
 135    }
 136
 137    public void Block(string userId)
 138    {
 18139        if (IsBlocked(userId)) return;
 18140        blocked.Add(userId);
 18141    }
 142
 143    public void Unblock(string userId)
 144    {
 0145        blocked.Remove(userId);
 0146    }
 147
 148#if UNITY_EDITOR
 149    private void OnEnable()
 150    {
 158151        Application.quitting -= CleanUp;
 158152        Application.quitting += CleanUp;
 158153    }
 154
 155    private void CleanUp()
 156    {
 0157        Application.quitting -= CleanUp;
 0158        if (UnityEditor.AssetDatabase.Contains(this))
 0159            Resources.UnloadAsset(this);
 0160    }
 161#endif
 162}