< Summary

Class:BIWPublishController
Assembly:BuilderInWorld
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/BuilderMode/Controllers/BIWPublishController.cs
Covered lines:33
Uncovered lines:23
Coverable lines:56
Total lines:134
Line coverage:58.9% (33 of 56)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Initialize(...)0%550100%
Update()0%2.312057.14%
Dispose()0%330100%
CanPublish()0%4.054085.71%
CheckPublishConditions()0%8.125050%
StartPublishFlow()0%6200%
StartPublishScene(...)0%2100%
PublishEnd(...)0%20400%

File(s)

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

#LineLine coverage
 1using System;
 2using DCL;
 3using UnityEngine;
 4
 5public interface IBIWPublishController : IBIWController
 6{
 7}
 8
 9public class BIWPublishController : BIWController, IBIWPublishController
 10{
 11    private IBIWEntityHandler entityHandler;
 12    private IBIWCreatorController creatorController;
 13
 14    private BuilderInWorldBridge builderInWorldBridge;
 15
 16    private int checkerSceneLimitsOptimizationCounter = 0;
 17
 18    private const int FRAMES_BEETWEN_UPDATES = 10;
 19    private const string FEEDBACK_MESSAGE_ENTITY_ERROR = "Some entities have errors (marked as pink cubes).";
 20    private const string FEEDBACK_MESSAGE_OUTSIDE_BOUNDARIES = "Some entities are outside of the Scene boundaries.";
 21    private const string FEEDBACK_MESSAGE_TOO_MANY_ENTITIES = "Too many entities in the scene. Check scene limits.";
 22
 23    private float startPublishingTimestamp = 0;
 24
 25    public override void Initialize(BIWContext context)
 26    {
 2927        base.Initialize(context);
 28
 2929        entityHandler = context.entityHandler;
 2930        creatorController = context.creatorController;
 31
 2932        if (HUDController.i?.builderInWorldMainHud != null)
 33        {
 2534            HUDController.i.builderInWorldMainHud.OnPublishAction += StartPublishFlow;
 2535            HUDController.i.builderInWorldMainHud.OnConfirmPublishAction += StartPublishScene;
 36        }
 37
 2938        builderInWorldBridge = context.sceneReferences.builderInWorldBridge;
 39
 2940        if (builderInWorldBridge != null)
 2541            builderInWorldBridge.OnPublishEnd += PublishEnd;
 2942    }
 43
 44    public override void Update()
 45    {
 246        base.Update();
 247        if (checkerSceneLimitsOptimizationCounter >= FRAMES_BEETWEN_UPDATES)
 48        {
 049            checkerSceneLimitsOptimizationCounter = 0;
 050            CheckPublishConditions();
 051        }
 52        else
 53        {
 254            checkerSceneLimitsOptimizationCounter++;
 55        }
 256    }
 57
 58    public override void Dispose()
 59    {
 2960        base.Dispose();
 61
 2962        if (HUDController.i.builderInWorldMainHud != null)
 63        {
 2564            HUDController.i.builderInWorldMainHud.OnPublishAction -= StartPublishFlow;
 2565            HUDController.i.builderInWorldMainHud.OnConfirmPublishAction -= StartPublishScene;
 66        }
 67
 2968        if (builderInWorldBridge != null)
 2569            builderInWorldBridge.OnPublishEnd -= PublishEnd;
 2970    }
 71
 72    public bool CanPublish()
 73    {
 374        if (creatorController.IsAnyErrorOnEntities())
 075            return false;
 76
 377        if (!sceneToEdit.metricsCounter.IsInsideTheLimits())
 178            return false;
 79
 280        if (!entityHandler.AreAllEntitiesInsideBoundaries())
 181            return false;
 82
 183        return true;
 84    }
 85
 86    /// <summary>
 87    /// This function will check if you are able to publish the scene to the content server. If no error are present, an
 88    /// </summary>
 89    /// <returns>A message the with the reason telling you why you can't publish. If you can publish an empty message wi
 90    public string CheckPublishConditions()
 91    {
 192        string feedbackMessage = "";
 193        if (creatorController.IsAnyErrorOnEntities())
 94        {
 095            feedbackMessage = FEEDBACK_MESSAGE_ENTITY_ERROR;
 096        }
 197        else if (!entityHandler.AreAllEntitiesInsideBoundaries())
 98        {
 099            feedbackMessage = FEEDBACK_MESSAGE_OUTSIDE_BOUNDARIES;
 0100        }
 1101        else if (!sceneToEdit.metricsCounter.IsInsideTheLimits())
 102        {
 0103            feedbackMessage = FEEDBACK_MESSAGE_TOO_MANY_ENTITIES;
 104        }
 105
 1106        if (HUDController.i.builderInWorldMainHud != null)
 0107            HUDController.i.builderInWorldMainHud.SetPublishBtnAvailability(CanPublish(), feedbackMessage);
 108
 1109        return feedbackMessage;
 110    }
 111
 112    private void StartPublishFlow()
 113    {
 0114        if (!CanPublish())
 0115            return;
 116
 0117        HUDController.i.builderInWorldMainHud.PublishStart();
 0118    }
 119
 120    private void StartPublishScene(string sceneName, string sceneDescription, string sceneScreenshot)
 121    {
 0122        startPublishingTimestamp = Time.realtimeSinceStartup;
 0123        BIWAnalytics.StartScenePublish(sceneToEdit.metricsCounter.GetModel());
 0124        builderInWorldBridge.PublishScene(sceneToEdit, sceneName, sceneDescription, sceneScreenshot);
 0125    }
 126
 127    private void PublishEnd(bool isOk, string message)
 128    {
 0129        if (HUDController.i.builderInWorldMainHud != null)
 0130            HUDController.i.builderInWorldMainHud.PublishEnd(isOk, message);
 0131        string successString = isOk ? "Success" : message;
 0132        BIWAnalytics.EndScenePublish(sceneToEdit.metricsCounter.GetModel(), successString, Time.realtimeSinceStartup - s
 0133    }
 134}