/// <summary> /// /// </summary> /// <param name="manager"></param> public MainWindowViewModel(ApplicationManager manager) { _manager = manager; _manager.Error += manager_Error; _applications = _manager.Applications.ToSyncedSynchronizationContextCollection(x => new ApplicationViewModel(_manager, x), SynchronizationContext.Current); IsSettingsOpen = new ReactiveProperty <bool>(false); IsDetailsOpen = new ReactiveProperty <bool>(false); IsProgressActive = new ReactiveProperty <bool>(false); ShowWindowRightCommands = IsSettingsOpen.CombineLatest(IsDetailsOpen, (a, b) => !a && !b) .ToReactiveProperty(); InitialDirectory = _manager.Settings.ToReactivePropertyAsSynchronized(x => x.ApplicationRootDirectoryPath); ShowHelpCommand = new ReactiveCommand(); ShowHelpCommand.Subscribe(_ => ShowHelp()); RegisterApplicationCommand = IsProgressActive.Select(x => !x).ToReactiveCommand(); RegisterApplicationCommand.Subscribe(_ => RegisterApplication()); InstallApplicationCommand = IsProgressActive.Select(x => !x).ToReactiveCommand(); InstallApplicationCommand.Subscribe(_ => InstallApplication()); OpenSettingCommand = new ReactiveCommand(); OpenSettingCommand.Subscribe(_ => ShowSettings()); ShowDetailsCommand = new ReactiveCommand <ApplicationViewModel>(); ShowDetailsCommand.Subscribe(ShowDetails); CurrentItem = new ReactiveProperty <ApplicationViewModel>(); SettingsViewModel = new ReactiveProperty <SettingsViewModel>(); }
private async Task StartRecompensateProcess( IDurableOrchestrationClient processStarter, IDurableOrchestrationContext context, RegisterApplicationCommand command, ILogger log) { var recompensateCommand = this.BuildRecompensationCommand(context, command); var recompensationId = await processStarter.StartNewAsync(nameof(ApplicationProcessRecompensationOrchiestrator), recompensateCommand); log.LogInformation($"Started recompensation process for application process with instanceId: {context.InstanceId}." + $"Recompensation process instanceId: {recompensationId}"); }
private async Task StartRecompensateProcess( IDurableOrchestrationClient processStarter, IDurableOrchestrationContext context, RegisterApplicationCommand command, ILogger log) { await context.CallActivityAsync(nameof(ApplicationProcessFailedEventPublisher), ApplicationProcessStatus.Failed.ToString()); var recompensateCommand = this.BuildRecompensationCommand(context, command); await processStarter.StartNewAsync(nameof(ApplicationProcessRecompensationOrchestrator), context.InstanceId, recompensateCommand); log.LogInformation($"Started recompensation process for application process with instanceId: {context.InstanceId}."); }
private RecompensateApplicationProcessCommand BuildRecompensationCommand( IDurableOrchestrationContext context, RegisterApplicationCommand command) { return(new RecompensateApplicationProcessCommand(context.InstanceId, command.Photo, command.Cv)); }
private async Task HandleUploadFilesFailure(IDurableOrchestrationContext context, IDurableOrchestrationClient processStarter, ILogger log, Task <PhotoUploadFailedInternalFunctionEvent> photoUploadFailedEventTask, Task <CvUploadFailedInternalFunctionEvent> cvUploadFailedEventTask, RegisterApplicationCommand command) { var errors = photoUploadFailedEventTask.IsCompleted ? photoUploadFailedEventTask.Result.Errors.ToList() : new List <KeyValuePair <string, string> >(); if (cvUploadFailedEventTask.IsCompleted) { errors.AddRange(cvUploadFailedEventTask.Result.Errors); } var failedProcessCommand = this.BuildFailedProcessCommand(context, errors); await context.CallActivityAsync <Task>(nameof(StatusTracker), failedProcessCommand); log.LogFailedOperation(OperationStatus.Failed, "Uploading files failed:", errors, context.InstanceId); await this.StartRecompensateProcess(processStarter, context, command, log); }