< Summary

Class:DCLFeatures.CameraReel.Section.CameraReelSectionController
Assembly:CameraReel
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLFeatures/CameraReel/Section/Scripts/CameraReelSectionController.cs
Covered lines:0
Uncovered lines:60
Coverable lines:60
Total lines:141
Line coverage:0% (0 of 60)
Covered branches:0
Total branches:0
Covered methods:0
Total methods:12
Method coverage:0% (0 of 12)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
CameraReelSectionController(...)0%2100%
Dispose()0%2100%
SwitchGalleryVisibility(...)0%20400%
OnScreenshotAdded(...)0%2100%
OnScreenshotRemoved(...)0%2100%
ShowScreenshotWithMetadata(...)0%6200%
<FetchScreenshots()0%30500%
FetchScreenshots(...)0%2100%
UpdateEmptyStateVisibility()0%2100%
UpdateShowMoreVisibility()0%2100%
OnShowMoreClicked()0%2100%
OnStorageUpdated(...)0%2100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLFeatures/CameraReel/Section/Scripts/CameraReelSectionController.cs

#LineLine coverage
 1using Cysharp.Threading.Tasks;
 2using DCL;
 3using DCL.Tasks;
 4using DCLFeatures.CameraReel.Gallery;
 5using DCLFeatures.CameraReel.ScreenshotViewer;
 6using DCLServices.CameraReelService;
 7using System;
 8using System.Threading;
 9
 10namespace DCLFeatures.CameraReel.Section
 11{
 12    public class CameraReelSectionController : IDisposable
 13    {
 14        private const int LIMIT = 30;
 15
 16        private readonly CameraReelModel cameraReelModel;
 17        private readonly ICameraReelSectionView sectionView;
 18        private readonly ICameraReelGalleryView galleryView;
 19        private readonly ICameraReelGalleryStorageView galleryStorageView;
 20        private readonly DataStore dataStore;
 21        private readonly ICameraReelStorageService storageService;
 22        private readonly Func<ScreenshotViewerController> screenshotViewerControllerFactory;
 23        private readonly ICameraReelAnalyticsService analytics;
 24
 25        private ScreenshotViewerController screenshotViewerController;
 26        private bool isUpdating;
 27        private int offset;
 28        private CancellationTokenSource fetchScreenshotsCancellationToken;
 29
 030        public CameraReelSectionController(ICameraReelSectionView sectionView,
 31            ICameraReelGalleryView galleryView,
 32            ICameraReelGalleryStorageView galleryStorageView,
 33            DataStore dataStore,
 34            ICameraReelStorageService storageService,
 35            CameraReelModel cameraReelModel,
 36            Func<ScreenshotViewerController> screenshotViewerControllerFactory,
 37            ICameraReelAnalyticsService analytics)
 38        {
 039            this.sectionView = sectionView;
 040            this.galleryStorageView = galleryStorageView;
 041            this.dataStore = dataStore;
 042            this.storageService = storageService;
 043            this.screenshotViewerControllerFactory = screenshotViewerControllerFactory;
 044            this.analytics = analytics;
 045            this.galleryView = galleryView;
 046            this.cameraReelModel = cameraReelModel;
 47
 048            cameraReelModel.ScreenshotRemoved += OnScreenshotRemoved;
 049            cameraReelModel.ScreenshotAdded += OnScreenshotAdded;
 050            cameraReelModel.StorageUpdated += OnStorageUpdated;
 51
 052            dataStore.HUDs.cameraReelSectionVisible.OnChange += SwitchGalleryVisibility;
 53
 054            galleryView.ShowMoreButtonClicked += OnShowMoreClicked;
 055            galleryView.ScreenshotThumbnailClicked += ShowScreenshotWithMetadata;
 056        }
 57
 58        public void Dispose()
 59        {
 060            cameraReelModel.ScreenshotRemoved -= OnScreenshotRemoved;
 061            cameraReelModel.ScreenshotAdded -= OnScreenshotAdded;
 062            cameraReelModel.StorageUpdated -= OnStorageUpdated;
 63
 064            dataStore.HUDs.cameraReelSectionVisible.OnChange -= SwitchGalleryVisibility;
 065            galleryView.ShowMoreButtonClicked -= OnShowMoreClicked;
 066            galleryView.ScreenshotThumbnailClicked -= ShowScreenshotWithMetadata;
 067        }
 68
 69        private void SwitchGalleryVisibility(bool isVisible, bool _)
 70        {
 071            sectionView.SwitchVisibility(isVisible);
 072            UpdateEmptyStateVisibility();
 73
 074            if (!isUpdating && isVisible)
 075                FetchScreenshots(0);
 76
 077            string source = dataStore.HUDs.cameraReelOpenSource.Get();
 78
 079            if (isVisible && !string.IsNullOrEmpty(source))
 080                analytics.OpenCameraReel(source);
 081        }
 82
 83        private void OnScreenshotAdded(bool isFirst, CameraReelResponse screenshot)
 84        {
 085            galleryView.AddScreenshotThumbnail(screenshot, isFirst);
 086            UpdateEmptyStateVisibility();
 087        }
 88
 89        private void OnScreenshotRemoved(CameraReelResponse screenshot)
 90        {
 091            galleryView.DeleteScreenshotThumbnail(screenshot);
 092            UpdateEmptyStateVisibility();
 093        }
 94
 95        private void ShowScreenshotWithMetadata(CameraReelResponse reelResponse)
 96        {
 097            screenshotViewerController ??= screenshotViewerControllerFactory.Invoke();
 098            screenshotViewerController.Show(reelResponse);
 099        }
 100
 101        private void FetchScreenshots(int offset)
 102        {
 103            async UniTaskVoid FetchScreenshotsAndUpdateUiAsync(int offset, CancellationToken cancellationToken)
 104            {
 0105                this.offset = offset;
 0106                isUpdating = true;
 107
 0108                CameraReelResponses screenshots = await storageService.GetScreenshotGallery(
 109                    dataStore.player.ownPlayer.Get().id, LIMIT, offset, cancellationToken);
 110
 0111                isUpdating = false;
 0112                this.offset += LIMIT;
 113
 0114                foreach (CameraReelResponse reel in screenshots.images)
 0115                    cameraReelModel.AddScreenshotAsLast(reel);
 116
 0117                cameraReelModel.SetStorageStatus(screenshots.currentImages, screenshots.maxImages);
 0118                sectionView.HideLoading();
 0119                galleryView.SwitchVisibility(true);
 0120            }
 121
 0122            fetchScreenshotsCancellationToken = fetchScreenshotsCancellationToken.SafeRestart();
 0123            FetchScreenshotsAndUpdateUiAsync(offset, fetchScreenshotsCancellationToken.Token).Forget();
 0124        }
 125
 126        private void UpdateEmptyStateVisibility() =>
 0127            galleryView.SwitchEmptyStateVisibility(cameraReelModel.LoadedScreenshotCount == 0);
 128
 129        private void UpdateShowMoreVisibility() =>
 0130            galleryView.SwitchShowMoreVisibility(cameraReelModel.TotalScreenshotsInStorage > cameraReelModel.LoadedScree
 131
 132        private void OnShowMoreClicked() =>
 0133            FetchScreenshots(offset);
 134
 135        private void OnStorageUpdated(int totalScreenshots, int maxScreenshots)
 136        {
 0137            galleryStorageView.UpdateStorageBar(totalScreenshots, maxScreenshots);
 0138            UpdateShowMoreVisibility();
 0139        }
 140    }
 141}