Example #1
0
        public LoadAllFromDeviceWindowViewModel CreateLoadAllFromDeviceWindowViewModel(IDevice device,
                                                                                       IDeviceViewModel deviceViewModel)
        {
            var loadFragmentViewModels = new List <ILoadFragmentViewModel>();

            List <(ILoadFragmentViewModel loadFragmentViewModel, Func <string, Task <bool> > loadFragment)> loadFragmentsInfo =
                new List <(ILoadFragmentViewModel loadFragmentViewModel, Func <string, Task <bool> > loadFragment)>();

            foreach (var fragmentViewModel in deviceViewModel.FragmentViewModels)
            {
                var loadHandler = _loadAllService.LoadFragmentHandler(
                    fragmentViewModel.StrongName);

                loadHandler.OnSuccess(handler =>
                {
                    var loadFragmentViewModel = new DefaultLoadFragmentViewModel()
                    {
                        FragmentName = StaticContainer.Container.Resolve <ILocalizerService>().GetLocalizedString(fragmentViewModel.NameForUiKey),
                        UiName       = StaticContainer.Container.Resolve <ILocalizerService>().GetLocalizedString(fragmentViewModel.NameForUiKey)
                    };

                    Task <bool> GetLoadFragmentTask(string pathToFolder) => LoadFragment(loadFragmentViewModel, fragmentViewModel, handler, pathToFolder);

                    loadFragmentsInfo.Add((loadFragmentViewModel,
                                           GetLoadFragmentTask));
                    loadFragmentViewModels.Add(loadFragmentViewModel);
                });
            }


            Func <string, Task <LoadingResult> > loader = async(pathToFolder) =>
            {
                Directory.CreateDirectory(pathToFolder + "\\" + device.DeviceSignature);
                var results = new List <bool>();
                foreach (var loadFragmentInfo in loadFragmentsInfo)
                {
                    results.Add(await loadFragmentInfo.loadFragment(pathToFolder + "\\" + deviceViewModel.DeviceSignature));
                }
                if (results.All(b => b))
                {
                    return(LoadingResult.Success);
                }
                if (results.All(b => !b))
                {
                    return(LoadingResult.Fail);
                }
                if (results.Any(b => !b))
                {
                    return(LoadingResult.SuccessWithIssues);
                }

                return(LoadingResult.Fail);
            };


            return(new LoadAllFromDeviceWindowViewModel(loadFragmentViewModels, loader, deviceViewModel.DeviceSignature));
        }