/// <summary> /// Runs all steps and user interaction that is required during the conversion /// </summary> public WorkflowResult RunWorkflow(Job job) { try { _stopwatch = new Stopwatch(); _stopwatch.Start(); JobEventsManager.RaiseJobStarted(job, Thread.CurrentThread.ManagedThreadId.ToString()); PrepareAndRun(job); } catch (AbortWorkflowException ex) { // we need to clean up the job when it was cancelled _logger.Warn(ex.Message + " No output will be created."); WorkflowResult = WorkflowResult.AbortedByUser; SendJobEvents(job); } catch (WorkflowException ex) { _logger.Error(ex.Message); WorkflowResult = WorkflowResult.Error; SendJobEvents(job); } catch (ProcessingException ex) { var errorMessage = ex.ErrorCode + " / " + ex.Message; if (ex.InnerException != null) { errorMessage += Environment.NewLine + ex.InnerException; } _logger.Error(errorMessage); LastError = ex.ErrorCode; HandleError(ex.ErrorCode); WorkflowResult = WorkflowResult.Error; SendJobEvents(job); } catch (ManagePrintJobsException) { throw; } catch (InterruptWorkflowException) { throw; } catch (Exception ex) { _logger.Error(ex); WorkflowResult = WorkflowResult.Error; SendJobEvents(job); throw; } return(WorkflowResult); }
private void SendJobEvents(Job job) { _stopwatch.Stop(); var elapsedTime = TimeSpan.FromTicks(_stopwatch.ElapsedMilliseconds); switch (WorkflowResult) { case WorkflowResult.AbortedByUser: JobEventsManager.RaiseJobFailed(job, elapsedTime, FailureReason.AbortedByUser); break; case WorkflowResult.Error: JobEventsManager.RaiseJobFailed(job, elapsedTime, FailureReason.Error); break; case WorkflowResult.Finished: JobEventsManager.RaiseJobCompleted(job, elapsedTime); break; } }