Beispiel #1
0
        /// <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);
        }