Beispiel #1
0
        private static async Task Execute(IEnumerable <string> args, Subject <double> subject)
        {
            var optionsProvider = new WindowsDeploymentOptionsProvider();

            var parserResult = Parser.Default
                               .ParseArguments <WindowsDeploymentCmdOptions,
                                                NonWindowsDeploymentCmdOptions>(args);

            await parserResult
            .MapResult(
                (WindowsDeploymentCmdOptions opts) =>
            {
                var deployer            = GetDeployer(optionsProvider, opts.DiskNumber, subject);
                optionsProvider.Options = new WindowsDeploymentOptions
                {
                    ImageIndex = opts.Index,
                    ImagePath  = opts.WimImage,
                    UseCompact = opts.UseCompact,
                };
                return(deployer.Deploy());
            },
                (NonWindowsDeploymentCmdOptions opts) =>
            {
                var deployer = GetDeployer(optionsProvider, opts.DiskNumber, subject);
                return(deployer.Deploy());
            },
                HandleErrors);
        }
        public static IExportRegistrationBlock WithCommon(this IExportRegistrationBlock block,
                                                          WindowsDeploymentOptionsProvider installOptionsProvider)
        {
            var taskTypes = from a in Assemblies.AppDomainAssemblies
                            from type in a.ExportedTypes
                            where type.GetTypeInfo().ImplementedInterfaces.Contains(typeof(IDeploymentTask))
                            select type;

            block.ExportAssemblies(Assemblies.AppDomainAssemblies).ByInterface <ISpaceAllocator <IDevice> >();
            block.Export <ZipExtractor>().As <IZipExtractor>();
            block.ExportFactory(Tokenizer.Create).As <Tokenizer <LangToken> >();
            block.Export <ScriptParser>().As <IScriptParser>();
            block.ExportFactory(() => installOptionsProvider).As <IWindowsOptionsProvider>();
            block.Export <WoaDeployer>().As <IWoaDeployer>();
            block.Export <BootCreator>().As <IBootCreator>();
            block.Export <LowLevelApi>().As <ILowLevelApi>();
            block.ExportInstance(taskTypes).As <IEnumerable <Type> >();
            block.Export <ScriptRunner>().As <IScriptRunner>();
            block.Export <InstanceBuilder>().As <IInstanceBuilder>();
            block.Export <RaspberryPathBuilder>().As <IPathBuilder>();
            block.Export <FileSystemOperations>().As <IFileSystemOperations>();
            block.Export <BcdInvokerFactory>().As <IBcdInvokerFactory>();
            block.Export <WindowsDeployer>().As <IWindowsDeployer>();
            block.Export <RaspberryDisklayoutPreparer>().As <IDiskLayoutPreparer>();
            block.Export <ImageFlasher>().As <IImageFlasher>();
            block.Export <DismImageService>().As <IWindowsImageService>();

            block.ExportFactory(() => AzureDevOpsClient.Create(new Uri("https://dev.azure.com"))).As <IAzureDevOpsBuildClient>();

            return(block);
        }
Beispiel #3
0
        private static async Task Execute(IEnumerable <string> args, Subject <double> subject)
        {
            var optionsProvider = new WindowsDeploymentOptionsProvider();

            var deployer = GetDeployer(optionsProvider, subject);

            var parserResult = Parser.Default
                               .ParseArguments <WindowsDeploymentCmdOptions,
                                                EnableDualBootCmdOptions,
                                                DisableDualBootCmdOptions,
                                                NonWindowsDeploymentCmdOptions>(args);

            await parserResult
            .MapResult(
                (WindowsDeploymentCmdOptions opts) =>
            {
                optionsProvider.Options = new WindowsDeploymentOptions()
                {
                    ImageIndex             = opts.Index,
                    ImagePath              = opts.WimImage,
                    SizeReservedForWindows = ByteSize.FromGigaBytes(opts.ReservedSizeForWindowsInGb),
                    UseCompact             = opts.UseCompact,
                };
                return(deployer.Deploy());
            },
                (EnableDualBootCmdOptions opts) => deployer.ToogleDualBoot(true),
                (DisableDualBootCmdOptions opts) => deployer.ToogleDualBoot(false),
                (NonWindowsDeploymentCmdOptions opts) => deployer.Deploy(),
                HandleErrors);
        }
