public static bool GetTargetedPlan( string UUPPath, string LanguageCode, out List <EditionTarget> EditionTargets, ProgressCallback progressCallback = null) { progressCallback?.Invoke(Common.ProcessPhase.ReadingMetadata, true, 0, "Acquiring Composition Databases"); HashSet <CompDBXmlClass.CompDB> compDBs = FileLocator.GetCompDBsFromUUPFiles(UUPPath); string EditionPack = ""; // // Get base editions that are available with all their files // IEnumerable <CompDBXmlClass.CompDB> filteredCompDBs = compDBs.GetEditionCompDBsForLanguage(LanguageCode).Where(x => { (bool success, HashSet <string> missingfiles) = FileLocator.VerifyFilesAreAvailableForCompDB(x, UUPPath); return(success); }); if (filteredCompDBs.Count() > 0) { foreach (CompDBXmlClass.Package feature in filteredCompDBs.First().Features.Feature[0].Packages.Package) { CompDBXmlClass.Package pkg = filteredCompDBs.First().Packages.Package.First(x => x.ID == feature.ID); string file = pkg.GetCommonlyUsedIncorrectFileName(); // // We know already that all files exist, so it's just a matter of knowing which path format is used // file = !File.Exists(Path.Combine(UUPPath, file)) ? pkg.Payload.PayloadItem.Path : file; if (!file.EndsWith(".esd", StringComparison.InvariantCultureIgnoreCase) || !file.Contains("microsoft-windows-editionspecific", StringComparison.InvariantCultureIgnoreCase) || file.Contains("WOW64", StringComparison.InvariantCultureIgnoreCase) || file.Contains("arm64.arm", StringComparison.InvariantCultureIgnoreCase)) { // We do not care about this file continue; } EditionPack = file; } } return(ConversionPlanBuilder.GetTargetedPlan(UUPPath, compDBs, Path.Combine(UUPPath, EditionPack), LanguageCode, out EditionTargets, (string msg) => progressCallback?.Invoke(Common.ProcessPhase.ReadingMetadata, true, 0, msg))); }