public int Deserialize() { // TODO: Handle dependencies // 2nd pass after this to resolve names etc? _ClassIndex = Data.ReadInt32(); ClassName = CurrentPCC.GetClassName(_ClassIndex); _SuperIndex = Data.ReadInt32(); _OuterIndex = Data.ReadInt32(); _ObjectNameRef = Data.ReadNameRef(); ObjectName = CurrentPCC.GetName(_ObjectNameRef); if (_ObjectNameRef.ModNumber > -1) { ObjectName += "_" + _ObjectNameRef.ModNumber; // TODO: correct? } _ArchetypeIndex = Data.ReadInt32(); ObjectFlags = (ObjectFlags)Data.ReadUInt64(); Size = Data.ReadUInt32(); FileOffset = Data.ReadUInt32(); ExportFlags = (ExportFlags)Data.ReadUInt32(); // TODO: save / figure these out! var netObjectCount = Data.ReadInt32(); // Skip netObjectCount Data.ReadRawData(netObjectCount * 4); // Skip netObjects Data.ReadRawData(16); // Skip package GUID's Data.ReadRawData(4); // Skip package flags return((int)SizeInBytes + 4 * netObjectCount); }
public MapExporter(MapLoader loader, string exportPath, ExportFlags flags) { this.loader = loader; this.exportPath = exportPath; this.gameName = Settings.s.mode.ToString(); this.flags = flags; }
private void _WriteOneClassOrStruct(Type type, ExportFlags flags) { var classOrStruct = type.IsClass ? "class" : "struct"; var sealedClass = type.IsClass && EditorMetaCommon.IsFinalType(type) ? "sealed " : string.Empty; _writer.WriteLine("[Serializable]"); _writer.WriteLine("{0}partial {1} {2} : {3}", sealedClass, classOrStruct, type.Name, typeof(ILoadable).Name); using (MacroScope.CreateEditorScope(_writer.BaseWriter)) { _writer.WriteLine(", {0}", typeof(ISavable).Name); } using (CodeScope.CreateCSharpScope(_writer)) { var nestedTypes = type.GetNestedTypes(BindingFlags.Instance | BindingFlags.Public); _WriteNestedTypes(nestedTypes, flags); var members = new List <MemberBase>(); _CollectSerializableMembers(type, members); _WriteSaveMethod(type, members); _WriteLoadMethod(type, members); _WriteToStringMethod(type, members); _WriteGetMetadataTypeMethod(type); } }
public void ExportAll(string dir, ExportFlags flags) { Console.WriteLine("Exporting to: " + dir); if (dir.Contains(" ")) { Console.WriteLine("Warning, there are spaces in the path. This may affect material import."); } if (flags.HasFlag(ExportFlags.TexLow)) { ExportTextures(Path.Combine(dir, "texLow"), Detail.Low); } if (flags.HasFlag(ExportFlags.MeshLow)) { ExportMesh(dir, Detail.Low); } if (flags.HasFlag(ExportFlags.TexMed)) { ExportTextures(Path.Combine(dir, "texMed"), Detail.Med); } if (flags.HasFlag(ExportFlags.MeshMed)) { ExportMesh(dir, Detail.Med); } if (flags.HasFlag(ExportFlags.Models)) { ExportModels(dir); } if (flags.HasFlag(ExportFlags.SkyBox)) { ExportSkyBox(dir); } }
// General SAV Properties public byte[] Write(ExportFlags flags = ExportFlags.None) { byte[] data = GetFinalData(); if (Footer.Length > 0 && flags.HasFlagFast(ExportFlags.IncludeFooter)) { return(data.Concat(Footer).ToArray()); } if (Header.Length > 0 && flags.HasFlagFast(ExportFlags.IncludeHeader)) { return(Header.Concat(data).ToArray()); } return(data); }
internal string GetCertComponentsAsPEMString(byte[] pfxData, string pwd, ExportFlags flags) { // See also https://www.digicert.com/ssl-support/pem-ssl-creation.htm var cert = new X509Certificate2(pfxData, pwd); var chain = new X509Chain(); chain.Build(cert); using (var writer = new StringWriter()) { var certParser = new X509CertificateParser(); var pemWriter = new PemWriter(writer); //output in order of private key, primary cert, intermediates, root if (flags.HasFlag(ExportFlags.PrivateKey)) { var key = GetCertKeyPem(pfxData, pwd); writer.Write(key); } var i = 0; foreach (var c in chain.ChainElements) { if (i == 0 && flags.HasFlag(ExportFlags.EndEntityCertificate)) { // first cert is end entity cert (primary certificate) var o = c.Certificate.Export(X509ContentType.Cert); pemWriter.WriteObject(certParser.ReadCertificate(o)); } else if (i == chain.ChainElements.Count - 1 && flags.HasFlag(ExportFlags.RootCertificate)) { // last cert is root ca public cert var o = c.Certificate.Export(X509ContentType.Cert); pemWriter.WriteObject(certParser.ReadCertificate(o)); } else if (i != 0 && (i != chain.ChainElements.Count - 1) && flags.HasFlag(ExportFlags.IntermediateCertificates)) { // intermediate cert(s), if any, not including end entity and root var o = c.Certificate.Export(X509ContentType.Cert); pemWriter.WriteObject(certParser.ReadCertificate(o)); } i++; } writer.Flush(); return(writer.ToString()); } }
public void ExportInfo(ExportFlags exportFlags, string exportPath) { if (exportFlags.IsActive(ExportFlags.CityList)) { ExportCities(exportFlags, exportPath); } if (exportFlags.IsActive(ExportFlags.CountryList)) { ExportCountries(exportFlags, exportPath); } if (exportFlags.IsActive(ExportFlags.OverlayList)) { ExportOverlays(exportFlags, exportPath); } }
/// <summary> /// Write the modified data to the savefile. /// </summary> /// <param name="path">Path where to save the savefile.</param> public void Save(string path) { string ext = Path.GetExtension(path).ToLower(); ExportFlags flags = SAV.Metadata.GetSuggestedFlags(ext); try { File.WriteAllBytes(path, SAV.Write(flags)); SAV.Metadata.SetExtraInfo(path); Console.WriteLine("Savefile was successfully written to " + path); } catch (Exception ex) { ShowError(ex.Message); } }
private void _WriteNestedTypes(Type[] nestedTypes, ExportFlags flags) { if (nestedTypes.Length > 0) { //Array.Sort(nestedTypes, (a, b) => a.Name.CompareTo(b.Name)); //foreach (var nestedType in nestedTypes) //{ // if (typeof(ILoadable).IsAssignableFrom(nestedType)) // { // continue; // } // // _WriteOneClassOrStruct(nestedType, flags); //} Console.Error.WriteLine("Can not use nested type. nestedTypes = {0}", nestedTypes.ToString()); } }
/// <summary> /// Creates a json file with the positions and names (w/ localizations) of all countries /// </summary> public void ExportCountries(ExportFlags exportFlags, string path) { if (!Directory.Exists(path)) { return; } var countriesJArr = new JArray(); foreach (var country in _countriesLookup.Values) { var countryJObj = JObject.FromObject(country); if (exportFlags.IsActive(ExportFlags.CityLocalizedNames)) { countryJObj["LocalizedNames"] = JObject.FromObject(country.LocalizedNames); } countriesJArr.Add(countryJObj); } File.WriteAllText(Path.Combine(path, "Countries.json"), countriesJArr.ToString(Formatting.Indented)); }
private ExportFlags GetExportFlags() { ExportFlags exportFlags = 0; if (triStateTreeView1.GetCheckedByNodeName("GenTileMapInfo")) { exportFlags |= ExportFlags.TileMapInfo; } if (triStateTreeView1.GetCheckedByNodeName("GenCityList")) { exportFlags |= ExportFlags.CityList; } if (triStateTreeView1.GetCheckedByNodeName("GenCityDimensions")) { exportFlags |= ExportFlags.CityDimensions; // TODO: add } if (triStateTreeView1.GetCheckedByNodeName("GenCityLocalizedNames")) { exportFlags |= ExportFlags.CityLocalizedNames; } if (triStateTreeView1.GetCheckedByNodeName("GenCountryList")) { exportFlags |= ExportFlags.CountryList; } if (triStateTreeView1.GetCheckedByNodeName("GenCountryLocalizedNames")) { exportFlags |= ExportFlags.CountryLocalizedNames; } if (triStateTreeView1.GetCheckedByNodeName("GenOverlayList")) { exportFlags |= ExportFlags.OverlayList; } if (triStateTreeView1.GetCheckedByNodeName("GenOverlayPNGs")) { exportFlags |= ExportFlags.OverlayPNGs; } return(exportFlags); }
/// <summary> /// Creates a json file with the positions and names (w/ localizations) of all cities /// </summary> public void ExportCities(ExportFlags exportFlags, string path) { if (!Directory.Exists(path)) { return; } var citiesJArr = new JArray(); foreach (var city in Cities) { if (city.Hidden) { continue; } var cityJObj = JObject.FromObject(city.City); cityJObj["X"] = city.X; cityJObj["Y"] = city.Z; if (_countriesLookup.ContainsKey(ScsHash.StringToToken(city.City.Country))) { var country = _countriesLookup[ScsHash.StringToToken(city.City.Country)]; cityJObj["CountryId"] = country.CountryId; } else { Log.Msg($"Could not find country for {city.City.Name}"); } if (exportFlags.IsActive(ExportFlags.CityLocalizedNames)) { cityJObj["LocalizedNames"] = JObject.FromObject(city.City.LocalizedNames); } citiesJArr.Add(cityJObj); } File.WriteAllText(Path.Combine(path, "Cities.json"), citiesJArr.ToString(Formatting.Indented)); }
public void Export(string path, ExportFlags flags) { Console.WriteLine($"Exporting to: {path}"); if (path.Contains(" ")) Console.WriteLine("Warning, the selected path contains space in its name.\r\nThis may affect material import in certain applications.\r\n"); if (flags.HasFlag(ExportFlags.MeshLow)) ExportMesh(path, Detail.Low); if (flags.HasFlag(ExportFlags.TexLow)) ExportTextures(path, Detail.Low); Console.WriteLine("Low mesh: done."); if (flags.HasFlag(ExportFlags.MeshMed)) ExportMesh(path, Detail.Med); if (flags.HasFlag(ExportFlags.TexMed)) ExportTextures(path, Detail.Med); Console.WriteLine("Mid mesh: done."); //not implemented, should return subdivided mesh. not sure if needed. //if (flags.HasFlag(ExportFlags.MeshHigh)) ExportMesh(path, Detail.High); if (flags.HasFlag(ExportFlags.TexHigh)) ExportTextures(path, Detail.High); Console.WriteLine("High mesh: done."); if (flags.HasFlag(ExportFlags.Models)) ExportModels(path); if (flags.HasFlag(ExportFlags.TexModels)) ExportTextures(path, Detail.Models); if (flags.HasFlag(ExportFlags.SkyBox)) ExportSkyBox(path); Console.WriteLine("Additional models: done."); /* foreach (QuadBlock qb in quads) { string x = ".\\textures\\" + qb.id.ToString("X8") + "\\"; Helpers.CheckFolder(x); ctrvram.GetTexture(qb.texlow).Save(x + "low_" + qb.texlow.Tag() + ".png"); foreach (CtrTex ct in qb.tex) { foreach (TextureLayout tl in ct.midlods) { try { ctrvram.GetTexture(tl).Save(x + "med_" + tl.Tag() + ".png"); } catch { File.WriteAllText(x + "error.txt", $"error med: quad - {qb.pos.ToString("X8")}, texlayout: {tl.Position.ToString("X8")}\r\n"); } } int i = 0; foreach (TextureLayout tl in ct.hi) { try { ctrvram.GetTexture(tl).Save(x + "hi_" + i + "_" + tl.Tag() + ".png"); } catch { File.WriteAllText(x + "error.txt", $"error med: quad - {qb.pos.ToString("X8")}, texlayout: {tl.Position.ToString("X8")}\r\n"); } i++; } } } */ }
/// <summary> /// Saves all overlays as .png images. /// Creates a json file with all positions of said overlays /// </summary> /// <remarks> /// ZoomLevelVisibility flags: Multiple can be selected at the same time, /// eg. if value is 3 then 0 and 1 are both selected /// Selected = hidden (0-7 => numbers in game editor) /// 1 = (Nav map, 3D view, zoom 0) (0) /// 2 = (Nav map, 3D view, zoom 1) (1) /// 4 = (Nav map, 2D view, zoom 0) (2) /// 8 = (Nav map, 2D view, zoom 1) (3) /// 16 = (World map, zoom 0) (4) /// 32 = (World map, zoom 1) (5) /// 64 = (World map, zoom 2) (6) /// 128 = (World map, zoom 3) (7) /// </remarks> /// <param name="path"></param> public void ExportOverlays(ExportFlags exportFlags, string path) { if (!Directory.Exists(path)) { return; } var saveAsPNG = exportFlags.IsActive(ExportFlags.OverlayPNGs); var overlayPath = Path.Combine(path, "Overlays"); if (saveAsPNG) { Directory.CreateDirectory(overlayPath); } var overlaysJArr = new JArray(); foreach (var overlay in MapOverlays) { if (overlay.Hidden) { continue; } var overlayName = overlay.OverlayName; var b = overlay.Overlay?.GetBitmap(); if (b == null) { continue; } var overlayJObj = new JObject { ["X"] = overlay.X, ["Y"] = overlay.Z, ["ZoomLevelVisibility"] = overlay.ZoomLevelVisibility, ["Name"] = overlayName, ["Type"] = "Overlay", ["Width"] = b.Width, ["Height"] = b.Height, }; overlaysJArr.Add(overlayJObj); if (saveAsPNG && !File.Exists(Path.Combine(overlayPath, $"{overlayName}.png"))) { b.Save(Path.Combine(overlayPath, $"{overlayName}.png")); } } foreach (var company in Companies) { if (company.Hidden) { continue; } var overlayName = ScsHash.TokenToString(company.OverlayToken); var point = new PointF(company.X, company.Z); if (company.Nodes.Count > 0) { var prefab = Prefabs.FirstOrDefault(x => x.Uid == company.Nodes[0]); if (prefab != null) { var originNode = GetNodeByUid(prefab.Nodes[0]); if (prefab.Prefab.PrefabNodes == null) { continue; } var mapPointOrigin = prefab.Prefab.PrefabNodes[prefab.Origin]; var rot = (float)(originNode.Rotation - Math.PI - Math.Atan2(mapPointOrigin.RotZ, mapPointOrigin.RotX) + Math.PI / 2); var prefabstartX = originNode.X - mapPointOrigin.X; var prefabStartZ = originNode.Z - mapPointOrigin.Z; var companyPos = prefab.Prefab.SpawnPoints.FirstOrDefault(x => x.Type == TsSpawnPointType.CompanyPos); if (companyPos != null) { point = RenderHelper.RotatePoint(prefabstartX + companyPos.X, prefabStartZ + companyPos.Z, rot, originNode.X, originNode.Z); } } } var b = company.Overlay?.GetBitmap(); if (b == null) { continue; } var overlayJObj = new JObject { ["X"] = point.X, ["Y"] = point.Y, ["Name"] = overlayName, ["Type"] = "Company", ["Width"] = b.Width, ["Height"] = b.Height, }; overlaysJArr.Add(overlayJObj); if (saveAsPNG && !File.Exists(Path.Combine(overlayPath, $"{overlayName}.png"))) { b.Save(Path.Combine(overlayPath, $"{overlayName}.png")); } } foreach (var trigger in Triggers) { if (trigger.Hidden) { continue; } var overlayName = trigger.OverlayName; var b = trigger.Overlay?.GetBitmap(); if (b == null) { continue; } var overlayJObj = new JObject { ["X"] = trigger.X, ["Y"] = trigger.Z, ["Name"] = overlayName, ["Type"] = "Parking", ["Width"] = b.Width, ["Height"] = b.Height, }; overlaysJArr.Add(overlayJObj); if (saveAsPNG && !File.Exists(Path.Combine(overlayPath, $"{overlayName}.png"))) { b.Save(Path.Combine(overlayPath, $"{overlayName}.png")); } } foreach (var ferry in FerryConnections) { if (ferry.Hidden) { continue; } var overlayName = ScsHash.TokenToString(ferry.OverlayToken); var b = ferry.Overlay?.GetBitmap(); if (b == null) { continue; } var overlayJObj = new JObject { ["X"] = ferry.X, ["Y"] = ferry.Z, ["Name"] = overlayName, ["Type"] = (ferry.Train) ? "Train" : "Ferry", ["Width"] = b.Width, ["Height"] = b.Height, }; overlaysJArr.Add(overlayJObj); if (saveAsPNG && !File.Exists(Path.Combine(overlayPath, $"{overlayName}.png"))) { b.Save(Path.Combine(overlayPath, $"{overlayName}.png")); } } foreach (var prefab in Prefabs) { if (prefab.Hidden) { continue; } var originNode = GetNodeByUid(prefab.Nodes[0]); if (prefab.Prefab.PrefabNodes == null) { continue; } var mapPointOrigin = prefab.Prefab.PrefabNodes[prefab.Origin]; var rot = (float)(originNode.Rotation - Math.PI - Math.Atan2(mapPointOrigin.RotZ, mapPointOrigin.RotX) + Math.PI / 2); var prefabStartX = originNode.X - mapPointOrigin.X; var prefabStartZ = originNode.Z - mapPointOrigin.Z; foreach (var spawnPoint in prefab.Prefab.SpawnPoints) { var newPoint = RenderHelper.RotatePoint(prefabStartX + spawnPoint.X, prefabStartZ + spawnPoint.Z, rot, originNode.X, originNode.Z); var overlayJObj = new JObject { ["X"] = newPoint.X, ["Y"] = newPoint.Y, }; string overlayName; switch (spawnPoint.Type) { case TsSpawnPointType.GasPos: { overlayName = "gas_ico"; overlayJObj["Type"] = "Fuel"; break; } case TsSpawnPointType.ServicePos: { overlayName = "service_ico"; overlayJObj["Type"] = "Service"; break; } case TsSpawnPointType.WeightStationPos: { overlayName = "weigh_station_ico"; overlayJObj["Type"] = "WeightStation"; break; } case TsSpawnPointType.TruckDealerPos: { overlayName = "dealer_ico"; overlayJObj["Type"] = "TruckDealer"; break; } case TsSpawnPointType.BuyPos: { overlayName = "garage_large_ico"; overlayJObj["Type"] = "Garage"; break; } case TsSpawnPointType.RecruitmentPos: { overlayName = "recruitment_ico"; overlayJObj["Type"] = "Recruitment"; break; } default: continue; } overlayJObj["Name"] = overlayName; var overlay = LookupOverlay(ScsHash.StringToToken(overlayName)); var b = overlay.GetBitmap(); if (b == null) { continue; } overlayJObj["Width"] = b.Width; overlayJObj["Height"] = b.Height; overlaysJArr.Add(overlayJObj); if (saveAsPNG && !File.Exists(Path.Combine(overlayPath, $"{overlayName}.png"))) { b.Save(Path.Combine(overlayPath, $"{overlayName}.png")); } } var lastId = -1; foreach (var triggerPoint in prefab.Prefab.TriggerPoints) { var newPoint = RenderHelper.RotatePoint(prefabStartX + triggerPoint.X, prefabStartZ + triggerPoint.Z, rot, originNode.X, originNode.Z); if (triggerPoint.TriggerId == lastId) { continue; } lastId = (int)triggerPoint.TriggerId; var overlayJObj = new JObject { ["X"] = newPoint.X, ["Y"] = newPoint.Y, ["Name"] = "parking_ico", ["Type"] = "Parking", }; if (triggerPoint.TriggerActionToken != ScsHash.StringToToken("hud_parking")) { continue; } const string overlayName = "parking_ico"; var overlay = LookupOverlay(ScsHash.StringToToken(overlayName)); var b = overlay.GetBitmap(); if (b == null) { continue; } overlayJObj["Width"] = b.Width; overlayJObj["Height"] = b.Height; overlaysJArr.Add(overlayJObj); if (saveAsPNG && !File.Exists(Path.Combine(overlayPath, $"{overlayName}.png"))) { b.Save(Path.Combine(overlayPath, $"{overlayName}.png")); } } } File.WriteAllText(Path.Combine(path, "Overlays.json"), overlaysJArr.ToString(Formatting.Indented)); }
public ExportAttribute(ExportFlags flags) { _flags = flags; }
public static bool IsActive(this ExportFlags self, ExportFlags value) { return((self & value) == value); }
/// <summary> /// Get PEM encoded cert bytes (intermediates only or full chain) from PFX bytes /// </summary> /// <param name="pfxData"></param> /// <param name="pwd">private key password</param> /// <param name="flags">Flags for component types to export</param> /// <returns></returns> internal byte[] GetCertComponentsAsPEMBytes(byte[] pfxData, string pwd, ExportFlags flags) { var pem = GetCertComponentsAsPEMString(pfxData, pwd, flags); return(System.Text.Encoding.ASCII.GetBytes(pem)); }
public void Export(string path, ExportFlags flags) { Console.WriteLine($"Exporting to: {path}"); if (path.Contains(" ")) { Console.WriteLine("Warning, there are spaces in the path. This may affect material import."); } if (flags.HasFlag(ExportFlags.MeshLow)) { ExportMesh(path, Detail.Low); } if (flags.HasFlag(ExportFlags.TexLow)) { ExportTextures(Path.Combine(path, "texLow"), Detail.Low); } Console.WriteLine("Low mesh: done."); if (flags.HasFlag(ExportFlags.MeshMed)) { ExportMesh(path, Detail.Med); } if (flags.HasFlag(ExportFlags.TexMed)) { ExportTextures(Path.Combine(path, "texMed"), Detail.Med); } Console.WriteLine("Mid mesh: done."); //not implemented, should return subdivided mesh //if (flags.HasFlag(ExportFlags.MeshMed)) ExportMesh(dir, Detail.High); if (flags.HasFlag(ExportFlags.TexHigh)) { ExportTextures(Path.Combine(path, "texHigh"), Detail.High); } Console.WriteLine("High mesh: done."); if (flags.HasFlag(ExportFlags.Models)) { ExportModels(path); } if (flags.HasFlag(ExportFlags.SkyBox)) { ExportSkyBox(path); } Console.WriteLine("Additional models: done."); /* * foreach (QuadBlock qb in quads) * { * string x = ".\\textures\\" + qb.id.ToString("X8") + "\\"; * * Helpers.CheckFolder(x); * * ctrvram.GetTexture(qb.texlow).Save(x + "low_" + qb.texlow.Tag() + ".png"); * * foreach (CtrTex ct in qb.tex) * { * foreach (TextureLayout tl in ct.midlods) * { * try * { * ctrvram.GetTexture(tl).Save(x + "med_" + tl.Tag() + ".png"); * } * catch * { * File.WriteAllText(x + "error.txt", $"error med: quad - {qb.pos.ToString("X8")}, texlayout: {tl.Position.ToString("X8")}\r\n"); * } * } * * int i = 0; * * foreach (TextureLayout tl in ct.hi) * { * try * { * ctrvram.GetTexture(tl).Save(x + "hi_" + i + "_" + tl.Tag() + ".png"); * } * catch * { * File.WriteAllText(x + "error.txt", $"error med: quad - {qb.pos.ToString("X8")}, texlayout: {tl.Position.ToString("X8")}\r\n"); * } * * i++; * } * } * } */ }
public int Deserialize() { // TODO: Handle dependencies // 2nd pass after this to resolve names etc? _ClassIndex = Data.ReadInt32(); ClassName = CurrentPCC.GetClassName(_ClassIndex); _SuperIndex = Data.ReadInt32(); _OuterIndex = Data.ReadInt32(); _ObjectNameRef = Data.ReadNameRef(); ObjectName = CurrentPCC.GetName(_ObjectNameRef); if (_ObjectNameRef.ModNumber > -1) ObjectName += "_" + _ObjectNameRef.ModNumber; // TODO: correct? _ArchetypeIndex = Data.ReadInt32(); ObjectFlags = (ObjectFlags)Data.ReadUInt64(); Size = Data.ReadUInt32(); FileOffset = Data.ReadUInt32(); ExportFlags = (ExportFlags)Data.ReadUInt32(); // TODO: save / figure these out! var netObjectCount = Data.ReadInt32(); // Skip netObjectCount Data.ReadRawData(netObjectCount * 4); // Skip netObjects Data.ReadRawData(16); // Skip package GUID's Data.ReadRawData(4); // Skip package flags return (int)SizeInBytes + 4 * netObjectCount; }
/// <summary> /// Initializes a new instance of the <see cref="ExportDescription"/> struct. /// </summary> /// <param name="name"> /// The name to be exported. If the name refers to a function that is overloaded, a modified version of the name (e.g. encoding function parameter information in name string) can be provided to disambiguate which overload to use. The modified name for a function can be retrieved using HLSL compiler reflection. /// If the ExportToRename field is non-null, Name refers to the new name to use for it when exported. In this case Name must be the unmodified name, whereas ExportToRename can be either a modified or unmodified name. A given internal name may be exported multiple times with different renames (and/or not renamed). /// </param> /// <param name="exportToRename">If non-null, this is the name of an export to use but then rename when exported.</param> /// <param name="flags">The flags to apply to the export.</param> public ExportDescription(string name, string?exportToRename = null, ExportFlags flags = ExportFlags.None) { Name = name; ExportToRename = exportToRename; Flags = flags; }
// General SAV Properties public byte[] Write(ExportFlags flags = ExportFlags.None) { byte[] data = GetFinalData(); return(Metadata.Finalize(data, flags)); }
public bool ExportImage(string wimFile, int imageIndex, string outputWIMFile, CompressionType compressionType = CompressionType.LZX, ExportFlags exportFlags = ExportFlags.DEFAULT, ProgressCallback progressCallback = null) { string title = $"Exporting {wimFile.Split('\\').Last()} - Index {imageIndex}"; try { CallbackStatus ProgressCallback(ProgressMsg msg, object info, object progctx) { switch (msg) { case ProgressMsg.WRITE_STREAMS: { ProgressInfo_WriteStreams m = (ProgressInfo_WriteStreams)info; progressCallback?.Invoke(title, (int)Math.Round((double)m.CompletedBytes / m.TotalBytes * 100), false); } break; case ProgressMsg.WRITE_METADATA_BEGIN: break; case ProgressMsg.WRITE_METADATA_END: break; } return(CallbackStatus.CONTINUE); } using (Wim srcWim = Wim.OpenWim(wimFile, OpenFlags.DEFAULT)) { string imageName = srcWim.GetImageName(imageIndex); using (Wim destWim = Wim.CreateNewWim((ManagedWimLib.CompressionType)compressionType)) { destWim.RegisterCallback(ProgressCallback); srcWim.ExportImage(imageIndex, destWim, imageName, null, (ManagedWimLib.ExportFlags)exportFlags); destWim.Write(outputWIMFile, Wim.AllImages, WriteFlags.DEFAULT, Wim.DefaultThreads); } } } catch { return(false); } return(true); }
public void ExportImage(int srcImage, Wim destWim, string destName, string destDescription, ExportFlags exportFlags) { ErrorCode ret = NativeMethods.ExportImage(_ptr, srcImage, destWim._ptr, destName, destDescription, exportFlags); WimLibException.CheckWimLibError(ret); }
public static bool HasFlagFast(this ExportFlags value, ExportFlags flag) => (value & flag) != 0;