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)); }
private static string Unique(WorkingFolderListViewModel model, string key) { return(key + "_" + model.Title); }
public static SettingsKey IsExpandedKey(this WorkingFolderListViewModel model) { return(new SettingsKey(Unique(model, "IsExpanded"))); }