Beispiel #4
0
        private static IWoaDeployer GetDeployer(WindowsDeploymentOptionsProvider op, int diskNumber, Subject <double> progress)
        {
            var container = CompositionRoot.CreateContainer(op, diskNumber, progress);
            var deployer  = container.Locate <IWoaDeployer>();

            return(deployer);
        }
Beispiel #5
0
        private static IWoaDeployer GetDeployer(WindowsDeploymentOptionsProvider op, IDownloadProgress progress)
        {
            var container = CompositionRoot.CreateContainer(op, progress);

            var deployer = container.Locate <IWoaDeployer>();

            return(deployer);
        }
Beispiel #6
0
        public static DependencyInjectionContainer CreateContainer(WindowsDeploymentOptionsProvider op, IOperationProgress progress)
        {
            var container = new DependencyInjectionContainer();

            container.Configure(x =>
            {
                x.Configure(op);
                x.Export <ConsolePrompt>().As <IPrompt>();
                x.ExportInstance(progress).As <IOperationProgress>();
            });

            return(container);
        }
Beispiel #7
0
        private static IWoaDeployer GetDeployer(WindowsDeploymentOptionsProvider op, Subject <double> progress)
        {
            var container = new DependencyInjectionContainer();

            container.Configure(x =>
            {
                x.Configure(op);
                x.Export <ConsoleMarkdownDisplayer>().As <IMarkdownDisplayer>();
                x.ExportInstance(progress).As <IObserver <double> >();
            });

            var deployer = container.Locate <IWoaDeployer>();

            return(deployer);
        }
        public static DependencyInjectionContainer CreateContainer(WindowsDeploymentOptionsProvider op, int diskNumber,
                                                                   Subject <double> progress)
        {
            var container = new DependencyInjectionContainer();

            container.Configure(x =>
            {
                x.Configure(op);
                x.Export <ConsoleMarkdownDialog>().As <IMarkdownDialog>();
                x.ExportFactory((ILowLevelApi lla) => new DeviceProvider()
                {
                    Device = new RaspberryPi(lla, diskNumber)
                })
                .As <IDeviceProvider>().Lifestyle.Singleton();
                x.Export <ConsoleMarkdownDisplayer>().As <IMarkdownDisplayer>();
                x.ExportInstance(progress).As <IObserver <double> >();
            });
            return(container);
        }
