public static void PrintAvailablePlan(this List <EditionTarget> targets) { foreach (var target in targets) { foreach (var str in ConversionPlanBuilder.PrintEditionTarget(target)) { Logging.Log(str); } } }
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))); }
public static async Task <EditionPlanningWithLanguage> GetTargetedPlanAsync(this UpdateData update, string LanguageCode, string editionPkg) { var compDBs = await update.GetCompDBsAsync(); if (string.IsNullOrEmpty(editionPkg)) { return(null); } List <EditionTarget> targets; _ = ConversionPlanBuilder.GetTargetedPlan(compDBs, editionPkg, LanguageCode, out targets, null); return(new EditionPlanningWithLanguage() { EditionTargets = targets, LanguageCode = LanguageCode }); }
public static void CreateISOMediaAdvanced( string ISOPath, string UUPPath, string LanguageCode, bool IntegrateUpdates, Common.CompressionType CompressionType, ProgressCallback progressCallback = null) { bool result = true; string error = ""; List <EditionTarget> editionTargets; result = GetTargetedPlan(UUPPath, LanguageCode, out editionTargets, progressCallback); if (!result) { error = "An error occurred while getting target plans for the conversion."; goto error; } foreach (var ed in editionTargets) { foreach (var line in ConversionPlanBuilder.PrintEditionTarget(ed)) { progressCallback?.Invoke(Common.ProcessPhase.ReadingMetadata, true, 0, line); } } progressCallback?.Invoke(Common.ProcessPhase.ReadingMetadata, true, 0, "Enumerating files"); var temp = Path.GetTempFileName(); File.Delete(temp); Directory.CreateDirectory(temp); string WinREWIMFilePath = Path.Combine(temp, "Winre.wim"); string MediaRootPath = Path.Combine(temp, "MediaRoot"); string InstallWIMFilePath = CompressionType == Common.CompressionType.LZMS ? Path.Combine(MediaRootPath, "sources", "install.esd") : Path.Combine(MediaRootPath, "sources", "install.wim"); // // Build installer // result = SetupMediaCreator.CreateSetupMedia(UUPPath, LanguageCode, MediaRootPath, WinREWIMFilePath, CompressionType, progressCallback); if (!result) { error = "An error occurred while creating setup media."; goto error; } // // Build Install.WIM/ESD // foreach (var ed in editionTargets) { result = HandleEditionPlan(ed, UUPPath, MediaRootPath, LanguageCode, InstallWIMFilePath, WinREWIMFilePath, CompressionType, progressCallback: progressCallback); if (!result) { error = "An error occurred while handling edition plan for the following edition: " + ed.PlannedEdition.EditionName + " available as: " + ed.PlannedEdition.AvailabilityType; goto error; } } BootlegEditionCreator.CleanupLanguagePackFolderIfRequired(); // // Build ISO // result = UUPMediaCreator.CreateISO(MediaRootPath, ISOPath, progressCallback); if (!result) { error = "An error occurred while creating the ISO."; goto error; } progressCallback?.Invoke(Common.ProcessPhase.Done, true, 0, ""); goto exit; error: progressCallback?.Invoke(Common.ProcessPhase.Error, true, 0, error); exit: return; }