< Summary

Class:DCL.Social.Passports.PassportPlayerPreviewComponentController
Assembly:PassportHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/Passport/Passport/PlayerPreview/PassportPlayerPreviewComponentController.cs
Covered lines:0
Uncovered lines:42
Coverable lines:42
Total lines:99
Line coverage:0% (0 of 42)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
PassportPlayerPreviewComponentController(...)0%2100%
EndPreviewDrag(...)0%2100%
SetPassportPanelVisibility(...)0%6200%
SetAsLoading(...)0%2100%
RotateCharacterPreview(...)0%2100%
SetRotationTutorialCompleted()0%6200%
>c__DisplayClass14_0/<<UpdateWithUserProfile()0%20400%
UpdateWithUserProfile(...)0%12300%
Dispose()0%12300%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/Passport/Passport/PlayerPreview/PassportPlayerPreviewComponentController.cs

#LineLine coverage
 1using Cysharp.Threading.Tasks;
 2using DCL.Helpers;
 3using MainScripts.DCL.Controllers.HUD.CharacterPreview;
 4using SocialFeaturesAnalytics;
 5using System;
 6using System.Threading;
 7
 8namespace DCL.Social.Passports
 9{
 10    public class PassportPlayerPreviewComponentController : IDisposable
 11    {
 12        private const string TUTORIAL_ENABLED_KEY = "PassportPreviewRotationHintEnabled";
 13
 14        private readonly Service<ICharacterPreviewFactory> characterPreviewFactory;
 15
 16        private readonly ICharacterPreviewController previewController;
 17        private readonly ISocialAnalytics socialAnalytics;
 18        private CancellationTokenSource cancellationTokenSource;
 19        private readonly IPassportPlayerPreviewComponentView view;
 20
 021        public PassportPlayerPreviewComponentController(
 22            IPassportPlayerPreviewComponentView view,
 23            ISocialAnalytics socialAnalytics)
 24        {
 025            this.view = view;
 026            this.socialAnalytics = socialAnalytics;
 27
 028            view.PreviewCameraRotation.OnHorizontalRotation += RotateCharacterPreview;
 029            cancellationTokenSource = new CancellationTokenSource();
 30
 031            previewController = characterPreviewFactory.Ref.Create(CharacterPreviewMode.WithHologram,
 32                view.CharacterPreviewTexture, true, CharacterPreviewController.CameraFocus.Preview);
 33
 034            view.SetModel(new (TutorialEnabled));
 035            view.OnEndDragEvent += EndPreviewDrag;
 036        }
 37
 38        private void EndPreviewDrag(double timeSpendDragging)
 39        {
 040            socialAnalytics.SendInspectAvatar(timeSpendDragging);
 041        }
 42
 43        public void SetPassportPanelVisibility(bool visible)
 44        {
 045            previewController.SetEnabled(visible);
 046            if (visible)
 047                previewController.ResetRotation();
 048        }
 49
 050        public void SetAsLoading(bool isLoading) => view.SetAsLoading(isLoading);
 51
 052        private bool TutorialEnabled => PlayerPrefsBridge.GetBool(TUTORIAL_ENABLED_KEY, true);
 53
 54        private void RotateCharacterPreview(float angularVelocity)
 55        {
 056            previewController.Rotate(angularVelocity);
 057            SetRotationTutorialCompleted();
 058        }
 59
 60        private void SetRotationTutorialCompleted()
 61        {
 062            if (!TutorialEnabled)
 063                return;
 64
 065            PlayerPrefsBridge.SetBool(TUTORIAL_ENABLED_KEY, false);
 066            PlayerPrefsBridge.Save();
 067            view.HideTutorial();
 68
 069            view.SetModel(new (false));
 070        }
 71
 72        public void UpdateWithUserProfile(UserProfile userProfile, bool activateLoading)
 73        {
 74            async UniTask UpdateWithUserProfileAsync()
 75            {
 076                if (activateLoading)
 077                    SetAsLoading(true);
 78
 079                await previewController.TryUpdateModelAsync(userProfile.avatar, cancellationTokenSource.Token)
 80                                       .SuppressCancellationThrow();
 81
 082                SetAsLoading(false);
 083            }
 84
 085            cancellationTokenSource?.Cancel();
 086            cancellationTokenSource?.Dispose();
 087            cancellationTokenSource = new CancellationTokenSource();
 088            UpdateWithUserProfileAsync().Forget();
 089        }
 90
 91        public void Dispose()
 92        {
 093            view.PreviewCameraRotation.OnHorizontalRotation -= RotateCharacterPreview;
 094            cancellationTokenSource?.Cancel();
 095            cancellationTokenSource?.Dispose();
 096            cancellationTokenSource = null;
 097        }
 98    }
 99}