public Task <string> GenerateExportScriptAsync(WorkingFolderListViewModel listViewModel, ScriptExportType scriptType,
                                                       CancellationToken cancellationToken = default(CancellationToken))
        {
            IServiceSettings settings         = serviceProvider.Get <SettingsService>().GetMainServiceSettings();
            string           powerShellParams = "";//"[string] $source";

            return(Task.Run(() =>
            {
                return Check.TryCatch <string, TaskCanceledException>(() =>
                {
                    var builder = new StringBuilder();
                    var servicesToExport = mainLogic.GetIncludedServices().Where(service => service.AllowScriptExport && service.SupportedScriptExportTypes.Contains(scriptType)).OrderBy(service => service.Order);

                    builder.AppendLineIfNotEmpty(GetCallScriptMethodScript(scriptType, settings.PreBuildScriptPath));
                    builder.AppendLineIfNotEmpty(GenerateSolutionPackerMerge(listViewModel.WorkingFolders.SelectMany(model => model.Projects).Where(model => model.IsIncluded).OrderBy(model => model.BuildPriority), settings, scriptType));
                    List <Task <string> > tasks = servicesToExport.Select(service => Task.Run(() =>
                    {
                        var solutionProjectModels = listViewModel.WorkingFolders.SelectMany(model => model.Projects).Where(service.IsIncluded).OrderBy(model => model.BuildPriority);
                        var innerBuilder = new StringBuilder()
                                           .AppendLine(GenerateExternalScriptParts(true, service, solutionProjectModels, settings, scriptType))
                                           .AppendLine()
                                           .AppendLine(CreateHeader(scriptType, service, powerShellParams)).AppendLine();
                        innerBuilder.AppendLineIfNotEmpty(service.GetScript(solutionProjectModels, settings, scriptType));
                        innerBuilder.AppendLine(CreateServiceFooter(scriptType));
                        innerBuilder.AppendLine(GenerateExternalScriptParts(false, service, solutionProjectModels, settings, scriptType));
                        return innerBuilder.AppendLine().ToString();
                    }, cancellationToken)).ToList();

                    Check.TryCatch <OperationCanceledException>(() => Task.WhenAll(tasks).ContinueWith(t => builder.AppendLine(string.Join(Environment.NewLine, t.Result)), cancellationToken, TaskContinuationOptions.NotOnCanceled, System.Threading.Tasks.TaskScheduler.Current).Wait(cancellationToken));

                    if (scriptType == ScriptExportType.Powershell)
                    {
                        builder.AppendLinesIfNotEmpty(GeneratePowershellMethodCalls(servicesToExport, powerShellParams, settings).ToArray());
                    }

                    builder.AppendLineIfNotEmpty(GetCallScriptMethodScript(scriptType, settings.PostBuildScriptPath));

                    var result = ScriptHelper.PrepareScriptVars(builder.AppendLine(scriptType == ScriptExportType.Batch ? "pause;" : "").ToString(), true, scriptType);
                    return new StringBuilder(GetStaticScriptsStarts(scriptType))
                    .AppendLine(result)
                    .AppendLine(GetStaticScriptsEnds(scriptType))
                    .ToString();
                });
            }, cancellationToken));
        }
Exemplo n.º 2
0
 private static string Unique(WorkingFolderListViewModel model, string key)
 {
     return(key + "_" + model.Title);
 }
Exemplo n.º 3
0
 public static SettingsKey IsExpandedKey(this WorkingFolderListViewModel model)
 {
     return(new SettingsKey(Unique(model, "IsExpanded")));
 }