Example #1
0
        private void BuildStepProcessed(object sender, BuildStepEventArgs e)
        {
            var assetItem  = (AssetItem)e.Step.Tag;
            var assetRef   = assetItem.ToReference();
            var project    = assetItem.Package;
            var stepLogger = e.Logger is BuildStepLogger ? ((BuildStepLogger)e.Logger).StepLogger : null;

            if (stepLogger != null)
            {
                foreach (var message in stepLogger.Messages.Where(x => x.LogMessage.IsAtLeast(LogMessageType.Warning)))
                {
                    var assetMessage = new AssetLogMessage(project, assetRef, message.LogMessage.Type, AssetMessageCode.CompilationMessage, assetRef.Location, message.LogMessage.Text)
                    {
                        Exception = message.LogMessage is LogMessage ? ((LogMessage)message.LogMessage).Exception : null
                    };
                    builderOptions.Logger.Log(assetMessage);
                }
            }
            switch (e.Step.Status)
            {
            // This case should never happen
            case ResultStatus.NotProcessed:
                builderOptions.Logger.Log(new AssetLogMessage(project, assetRef, LogMessageType.Fatal, AssetMessageCode.InternalCompilerError, assetRef.Location));
                break;

            case ResultStatus.Successful:
                builderOptions.Logger.Log(new AssetLogMessage(project, assetRef, LogMessageType.Verbose, AssetMessageCode.CompilationSucceeded, assetRef.Location));
                break;

            case ResultStatus.Failed:
                builderOptions.Logger.Log(new AssetLogMessage(project, assetRef, LogMessageType.Error, AssetMessageCode.CompilationFailed, assetRef.Location));
                break;

            case ResultStatus.Cancelled:
                builderOptions.Logger.Log(new AssetLogMessage(project, assetRef, LogMessageType.Verbose, AssetMessageCode.CompilationCancelled, assetRef.Location));
                break;

            case ResultStatus.NotTriggeredWasSuccessful:
                builderOptions.Logger.Log(new AssetLogMessage(project, assetRef, LogMessageType.Verbose, AssetMessageCode.AssetUpToDate, assetRef.Location));
                break;

            case ResultStatus.NotTriggeredPrerequisiteFailed:
                builderOptions.Logger.Log(new AssetLogMessage(project, assetRef, LogMessageType.Error, AssetMessageCode.PrerequisiteFailed, assetRef.Location));
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            e.Step.StepProcessed -= BuildStepProcessed;
        }
Example #2
0
        private void BuildStepProcessed(object sender, BuildStepEventArgs e)
        {
            var assetItem = (AssetItem)e.Step.Tag;
            var assetRef  = assetItem.ToReference();
            var project   = assetItem.Package;

            // TODO: Big review of the log infrastructure of CompilerApp & BuildEngine!
            var stepLogger = e.Step.Logger;

            if (stepLogger != null)
            {
                foreach (var message in stepLogger.Messages.Where(x => x.IsAtLeast(LogMessageType.Warning)))
                {
                    builderOptions.Logger.Log(message);
                }
            }

            switch (e.Step.Status)
            {
            // This case should never happen
            case ResultStatus.NotProcessed:
                builderOptions.Logger.Log(new AssetLogMessage(project, assetRef, LogMessageType.Fatal, AssetMessageCode.InternalCompilerError, assetRef.Location));
                break;

            case ResultStatus.Successful:
                builderOptions.Logger.Log(new AssetLogMessage(project, assetRef, LogMessageType.Verbose, AssetMessageCode.CompilationSucceeded, assetRef.Location));
                break;

            case ResultStatus.Failed:
                builderOptions.Logger.Log(new AssetLogMessage(project, assetRef, LogMessageType.Error, AssetMessageCode.CompilationFailed, assetRef.Location));
                break;

            case ResultStatus.Cancelled:
                builderOptions.Logger.Log(new AssetLogMessage(project, assetRef, LogMessageType.Verbose, AssetMessageCode.CompilationCancelled, assetRef.Location));
                break;

            case ResultStatus.NotTriggeredWasSuccessful:
                builderOptions.Logger.Log(new AssetLogMessage(project, assetRef, LogMessageType.Verbose, AssetMessageCode.AssetUpToDate, assetRef.Location));
                break;

            case ResultStatus.NotTriggeredPrerequisiteFailed:
                builderOptions.Logger.Log(new AssetLogMessage(project, assetRef, LogMessageType.Error, AssetMessageCode.PrerequisiteFailed, assetRef.Location));
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            e.Step.StepProcessed -= BuildStepProcessed;
        }
Example #3
0
        private static void OnThumbnailStepProcessed(ThumbnailCompilerContext context, AssetItem assetItem, string thumbnailStorageUrl, BuildStepEventArgs buildStepEventArgs)
        {
            // returns immediately if the user has not subscribe to the event
            if (!context.ShouldNotifyThumbnailBuilt)
            {
                return;
            }

            // TODO: the way to get last build step (which should be thumbnail, not its dependencies) should be done differently, at the compiler level
            // (we need to generate two build step that can be accessed directly, one for dependency and one for thumbnail)
            var lastBuildStep = buildStepEventArgs.Step is ListBuildStep ? ((ListBuildStep)buildStepEventArgs.Step).Steps.LastOrDefault() ?? buildStepEventArgs.Step : buildStepEventArgs.Step;

            // Retrieving build result
            var result = ThumbnailBuildResult.Failed;

            if (lastBuildStep.Succeeded)
            {
                result = ThumbnailBuildResult.Succeeded;
            }
            else if (lastBuildStep.Status == ResultStatus.Cancelled)
            {
                result = ThumbnailBuildResult.Cancelled;
            }

            // TODO: Display error logo if anything else went wrong?

            var changed = lastBuildStep.Status != ResultStatus.NotTriggeredWasSuccessful;

            // Open the image data stream if the build succeeded
            Stream   thumbnailStream = null;
            ObjectId thumbnailHash   = ObjectId.Empty;

            if (lastBuildStep.Succeeded)
            {
                thumbnailStream = MicrothreadLocalDatabases.DatabaseFileProvider.OpenStream(thumbnailStorageUrl, VirtualFileMode.Open, VirtualFileAccess.Read);
                thumbnailHash   = MicrothreadLocalDatabases.DatabaseFileProvider.ContentIndexMap[thumbnailStorageUrl];
            }

            try
            {
                context.NotifyThumbnailBuilt(assetItem, result, changed, thumbnailStream, thumbnailHash);
            }
            finally
            {
                // Close the image data stream if opened
                if (thumbnailStream != null)
                {
                    thumbnailStream.Dispose();
                }
            }
        }
Example #4
0
 private void StepProcessed(object sender, BuildStepEventArgs e)
 {
     e.Step.StepProcessed -= StepProcessed;
     PostBuild();
     taskCompletionSource.SetResult(e.Step.Status);
 }
Example #5
0
 private void ShaderBuildStepsStepProcessed(object sender, BuildStepEventArgs e)
 {
     shaderLoadedEvent.Set();
 }
        private static void OnThumbnailStepProcessed(ThumbnailCompilerContext context, AssetItem assetItem, string thumbnailStorageUrl, BuildStepEventArgs buildStepEventArgs)
        {
            // returns immediately if the user has not subscribe to the event
            if (!context.ShouldNotifyThumbnailBuilt)
            {
                return;
            }

            // Retrieving build result
            var result = ThumbnailBuildResult.Failed;

            if (buildStepEventArgs.Step.Succeeded)
            {
                result = ThumbnailBuildResult.Succeeded;
            }
            else if (buildStepEventArgs.Step.Status == ResultStatus.Cancelled)
            {
                result = ThumbnailBuildResult.Cancelled;
            }

            var changed = buildStepEventArgs.Step.Status != ResultStatus.NotTriggeredWasSuccessful;

            // Open the image data stream if the build succeeded
            Stream   thumbnailStream = null;
            ObjectId thumbnailHash   = ObjectId.Empty;

            if (buildStepEventArgs.Step.Succeeded)
            {
                thumbnailStream = AssetManager.FileProvider.OpenStream(thumbnailStorageUrl, VirtualFileMode.Open, VirtualFileAccess.Read);
                thumbnailHash   = AssetManager.FileProvider.AssetIndexMap[thumbnailStorageUrl];
            }
            context.NotifyThumbnailBuilt(assetItem, result, changed, thumbnailStream, thumbnailHash);

            // Close the image data stream if opened
            if (thumbnailStream != null)
            {
                thumbnailStream.Dispose();
            }
        }