Beispiel #9
0
        public static DependencyInjectionContainer CreateContainer()
        {
            var container = new DependencyInjectionContainer();

            IObservable <LogEvent> logEvents = null;

            IViewService viewService = new ViewService();

            Log.Logger = new LoggerConfiguration()
                         .WriteTo.RollingFile(@"Logs\Log-{Date}.txt")
                         .WriteTo.Observers(x => logEvents = x)
                         .MinimumLevel.Verbose()
                         .CreateLogger();

            UpdateChecker.CheckForUpdates(AppProperties.GitHubBaseUrl);

            var optionsProvider = new WindowsDeploymentOptionsProvider();

            container.Configure(x =>
            {
                x.Configure(optionsProvider);
                x.Export <DeviceProvider>().As <IDeviceProvider>().Lifestyle.Singleton();
                x.Export <WpfMarkdownDisplayer>().As <IMarkdownDisplayer>();
                x.ExportFactory(() => new BehaviorSubject <double>(double.NaN))
                .As <IObserver <double> >()
                .As <IObservable <double> >()
                .Lifestyle.Singleton();
                x.ExportFactory(() => logEvents).As <IObservable <LogEvent> >();
                x.Export <WimPickViewModel>().ByInterfaces().As <WimPickViewModel>().Lifestyle.Singleton();
                x.Export <AdvancedViewModel>().ByInterfaces().As <AdvancedViewModel>().Lifestyle.Singleton();
                x.Export <DeploymentViewModel>().ByInterfaces().As <DeploymentViewModel>().Lifestyle.Singleton();
                x.Export <UIServices>();
                x.ExportFactory(() => viewService).As <IViewService>();
                x.Export <Dialog>().ByInterfaces();
                x.Export <FilePicker>().As <IFilePicker>();
                x.Export <SettingsService>().As <ISettingsService>();
                x.ExportFactory(() => DialogCoordinator.Instance).As <IDialogCoordinator>();
            });

            return(container);
        }
        public async Task Prepare()
        {
            var api = new DiskApi();

            var allocators      = new [] { new DefaultSpaceAllocator() };
            var operations      = new FileSystemOperations();
            var optionsProvider = new WindowsDeploymentOptionsProvider
            {
                Options = new WindowsDeploymentOptions
                {
                    SizeReservedForWindows = ByteSize.FromMegaBytes(200),
                }
            };

            var phone    = new TestPhone(api, null, null);
            var preparer = new LumiaDiskLayoutPreparer(optionsProvider, operations, allocators, new PartitionCleaner(), phone);

            var disk = await api.GetDisk(3);

            await preparer.Prepare(disk);
        }
        public static IExportRegistrationBlock WithCommon(this IExportRegistrationBlock block,
                                                          WindowsDeploymentOptionsProvider installOptionsProvider)
        {
            var taskTypes = from a in Assemblies.AppDomainAssemblies
                            from type in a.ExportedTypes
                            where type.GetTypeInfo().ImplementedInterfaces.Contains(typeof(IDeploymentTask))
                            select type;

            block.ExportAssemblies(Assemblies.AppDomainAssemblies).ByInterface <ISpaceAllocator <IPhone> >();
            block.Export <ZipExtractor>().As <IZipExtractor>();
            block.ExportFactory(Tokenizer.Create).As <Tokenizer <LangToken> >().Lifestyle.Singleton();
            block.Export <ScriptParser>().As <IScriptParser>().Lifestyle.Singleton();
            block.ExportFactory(() => installOptionsProvider).As <IWindowsOptionsProvider>().Lifestyle.Singleton();
            block.Export <LumiaDiskLayoutPreparer>().As <IDiskLayoutPreparer>().Lifestyle.Singleton();
            block.Export <PhoneInfoReader>().As <IPhoneInfoReader>().Lifestyle.Singleton();
            block.Export <WoaDeployer>().As <IWoaDeployer>().Lifestyle.Singleton();
            block.Export <Tooling>().As <ITooling>().Lifestyle.Singleton();
            block.Export <BootCreator>().As <IBootCreator>().Lifestyle.Singleton();
            block.Export <DiskApi>().As <IDiskApi>().Lifestyle.Singleton();
            block.Export <PhonePathBuilder>().As <IPathBuilder>().Lifestyle.Singleton();
            block.ExportInstance(taskTypes).As <IEnumerable <Type> >();
            block.Export <ScriptRunner>().As <IScriptRunner>().Lifestyle.Singleton();
            block.Export <InstanceBuilder>().As <IInstanceBuilder>().Lifestyle.Singleton();
            block.ExportFactory((IPhone p) => new DeviceProvider {
                Device = p
            }).As <IDeviceProvider>();
            block.Export <FileSystemOperations>().As <IFileSystemOperations>().Lifestyle.Singleton();
            block.Export <BcdInvokerFactory>().As <IBcdInvokerFactory>().Lifestyle.Singleton();
            block.Export <WindowsDeployer>().As <IWindowsDeployer>().Lifestyle.Singleton();
            block.ExportFactory(() => new HttpClient {
                Timeout = TimeSpan.FromMinutes(30)
            }).Lifestyle.Singleton();
            block.ExportFactory(() => new GitHubClient(new ProductHeaderValue("WOADeployer"))).As <IGitHubClient>();
            block.Export <Downloader>().As <IDownloader>().Lifestyle.Singleton();
            block.Export <ProviderBasedWindowsDeployer>().As <IProviderBasedWindowsDeployer>();
            block.Export <PartitionCleaner>().As <IPartitionCleaner>();
            block.ExportFactory(() => AzureDevOpsClient.Create(new Uri("https://dev.azure.com"))).As <IAzureDevOpsBuildClient>();

            return(block);
        }
