| | 1 | | using Cysharp.Threading.Tasks; |
| | 2 | | using DCL; |
| | 3 | | using DCL.Browser; |
| | 4 | | using DCL.Providers; |
| | 5 | | using DCLFeatures.CameraReel.Gallery; |
| | 6 | | using DCLFeatures.CameraReel.ScreenshotViewer; |
| | 7 | | using DCLFeatures.CameraReel.Section; |
| | 8 | | using DCLServices.CameraReelService; |
| | 9 | | using DCLServices.EnvironmentProvider; |
| | 10 | | using DCLServices.WearablesCatalogService; |
| | 11 | | using System.Collections.Generic; |
| | 12 | | using UnityEngine; |
| | 13 | |
|
| | 14 | | namespace DCLPlugins.CameraReelPlugin |
| | 15 | | { |
| | 16 | | public class CameraReelPlugin : IPlugin |
| | 17 | | { |
| | 18 | | private const string ADDRESS = "CameraReelSectionView"; |
| | 19 | |
|
| 0 | 20 | | private readonly List<ThumbnailContextMenuController> thumbnailContextMenuControllers = new (); |
| 0 | 21 | | private readonly List<ScreenshotVisiblePersonController> visiblePersonControllers = new (); |
| | 22 | |
|
| | 23 | | private Transform sectionParent; |
| | 24 | | private CameraReelSectionController reelSectionController; |
| | 25 | | private CameraReelModel cameraReelModel; |
| | 26 | |
|
| | 27 | | private ICameraReelStorageService storageService; |
| | 28 | |
|
| 0 | 29 | | public CameraReelPlugin() |
| | 30 | | { |
| 0 | 31 | | Initialize().Forget(); |
| 0 | 32 | | } |
| | 33 | |
|
| | 34 | | private async UniTaskVoid Initialize() |
| | 35 | | { |
| 0 | 36 | | await UniTask.WaitUntil(() => DataStore.i.player.ownPlayer.Get() != null && !string.IsNullOrEmpty(DataStore. |
| | 37 | |
|
| 0 | 38 | | if (UserProfileController.userProfilesCatalog.Get(DataStore.i.player.ownPlayer.Get().id).isGuest) |
| 0 | 39 | | return; |
| | 40 | |
|
| 0 | 41 | | IAddressableResourceProvider assetProvider = Environment.i.platform.serviceLocator.Get<IAddressableResourceP |
| | 42 | |
|
| 0 | 43 | | CameraReelSectionView view = await CreateCameraReelSectionView(assetProvider); |
| 0 | 44 | | storageService = Environment.i.serviceLocator.Get<ICameraReelStorageService>(); |
| 0 | 45 | | DataStore dataStore = DataStore.i; |
| 0 | 46 | | cameraReelModel = new CameraReelModel(); |
| 0 | 47 | | ICameraReelAnalyticsService analytics = Environment.i.serviceLocator.Get<ICameraReelAnalyticsService>(); |
| | 48 | |
|
| 0 | 49 | | reelSectionController = new CameraReelSectionController(view, view.GalleryView, view.GalleryStorageView, |
| | 50 | | dataStore, |
| | 51 | | storageService, |
| | 52 | | cameraReelModel, |
| | 53 | | () => |
| | 54 | | { |
| 0 | 55 | | ScreenshotViewerView screenshotViewerView = Object.Instantiate(view.ScreenshotViewerPrefab); |
| | 56 | |
|
| 0 | 57 | | return new ScreenshotViewerController(screenshotViewerView, cameraReelModel, dataStore, |
| | 58 | | storageService, new UserProfileWebInterfaceBridge(), |
| | 59 | | Clipboard.Create(), new WebInterfaceBrowserBridge(), |
| | 60 | | analytics, Environment.i.serviceLocator.Get<IEnvironmentProviderService>(), |
| | 61 | | screenshotViewerView.ActionPanel, |
| | 62 | | screenshotViewerView.InfoSidePanel); |
| | 63 | | }, analytics); |
| | 64 | |
|
| 0 | 65 | | ThumbnailContextMenuView.Instances.OnAdded += OnThumbnailContextMenuAdded; |
| 0 | 66 | | ScreenshotVisiblePersonView.Instances.OnAdded += OnVisiblePersonAdded; |
| | 67 | |
|
| 0 | 68 | | storageService.ScreenshotUploaded += cameraReelModel.AddScreenshotAsFirst; |
| | 69 | |
|
| 0 | 70 | | dataStore.HUDs.isCameraReelInitialized.Set(true); |
| 0 | 71 | | } |
| | 72 | |
|
| | 73 | | public void Dispose() |
| | 74 | | { |
| 0 | 75 | | ThumbnailContextMenuView.Instances.OnAdded -= OnThumbnailContextMenuAdded; |
| 0 | 76 | | ScreenshotVisiblePersonView.Instances.OnAdded -= OnVisiblePersonAdded; |
| | 77 | |
|
| 0 | 78 | | storageService.ScreenshotUploaded -= cameraReelModel.AddScreenshotAsFirst; |
| | 79 | |
|
| 0 | 80 | | foreach (ThumbnailContextMenuController controller in thumbnailContextMenuControllers) |
| 0 | 81 | | controller.Dispose(); |
| | 82 | |
|
| 0 | 83 | | thumbnailContextMenuControllers.Clear(); |
| | 84 | |
|
| 0 | 85 | | foreach (ScreenshotVisiblePersonController controller in visiblePersonControllers) |
| 0 | 86 | | controller.Dispose(); |
| | 87 | |
|
| 0 | 88 | | visiblePersonControllers.Clear(); |
| | 89 | |
|
| 0 | 90 | | reelSectionController.Dispose(); |
| 0 | 91 | | } |
| | 92 | |
|
| | 93 | | private void OnThumbnailContextMenuAdded(ThumbnailContextMenuView view) |
| | 94 | | { |
| 0 | 95 | | ThumbnailContextMenuController controller = new (view, Clipboard.Create(), cameraReelModel, |
| | 96 | | new WebInterfaceBrowserBridge(), |
| | 97 | | Environment.i.serviceLocator.Get<ICameraReelStorageService>(), |
| | 98 | | DataStore.i, |
| | 99 | | Environment.i.serviceLocator.Get<ICameraReelAnalyticsService>(), |
| | 100 | | Environment.i.serviceLocator.Get<IEnvironmentProviderService>()); |
| | 101 | |
|
| 0 | 102 | | thumbnailContextMenuControllers.Add(controller); |
| 0 | 103 | | } |
| | 104 | |
|
| | 105 | | private static async UniTask<CameraReelSectionView> CreateCameraReelSectionView(IAddressableResourceProvider ass |
| 0 | 106 | | await assetProvider.Instantiate<CameraReelSectionView>(ADDRESS, ADDRESS, |
| | 107 | | parent: DataStore.i.exploreV2.configureCameraReelInFullScreenMenu.Get()); |
| | 108 | |
|
| | 109 | | private void OnVisiblePersonAdded(ScreenshotVisiblePersonView view) |
| | 110 | | { |
| 0 | 111 | | visiblePersonControllers.Add(new ScreenshotVisiblePersonController(view, |
| | 112 | | Environment.i.serviceLocator.Get<IWearablesCatalogService>(), |
| | 113 | | new UserProfileWebInterfaceBridge(), |
| | 114 | | new WebInterfaceBrowserBridge(), |
| | 115 | | DataStore.i, |
| | 116 | | Environment.i.serviceLocator.Get<ICameraReelAnalyticsService>())); |
| 0 | 117 | | } |
| | 118 | | } |
| | 119 | | } |