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; }
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; }
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(); } } }
private void StepProcessed(object sender, BuildStepEventArgs e) { e.Step.StepProcessed -= StepProcessed; PostBuild(); taskCompletionSource.SetResult(e.Step.Status); }
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(); } }