Beispiel #12
0
        public static DependencyInjectionContainer CreateContainer()
        {
            var container = new DependencyInjectionContainer();

            IObservable <LogEvent> logEvents = null;

            Log.Logger = new LoggerConfiguration()
                         .WriteTo.RollingFile(@"Logs\Log-{Date}.txt")
                         .WriteTo.Observers(x => logEvents = x)
                         .MinimumLevel.Verbose()
                         .CreateLogger();

            Log.Verbose($"Started {AppProperties.AppTitle}");

            var optionsProvider = new WindowsDeploymentOptionsProvider();

            container.Configure(x =>
            {
                x.Configure(optionsProvider);
                x.ExportFactory(() => new DownloadProgress())
                .As <IDownloadProgress>()
                .Lifestyle.Singleton();
                x.ExportFactory(() => logEvents).As <IObservable <LogEvent> >();
                x.Export <WimPickViewModel>().ByInterfaces().As <WimPickViewModel>().Lifestyle.Singleton();
                x.Export <DualBootViewModel>().ByInterfaces().As <DualBootViewModel>().Lifestyle.Singleton();
                x.Export <AdvancedViewModel>().ByInterfaces().As <AdvancedViewModel>().Lifestyle.Singleton();
                x.Export <DeploymentViewModel>().ByInterfaces().As <DeploymentViewModel>().Lifestyle.Singleton();
                x.Export <UIServices>();
                x.Export <Dialog>().ByInterfaces();
                x.Export <OpenFilePicker>().As <IOpenFilePicker>();
                x.Export <SaveFilePicker>().As <ISaveFilePicker>();
                x.Export <SettingsService>().As <ISettingsService>();
                x.Export <SaveFilePicker>().As <ISaveFilePicker>();
                x.Export <ViewService>().As <IViewService>();
                x.ExportFactory(() => DialogCoordinator.Instance).As <IDialogCoordinator>();
            });

            return(container);
        }
Beispiel #13
0
        public Locator()
        {
            container = new DependencyInjectionContainer();

            IObservable <LogEvent> logEvents = null;

            IViewService viewService = new ViewService();

            viewService.Register("MarkdownViewer", typeof(MarkdownViewerWindow));

            Log.Logger = new LoggerConfiguration()
                         .WriteTo.RollingFile(@"Logs\Log-{Date}.txt")
                         .WriteTo.Observers(x => logEvents = x)
                         .MinimumLevel.Verbose()
                         .CreateLogger();

            var optionsProvider = new WindowsDeploymentOptionsProvider();

            container.Configure(x =>
            {
                x.Configure(optionsProvider);
                x.Export <WpfMarkdownDisplayer>().As <IMarkdownDisplayer>();
                x.ExportFactory(() => new BehaviorSubject <double>(double.NaN))
                .As <IObserver <double> >()
                .As <IObservable <double> >()
                .Lifestyle.Singleton();
                x.ExportFactory(() => logEvents).As <IObservable <LogEvent> >();
                x.Export <WimPickViewModel>().ByInterfaces().As <WimPickViewModel>().Lifestyle.Singleton();
                x.Export <DualBootViewModel>().ByInterfaces().As <DualBootViewModel>().Lifestyle.Singleton();
                x.Export <AdvancedViewModel>().ByInterfaces().As <AdvancedViewModel>().Lifestyle.Singleton();
                x.Export <DeploymentViewModel>().ByInterfaces().As <DeploymentViewModel>().Lifestyle.Singleton();
                x.Export <UIServices>();
                x.ExportFactory(() => viewService).As <IViewService>();
                x.Export <DialogService>().As <IDialogService>();
                x.Export <FilePicker>().As <IFilePicker>();
                x.Export <SettingsService>().As <ISettingsService>();
                x.ExportFactory(() => DialogCoordinator.Instance).As <IDialogCoordinator>();
            });
        }
 public static IExportRegistrationBlock Configure(this IExportRegistrationBlock block,
                                                  WindowsDeploymentOptionsProvider installOptionsProvider)
 {
     return(WithCommon(block, installOptionsProvider));
 }