mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Convert DatHeader to internal models
This commit is contained in:
@@ -62,8 +62,8 @@ in -old DAT file. Ignores those entries in -old that are not in -new.";
|
|||||||
|
|
||||||
// Create the encapsulating datfile
|
// Create the encapsulating datfile
|
||||||
DatFile datfile = DatFile.Create();
|
DatFile datfile = DatFile.Create();
|
||||||
datfile.Header.Name = name;
|
datfile.Header.SetFieldValue<string?>(SabreTools.Models.Metadata.Header.NameKey, name);
|
||||||
datfile.Header.Description = description;
|
datfile.Header.SetFieldValue<string?>(SabreTools.Models.Metadata.Header.DescriptionKey, description);
|
||||||
Parser.ParseInto(datfile, olddat);
|
Parser.ParseInto(datfile, olddat);
|
||||||
|
|
||||||
// Diff against the new datfile
|
// Diff against the new datfile
|
||||||
|
|||||||
@@ -55,8 +55,8 @@ namespace RombaSharp.Features
|
|||||||
|
|
||||||
// Create and write the encapsulating datfile
|
// Create and write the encapsulating datfile
|
||||||
DatFile datfile = DatFile.Create();
|
DatFile datfile = DatFile.Create();
|
||||||
datfile.Header.Name = string.IsNullOrWhiteSpace(name) ? "untitled" : name;
|
datfile.Header.SetFieldValue<string?>(SabreTools.Models.Metadata.Header.NameKey, string.IsNullOrWhiteSpace(name) ? "untitled" : name);
|
||||||
datfile.Header.Description = description;
|
datfile.Header.SetFieldValue<string?>(SabreTools.Models.Metadata.Header.DescriptionKey, description);
|
||||||
DatFromDir.PopulateFromDir(datfile, source, asFiles: TreatAsFile.NonArchive, hashes: [HashType.CRC32, HashType.MD5, HashType.SHA1]);
|
DatFromDir.PopulateFromDir(datfile, source, asFiles: TreatAsFile.NonArchive, hashes: [HashType.CRC32, HashType.MD5, HashType.SHA1]);
|
||||||
Writer.Write(datfile, outdat!);
|
Writer.Write(datfile, outdat!);
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ contents of any changed dats.";
|
|||||||
|
|
||||||
// First get a list of SHA-1's from the input DATs
|
// First get a list of SHA-1's from the input DATs
|
||||||
DatFile datroot = DatFile.Create();
|
DatFile datroot = DatFile.Create();
|
||||||
datroot.Header.Type = "SuperDAT";
|
datroot.Header.SetFieldValue<string?>(SabreTools.Models.Metadata.Header.TypeKey, "SuperDAT");
|
||||||
DatFromDir.PopulateFromDir(datroot, _dats, asFiles: TreatAsFile.NonArchive, hashes: [HashType.CRC32, HashType.MD5, HashType.SHA1]);
|
DatFromDir.PopulateFromDir(datroot, _dats, asFiles: TreatAsFile.NonArchive, hashes: [HashType.CRC32, HashType.MD5, HashType.SHA1]);
|
||||||
datroot.Items.BucketBy(ItemKey.SHA1, DedupeType.None);
|
datroot.Items.BucketBy(ItemKey.SHA1, DedupeType.None);
|
||||||
|
|
||||||
|
|||||||
@@ -35,10 +35,19 @@ namespace SabreTools.DatFiles
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Convert header information
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item">Header to convert</param>
|
||||||
|
private void ConvertHeader(Models.Metadata.Header? item)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert machine information
|
/// Convert machine information
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="metadata">Metadata file to convert</param>
|
/// <param name="item">Machine to convert</param>
|
||||||
/// <param name="filename">Name of the file to be parsed</param>
|
/// <param name="filename">Name of the file to be parsed</param>
|
||||||
/// <param name="indexId">Index ID for the DAT</param>
|
/// <param name="indexId">Index ID for the DAT</param>
|
||||||
/// <param name="statsOnly">True to only add item statistics while parsing, false otherwise</param>
|
/// <param name="statsOnly">True to only add item statistics while parsing, false otherwise</param>
|
||||||
|
|||||||
@@ -128,23 +128,23 @@ namespace SabreTools.DatFiles
|
|||||||
public void FillHeaderFromPath(string path, bool bare)
|
public void FillHeaderFromPath(string path, bool bare)
|
||||||
{
|
{
|
||||||
// If the description is defined but not the name, set the name from the description
|
// If the description is defined but not the name, set the name from the description
|
||||||
if (string.IsNullOrEmpty(Header.Name) && !string.IsNullOrEmpty(Header.Description))
|
if (string.IsNullOrEmpty(Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey)) && !string.IsNullOrEmpty(Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey)))
|
||||||
{
|
{
|
||||||
Header.Name = Header.Description;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey));
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the name is defined but not the description, set the description from the name
|
// If the name is defined but not the description, set the description from the name
|
||||||
else if (!string.IsNullOrEmpty(Header.Name) && string.IsNullOrEmpty(Header.Description))
|
else if (!string.IsNullOrEmpty(Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey)) && string.IsNullOrEmpty(Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey)))
|
||||||
{
|
{
|
||||||
Header.Description = Header.Name + (bare ? string.Empty : $" ({Header.Date})");
|
Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey) + (bare ? string.Empty : $" ({Header.GetFieldValue<string?>(Models.Metadata.Header.DateKey)})"));
|
||||||
}
|
}
|
||||||
|
|
||||||
// If neither the name or description are defined, set them from the automatic values
|
// If neither the name or description are defined, set them from the automatic values
|
||||||
else if (string.IsNullOrEmpty(Header.Name) && string.IsNullOrEmpty(Header.Description))
|
else if (string.IsNullOrEmpty(Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey)) && string.IsNullOrEmpty(Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey)))
|
||||||
{
|
{
|
||||||
string[] splitpath = path.TrimEnd(Path.DirectorySeparatorChar).Split(Path.DirectorySeparatorChar);
|
string[] splitpath = path.TrimEnd(Path.DirectorySeparatorChar).Split(Path.DirectorySeparatorChar);
|
||||||
Header.Name = splitpath.Last();
|
Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, splitpath.Last());
|
||||||
Header.Description = Header.Name + (bare ? string.Empty : $" ({Header.Date})");
|
Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey) + (bare ? string.Empty : $" ({Header.GetFieldValue<string?>(Models.Metadata.Header.DateKey)})"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using SabreTools.Core;
|
using SabreTools.Core;
|
||||||
@@ -18,8 +17,6 @@ namespace SabreTools.DatFiles
|
|||||||
{
|
{
|
||||||
#region Fields
|
#region Fields
|
||||||
|
|
||||||
#region Common
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// External name of the DAT
|
/// External name of the DAT
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -27,246 +24,31 @@ namespace SabreTools.DatFiles
|
|||||||
[XmlElement("filename")]
|
[XmlElement("filename")]
|
||||||
public string? FileName { get; set; }
|
public string? FileName { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Internal name of the DAT
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("name", DefaultValueHandling = DefaultValueHandling.Include)]
|
|
||||||
[XmlElement("name")]
|
|
||||||
public string? Name { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// DAT description
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("description", DefaultValueHandling = DefaultValueHandling.Include)]
|
|
||||||
[XmlElement("description")]
|
|
||||||
public string? Description { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Root directory for the files; currently TruRip/EmuARC-exclusive
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("rootdir", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
|
||||||
[XmlElement("rootdir")]
|
|
||||||
public string? RootDir { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// General category of items found in the DAT
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("category", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
|
||||||
[XmlElement("category")]
|
|
||||||
public string? Category { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Version of the DAT
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("version", DefaultValueHandling = DefaultValueHandling.Include)]
|
|
||||||
[XmlElement("version")]
|
|
||||||
public string? Version { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creation or modification date
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("date", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
|
||||||
[XmlElement("date")]
|
|
||||||
public string? Date { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// List of authors who contributed to the DAT
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("author", DefaultValueHandling = DefaultValueHandling.Include)]
|
|
||||||
[XmlElement("author")]
|
|
||||||
public string? Author { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Email address for DAT author(s)
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("email", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
|
||||||
[XmlElement("email")]
|
|
||||||
public string? Email { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Author or distribution homepage name
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("homepage", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
|
||||||
[XmlElement("homepage")]
|
|
||||||
public string? Homepage { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Author or distribution URL
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("url", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
|
||||||
[XmlElement("url")]
|
|
||||||
public string? Url { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Any comment that does not already fit an existing field
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("comment", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
|
||||||
[XmlElement("comment")]
|
|
||||||
public string? Comment { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Header skipper to be used when loading the DAT
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("header", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
|
||||||
[XmlElement("header")]
|
|
||||||
public string? HeaderSkipper { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Classification of the DAT. Generally only used for SuperDAT
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("type", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
|
||||||
[XmlElement("type")]
|
|
||||||
public string? Type { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Force a merging style when loaded
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("forcemerging", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
|
||||||
[XmlElement("forcemerging")]
|
|
||||||
public MergingFlag ForceMerging { get; set; }
|
|
||||||
|
|
||||||
[JsonIgnore]
|
|
||||||
public bool ForceMergingSpecified { get { return ForceMerging != MergingFlag.None; } }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Force nodump handling when loaded
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("forcenodump", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
|
||||||
[XmlElement("forcenodump")]
|
|
||||||
public NodumpFlag ForceNodump { get; set; }
|
|
||||||
|
|
||||||
[JsonIgnore]
|
|
||||||
public bool ForceNodumpSpecified { get { return ForceNodump != NodumpFlag.None; } }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Force output packing when loaded
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("forcepacking", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
|
||||||
[XmlElement("forcepacking")]
|
|
||||||
public PackingFlag ForcePacking { get; set; }
|
|
||||||
|
|
||||||
[JsonIgnore]
|
|
||||||
public bool ForcePackingSpecified { get { return ForcePacking != PackingFlag.None; } }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Read or write format
|
/// Read or write format
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[JsonIgnore, XmlIgnore]
|
[JsonIgnore, XmlIgnore]
|
||||||
public DatFormat DatFormat { get; set; }
|
public DatFormat DatFormat { get; set; }
|
||||||
|
|
||||||
#endregion
|
[JsonIgnore]
|
||||||
|
public bool InfosSpecified
|
||||||
#region ListXML
|
{
|
||||||
|
get
|
||||||
/// <summary>
|
{
|
||||||
/// Debug build flag
|
var infos = GetFieldValue<OfflineListInfo[]?>(Models.Metadata.Header.InfosKey);
|
||||||
/// </summary>
|
return infos != null && infos.Length > 0;
|
||||||
/// <remarks>Also in Logiqx</remarks>
|
}
|
||||||
[JsonProperty("debug", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
}
|
||||||
[XmlElement("debug")]
|
|
||||||
public bool? Debug { get; set; } = null;
|
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public bool DebugSpecified { get { return Debug != null; } }
|
public bool CanOpenSpecified
|
||||||
|
{
|
||||||
/// <summary>
|
get
|
||||||
/// MAME configuration name
|
{
|
||||||
/// </summary>
|
var canOpen = GetFieldValue<string[]?>(Models.Metadata.Header.CanOpenKey);
|
||||||
[JsonProperty("mameconfig", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
return canOpen != null && canOpen.Length > 0;
|
||||||
[XmlElement("mameconfig")]
|
}
|
||||||
public string? MameConfig { get; set; }
|
}
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Logiqx
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// No-Intro system ID
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("nointroid", DefaultValueHandling = DefaultValueHandling.Include)]
|
|
||||||
[XmlElement("nointroid")]
|
|
||||||
public string? NoIntroID { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Build version
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("build", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
|
||||||
[XmlElement("build")]
|
|
||||||
public string? Build { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Logiqx/RomCenter plugin, OfflineList System
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("system", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
|
||||||
[XmlElement("system")]
|
|
||||||
public string? System { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// RomCenter rom mode
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>(merged|split|unmerged) "split"</remarks>
|
|
||||||
[JsonProperty("rommode", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
|
||||||
[XmlElement("rommode")]
|
|
||||||
public MergingFlag RomMode { get; set; }
|
|
||||||
|
|
||||||
[JsonIgnore]
|
|
||||||
public bool RomModeSpecified { get { return RomMode != MergingFlag.None; } }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// RomCenter bios mode
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>(merged|split|unmerged) "split"</remarks>
|
|
||||||
[JsonProperty("biosmode", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
|
||||||
[XmlElement("biosmode")]
|
|
||||||
public MergingFlag BiosMode { get; set; }
|
|
||||||
|
|
||||||
[JsonIgnore]
|
|
||||||
public bool BiosModeSpecified { get { return BiosMode != MergingFlag.None; } }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// RomCenter sample mode
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>(merged|unmerged) "merged"</remarks>
|
|
||||||
[JsonProperty("samplemode", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
|
||||||
[XmlElement("samplemode")]
|
|
||||||
public MergingFlag SampleMode { get; set; }
|
|
||||||
|
|
||||||
[JsonIgnore]
|
|
||||||
public bool SampleModeSpecified { get { return SampleMode != MergingFlag.None; } }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// RomCenter lock rom mode
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("lockrommode", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
|
||||||
[XmlElement("lockrommode")]
|
|
||||||
public bool? LockRomMode { get; set; }
|
|
||||||
|
|
||||||
[JsonIgnore]
|
|
||||||
public bool LockRomModeSpecified { get { return LockRomMode != null; } }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// RomCenter lock bios mode
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("lockbiosmode", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
|
||||||
[XmlElement("lockbiosmode")]
|
|
||||||
public bool? LockBiosMode { get; set; }
|
|
||||||
|
|
||||||
[JsonIgnore]
|
|
||||||
public bool LockBiosModeSpecified { get { return LockBiosMode != null; } }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// RomCenter lock sample mode
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("locksamplemode", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
|
||||||
[XmlElement("locksamplemode")]
|
|
||||||
public bool? LockSampleMode { get; set; }
|
|
||||||
|
|
||||||
[JsonIgnore]
|
|
||||||
public bool LockSampleModeSpecified { get { return LockSampleMode != null; } }
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Missfile
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Output the item name
|
/// Output the item name
|
||||||
@@ -274,72 +56,6 @@ namespace SabreTools.DatFiles
|
|||||||
[JsonIgnore, XmlIgnore]
|
[JsonIgnore, XmlIgnore]
|
||||||
public bool UseRomName { get; set; }
|
public bool UseRomName { get; set; }
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region OfflineList
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Screenshots width
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("screenshotswidth", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
|
||||||
[XmlElement("screenshotswidth")]
|
|
||||||
public string? ScreenshotsWidth { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Screenshots height
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("screenshotsheight", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
|
||||||
[XmlElement("screenshotsheight")]
|
|
||||||
public string? ScreenshotsHeight { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// OfflineList info list
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("infos", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
|
||||||
[XmlElement("infos")]
|
|
||||||
public List<OfflineListInfo>? Infos { get; set; }
|
|
||||||
|
|
||||||
[JsonIgnore]
|
|
||||||
public bool InfosSpecified { get { return Infos != null && Infos.Count > 0; } }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// OfflineList can-open extensions
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("canopen", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
|
||||||
[XmlElement("canopen")]
|
|
||||||
public List<string>? CanOpen { get; set; }
|
|
||||||
|
|
||||||
[JsonIgnore]
|
|
||||||
public bool CanOpenSpecified { get { return CanOpen != null && CanOpen.Count > 0; } }
|
|
||||||
|
|
||||||
// TODO: Implement the following header values:
|
|
||||||
// - newdat.datversionurl (currently reads and writes to Header.Url, not strictly correct)
|
|
||||||
// - newdat.daturl (currently writes to Header.Url, not strictly correct)
|
|
||||||
// - newdat.daturl[fileName] (currently writes to Header.FileName + ".zip", not strictly correct)
|
|
||||||
// - newdat.imurl (currently writes to Header.Url, not strictly correct)
|
|
||||||
// - search[...].to.find[operation, value (Int32?)]
|
|
||||||
// - search[...].to[value, default (true|false), auto (true, false)]
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Rom title
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("romtitle", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
|
||||||
[XmlElement("romtitle")]
|
|
||||||
public string? RomTitle { get; set; }
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region RomCenter
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// RomCenter DAT format version
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("rcversion", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
|
||||||
[XmlElement("rcversion")]
|
|
||||||
public string? RomCenterVersion { get; set; }
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Write pre-processing
|
#region Write pre-processing
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -402,10 +118,54 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Internal Header model
|
||||||
|
/// </summary>
|
||||||
|
[JsonIgnore]
|
||||||
|
private Models.Metadata.Header _header = [];
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Instance Methods
|
#region Instance Methods
|
||||||
|
|
||||||
|
#region Accessors
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Get the value from a field based on the type provided
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T">Type of the value to get from the internal model</typeparam>
|
||||||
|
/// <param name="fieldName">Field to retrieve</param>
|
||||||
|
/// <returns>Value from the field, if possible</returns>
|
||||||
|
public T? GetFieldValue<T>(string? fieldName)
|
||||||
|
{
|
||||||
|
// Invalid field cannot be processed
|
||||||
|
if (string.IsNullOrEmpty(fieldName))
|
||||||
|
return default;
|
||||||
|
|
||||||
|
// Get the value based on the type
|
||||||
|
return _header.Read<T>(fieldName!);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Set the value from a field based on the type provided
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T">Type of the value to set in the internal model</typeparam>
|
||||||
|
/// <param name="fieldName">Field to set</param>
|
||||||
|
/// <param name="value">Value to set</param>
|
||||||
|
/// <returns>True if the value was set, false otherwise</returns>
|
||||||
|
public bool SetFieldValue<T>(string? fieldName, T? value)
|
||||||
|
{
|
||||||
|
// Invalid field cannot be processed
|
||||||
|
if (string.IsNullOrEmpty(fieldName))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Set the value based on the type
|
||||||
|
_header[fieldName!] = value;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region Cloning Methods
|
#region Cloning Methods
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -413,48 +173,11 @@ namespace SabreTools.DatFiles
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public object Clone()
|
public object Clone()
|
||||||
{
|
{
|
||||||
return new DatHeader()
|
var header = new DatHeader()
|
||||||
{
|
{
|
||||||
FileName = this.FileName,
|
FileName = this.FileName,
|
||||||
Name = this.Name,
|
|
||||||
Description = this.Description,
|
|
||||||
RootDir = this.RootDir,
|
|
||||||
Category = this.Category,
|
|
||||||
Version = this.Version,
|
|
||||||
Date = this.Date,
|
|
||||||
Author = this.Author,
|
|
||||||
Email = this.Email,
|
|
||||||
Homepage = this.Homepage,
|
|
||||||
Url = this.Url,
|
|
||||||
Comment = this.Comment,
|
|
||||||
HeaderSkipper = this.HeaderSkipper,
|
|
||||||
Type = this.Type,
|
|
||||||
ForceMerging = this.ForceMerging,
|
|
||||||
ForceNodump = this.ForceNodump,
|
|
||||||
ForcePacking = this.ForcePacking,
|
|
||||||
DatFormat = this.DatFormat,
|
DatFormat = this.DatFormat,
|
||||||
|
|
||||||
Debug = this.Debug,
|
|
||||||
MameConfig = this.MameConfig,
|
|
||||||
|
|
||||||
NoIntroID = this.NoIntroID,
|
|
||||||
Build = this.Build,
|
|
||||||
System = this.System,
|
|
||||||
RomMode = this.RomMode,
|
|
||||||
BiosMode = this.BiosMode,
|
|
||||||
SampleMode = this.SampleMode,
|
|
||||||
LockRomMode = this.LockRomMode,
|
|
||||||
LockBiosMode = this.LockBiosMode,
|
|
||||||
LockSampleMode = this.LockSampleMode,
|
|
||||||
|
|
||||||
ScreenshotsWidth = this.ScreenshotsWidth,
|
|
||||||
ScreenshotsHeight = this.ScreenshotsHeight,
|
|
||||||
Infos = this.Infos, // TODO: Perform a deep clone
|
|
||||||
CanOpen = this.CanOpen, // TODO: Perform a deep clone
|
|
||||||
RomTitle = this.RomTitle,
|
|
||||||
|
|
||||||
RomCenterVersion = this.RomCenterVersion,
|
|
||||||
|
|
||||||
UseRomName = this.UseRomName,
|
UseRomName = this.UseRomName,
|
||||||
Prefix = this.Prefix,
|
Prefix = this.Prefix,
|
||||||
Postfix = this.Postfix,
|
Postfix = this.Postfix,
|
||||||
@@ -466,6 +189,41 @@ namespace SabreTools.DatFiles
|
|||||||
InputDepot = this.InputDepot?.Clone() as DepotInformation,
|
InputDepot = this.InputDepot?.Clone() as DepotInformation,
|
||||||
OutputDepot = this.OutputDepot?.Clone() as DepotInformation,
|
OutputDepot = this.OutputDepot?.Clone() as DepotInformation,
|
||||||
};
|
};
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.AuthorKey, GetFieldValue<string?>(Models.Metadata.Header.AuthorKey));
|
||||||
|
header.SetFieldValue<MergingFlag>(Models.Metadata.Header.BiosModeKey, GetFieldValue<MergingFlag>(Models.Metadata.Header.BiosModeKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.BuildKey, GetFieldValue<string?>(Models.Metadata.Header.BuildKey));
|
||||||
|
header.SetFieldValue<string[]?>(Models.Metadata.Header.CanOpenKey, GetFieldValue<string[]?>(Models.Metadata.Header.CanOpenKey)); // TODO: Perform a deep clone
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.CategoryKey, GetFieldValue<string?>(Models.Metadata.Header.CategoryKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.CommentKey, GetFieldValue<string?>(Models.Metadata.Header.CommentKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.DateKey, GetFieldValue<string?>(Models.Metadata.Header.DateKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.DatVersionKey, GetFieldValue<string?>(Models.Metadata.Header.DatVersionKey));
|
||||||
|
header.SetFieldValue<bool?>(Models.Metadata.Header.DebugKey, GetFieldValue<bool?>(Models.Metadata.Header.DebugKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.EmailKey, GetFieldValue<string?>(Models.Metadata.Header.EmailKey));
|
||||||
|
header.SetFieldValue<MergingFlag>(Models.Metadata.Header.ForceMergingKey, GetFieldValue<MergingFlag>(Models.Metadata.Header.ForceMergingKey));
|
||||||
|
header.SetFieldValue<NodumpFlag>(Models.Metadata.Header.ForceNodumpKey, GetFieldValue<NodumpFlag>(Models.Metadata.Header.ForceNodumpKey));
|
||||||
|
header.SetFieldValue<PackingFlag>(Models.Metadata.Header.ForcePackingKey, GetFieldValue<PackingFlag>(Models.Metadata.Header.ForcePackingKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.HeaderKey, GetFieldValue<string?>(Models.Metadata.Header.HeaderKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.HomepageKey, GetFieldValue<string?>(Models.Metadata.Header.HomepageKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.IdKey, GetFieldValue<string?>(Models.Metadata.Header.IdKey));
|
||||||
|
header.SetFieldValue<OfflineListInfo[]?>(Models.Metadata.Header.InfosKey, GetFieldValue<OfflineListInfo[]?>(Models.Metadata.Header.InfosKey)); // TODO: Perform a deep clone
|
||||||
|
header.SetFieldValue<bool?>(Models.Metadata.Header.LockBiosModeKey, GetFieldValue<bool?>(Models.Metadata.Header.LockBiosModeKey));
|
||||||
|
header.SetFieldValue<bool?>(Models.Metadata.Header.LockRomModeKey, GetFieldValue<bool?>(Models.Metadata.Header.LockRomModeKey));
|
||||||
|
header.SetFieldValue<bool?>(Models.Metadata.Header.LockSampleModeKey, GetFieldValue<bool?>(Models.Metadata.Header.LockSampleModeKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.MameConfigKey, GetFieldValue<string?>(Models.Metadata.Header.MameConfigKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, GetFieldValue<string?>(Models.Metadata.Header.NameKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.RomTitleKey, GetFieldValue<string?>(Models.Metadata.Header.RomTitleKey));
|
||||||
|
header.SetFieldValue<MergingFlag>(Models.Metadata.Header.RomModeKey, GetFieldValue<MergingFlag>(Models.Metadata.Header.RomModeKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.RootDirKey, GetFieldValue<string?>(Models.Metadata.Header.RootDirKey));
|
||||||
|
header.SetFieldValue<MergingFlag>(Models.Metadata.Header.SampleModeKey, GetFieldValue<MergingFlag>(Models.Metadata.Header.SampleModeKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.ScreenshotsHeightKey, GetFieldValue<string?>(Models.Metadata.Header.ScreenshotsHeightKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.ScreenshotsWidthKey, GetFieldValue<string?>(Models.Metadata.Header.ScreenshotsWidthKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.SystemKey, GetFieldValue<string?>(Models.Metadata.Header.SystemKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.TypeKey, GetFieldValue<string?>(Models.Metadata.Header.TypeKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.UrlKey, GetFieldValue<string?>(Models.Metadata.Header.UrlKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.VersionKey, GetFieldValue<string?>(Models.Metadata.Header.VersionKey));
|
||||||
|
|
||||||
|
return header;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -473,27 +231,29 @@ namespace SabreTools.DatFiles
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public DatHeader CloneStandard()
|
public DatHeader CloneStandard()
|
||||||
{
|
{
|
||||||
return new DatHeader()
|
var header = new DatHeader()
|
||||||
{
|
{
|
||||||
FileName = this.FileName,
|
FileName = this.FileName,
|
||||||
Name = this.Name,
|
|
||||||
Description = this.Description,
|
|
||||||
RootDir = this.RootDir,
|
|
||||||
Category = this.Category,
|
|
||||||
Version = this.Version,
|
|
||||||
Date = this.Date,
|
|
||||||
Author = this.Author,
|
|
||||||
Email = this.Email,
|
|
||||||
Homepage = this.Homepage,
|
|
||||||
Url = this.Url,
|
|
||||||
Comment = this.Comment,
|
|
||||||
HeaderSkipper = this.HeaderSkipper,
|
|
||||||
Type = this.Type,
|
|
||||||
ForceMerging = this.ForceMerging,
|
|
||||||
ForceNodump = this.ForceNodump,
|
|
||||||
ForcePacking = this.ForcePacking,
|
|
||||||
DatFormat = this.DatFormat,
|
DatFormat = this.DatFormat,
|
||||||
};
|
};
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.AuthorKey, GetFieldValue<string?>(Models.Metadata.Header.AuthorKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.CategoryKey, GetFieldValue<string?>(Models.Metadata.Header.CategoryKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.CommentKey, GetFieldValue<string?>(Models.Metadata.Header.CommentKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.DateKey, GetFieldValue<string?>(Models.Metadata.Header.DateKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.EmailKey, GetFieldValue<string?>(Models.Metadata.Header.EmailKey));
|
||||||
|
header.SetFieldValue<MergingFlag>(Models.Metadata.Header.ForceMergingKey, GetFieldValue<MergingFlag>(Models.Metadata.Header.ForceMergingKey));
|
||||||
|
header.SetFieldValue<NodumpFlag>(Models.Metadata.Header.ForceNodumpKey, GetFieldValue<NodumpFlag>(Models.Metadata.Header.ForceNodumpKey));
|
||||||
|
header.SetFieldValue<PackingFlag>(Models.Metadata.Header.ForcePackingKey, GetFieldValue<PackingFlag>(Models.Metadata.Header.ForcePackingKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.HeaderKey, GetFieldValue<string?>(Models.Metadata.Header.HeaderKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.HomepageKey, GetFieldValue<string?>(Models.Metadata.Header.HomepageKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, GetFieldValue<string?>(Models.Metadata.Header.NameKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.RootDirKey, GetFieldValue<string?>(Models.Metadata.Header.RootDirKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.TypeKey, GetFieldValue<string?>(Models.Metadata.Header.TypeKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.UrlKey, GetFieldValue<string?>(Models.Metadata.Header.UrlKey));
|
||||||
|
header.SetFieldValue<string?>(Models.Metadata.Header.VersionKey, GetFieldValue<string?>(Models.Metadata.Header.VersionKey));
|
||||||
|
|
||||||
|
return header;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -530,53 +290,53 @@ namespace SabreTools.DatFiles
|
|||||||
if (!string.IsNullOrEmpty(datHeader.FileName))
|
if (!string.IsNullOrEmpty(datHeader.FileName))
|
||||||
FileName = datHeader.FileName;
|
FileName = datHeader.FileName;
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(datHeader.Name))
|
if (!string.IsNullOrEmpty(datHeader.GetFieldValue<string?>(Models.Metadata.Header.NameKey)))
|
||||||
Name = datHeader.Name;
|
SetFieldValue<string?>(Models.Metadata.Header.NameKey, datHeader.GetFieldValue<string?>(Models.Metadata.Header.NameKey));
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(datHeader.Description))
|
if (!string.IsNullOrEmpty(datHeader.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey)))
|
||||||
Description = datHeader.Description;
|
SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, datHeader.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey));
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(datHeader.RootDir))
|
if (!string.IsNullOrEmpty(datHeader.GetFieldValue<string?>(Models.Metadata.Header.RootDirKey)))
|
||||||
RootDir = datHeader.RootDir;
|
SetFieldValue<string?>(Models.Metadata.Header.RootDirKey, datHeader.GetFieldValue<string?>(Models.Metadata.Header.RootDirKey));
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(datHeader.Category))
|
if (!string.IsNullOrEmpty(datHeader.GetFieldValue<string?>(Models.Metadata.Header.CategoryKey)))
|
||||||
Category = datHeader.Category;
|
SetFieldValue<string?>(Models.Metadata.Header.CategoryKey, datHeader.GetFieldValue<string?>(Models.Metadata.Header.CategoryKey));
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(datHeader.Version))
|
if (!string.IsNullOrEmpty(datHeader.GetFieldValue<string?>(Models.Metadata.Header.VersionKey)))
|
||||||
Version = datHeader.Version;
|
SetFieldValue<string?>(Models.Metadata.Header.VersionKey, datHeader.GetFieldValue<string?>(Models.Metadata.Header.VersionKey));
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(datHeader.Date))
|
if (!string.IsNullOrEmpty(datHeader.GetFieldValue<string?>(Models.Metadata.Header.DateKey)))
|
||||||
Date = datHeader.Date;
|
SetFieldValue<string?>(Models.Metadata.Header.DateKey, datHeader.GetFieldValue<string?>(Models.Metadata.Header.DateKey));
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(datHeader.Author))
|
if (!string.IsNullOrEmpty(datHeader.GetFieldValue<string?>(Models.Metadata.Header.AuthorKey)))
|
||||||
Author = datHeader.Author;
|
SetFieldValue<string?>(Models.Metadata.Header.AuthorKey, datHeader.GetFieldValue<string?>(Models.Metadata.Header.AuthorKey));
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(datHeader.Email))
|
if (!string.IsNullOrEmpty(datHeader.GetFieldValue<string?>(Models.Metadata.Header.EmailKey)))
|
||||||
Email = datHeader.Email;
|
SetFieldValue<string?>(Models.Metadata.Header.EmailKey, datHeader.GetFieldValue<string?>(Models.Metadata.Header.EmailKey));
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(datHeader.Homepage))
|
if (!string.IsNullOrEmpty(datHeader.GetFieldValue<string?>(Models.Metadata.Header.HomepageKey)))
|
||||||
Homepage = datHeader.Homepage;
|
SetFieldValue<string?>(Models.Metadata.Header.HomepageKey, datHeader.GetFieldValue<string?>(Models.Metadata.Header.HomepageKey));
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(datHeader.Url))
|
if (!string.IsNullOrEmpty(datHeader.GetFieldValue<string?>(Models.Metadata.Header.UrlKey)))
|
||||||
Url = datHeader.Url;
|
SetFieldValue<string?>(Models.Metadata.Header.UrlKey, datHeader.GetFieldValue<string?>(Models.Metadata.Header.UrlKey));
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(datHeader.Comment))
|
if (!string.IsNullOrEmpty(datHeader.GetFieldValue<string?>(Models.Metadata.Header.CommentKey)))
|
||||||
Comment = datHeader.Comment;
|
SetFieldValue<string?>(Models.Metadata.Header.CommentKey, datHeader.GetFieldValue<string?>(Models.Metadata.Header.CommentKey));
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(datHeader.HeaderSkipper))
|
if (!string.IsNullOrEmpty(datHeader.GetFieldValue<string?>(Models.Metadata.Header.HeaderKey)))
|
||||||
HeaderSkipper = datHeader.HeaderSkipper;
|
SetFieldValue<string?>(Models.Metadata.Header.HeaderKey, datHeader.GetFieldValue<string?>(Models.Metadata.Header.HeaderKey));
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(datHeader.Type))
|
if (!string.IsNullOrEmpty(datHeader.GetFieldValue<string?>(Models.Metadata.Header.TypeKey)))
|
||||||
Type = datHeader.Type;
|
SetFieldValue<string?>(Models.Metadata.Header.TypeKey, datHeader.GetFieldValue<string?>(Models.Metadata.Header.TypeKey));
|
||||||
|
|
||||||
if (datHeader.ForceMerging != MergingFlag.None)
|
if (datHeader.GetFieldValue<MergingFlag>(Models.Metadata.Header.ForceMergingKey) != MergingFlag.None)
|
||||||
ForceMerging = datHeader.ForceMerging;
|
SetFieldValue<MergingFlag>(Models.Metadata.Header.ForceMergingKey, datHeader.GetFieldValue<MergingFlag>(Models.Metadata.Header.ForceMergingKey));
|
||||||
|
|
||||||
if (datHeader.ForceNodump != NodumpFlag.None)
|
if (datHeader.GetFieldValue<NodumpFlag>(Models.Metadata.Header.ForceNodumpKey) != NodumpFlag.None)
|
||||||
ForceNodump = datHeader.ForceNodump;
|
SetFieldValue<NodumpFlag>(Models.Metadata.Header.ForceNodumpKey, datHeader.GetFieldValue<NodumpFlag>(Models.Metadata.Header.ForceNodumpKey));
|
||||||
|
|
||||||
if (datHeader.ForcePacking != PackingFlag.None)
|
if (datHeader.GetFieldValue<PackingFlag>(Models.Metadata.Header.ForcePackingKey) != PackingFlag.None)
|
||||||
ForcePacking = datHeader.ForcePacking;
|
SetFieldValue<PackingFlag>(Models.Metadata.Header.ForcePackingKey, datHeader.GetFieldValue<PackingFlag>(Models.Metadata.Header.ForcePackingKey));
|
||||||
|
|
||||||
if (datHeader.DatFormat != 0x00)
|
if (datHeader.DatFormat != 0x00)
|
||||||
DatFormat = datHeader.DatFormat;
|
DatFormat = datHeader.DatFormat;
|
||||||
@@ -605,7 +365,7 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
#region Manipulation
|
#region Manipulation
|
||||||
|
|
||||||
//// <summary>
|
/// <summary>
|
||||||
/// Remove a field from the header
|
/// Remove a field from the header
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="fieldName">Field to remove</param>
|
/// <param name="fieldName">Field to remove</param>
|
||||||
@@ -615,43 +375,43 @@ namespace SabreTools.DatFiles
|
|||||||
DatHeaderField datHeaderField = fieldName.AsDatHeaderField();
|
DatHeaderField datHeaderField = fieldName.AsDatHeaderField();
|
||||||
switch (datHeaderField)
|
switch (datHeaderField)
|
||||||
{
|
{
|
||||||
case DatHeaderField.Author: Author = null; break;
|
case DatHeaderField.Author: SetFieldValue<string?>(Models.Metadata.Header.AuthorKey, null); break;
|
||||||
case DatHeaderField.BiosMode: BiosMode = MergingFlag.None; break;
|
case DatHeaderField.BiosMode: SetFieldValue<MergingFlag>(Models.Metadata.Header.BiosModeKey, MergingFlag.None); break;
|
||||||
case DatHeaderField.Build: Build = null; break;
|
case DatHeaderField.Build: SetFieldValue<string?>(Models.Metadata.Header.BuildKey, null); break;
|
||||||
case DatHeaderField.CanOpen: CanOpen = null; break;
|
case DatHeaderField.CanOpen: SetFieldValue<string[]?>(Models.Metadata.Header.CanOpenKey, null); break;
|
||||||
case DatHeaderField.Category: Category = null; break;
|
case DatHeaderField.Category: SetFieldValue<string?>(Models.Metadata.Header.CategoryKey, null); break;
|
||||||
case DatHeaderField.Comment: Comment = null; break;
|
case DatHeaderField.Comment: SetFieldValue<string?>(Models.Metadata.Header.CommentKey, null); break;
|
||||||
case DatHeaderField.Date: Date = null; break;
|
case DatHeaderField.Date: SetFieldValue<string?>(Models.Metadata.Header.DateKey, null); break;
|
||||||
case DatHeaderField.Debug: Debug = null; break;
|
case DatHeaderField.Debug: SetFieldValue<bool?>(Models.Metadata.Header.DebugKey, null); break;
|
||||||
case DatHeaderField.Description: Description = null; break;
|
case DatHeaderField.Description: SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, null); break;
|
||||||
case DatHeaderField.Email: Email = null; break;
|
case DatHeaderField.Email: SetFieldValue<string?>(Models.Metadata.Header.EmailKey, null); break;
|
||||||
case DatHeaderField.FileName: FileName = null; break;
|
case DatHeaderField.FileName: FileName = null; break;
|
||||||
case DatHeaderField.ForceMerging: ForceMerging = MergingFlag.None; break;
|
case DatHeaderField.ForceMerging: SetFieldValue<MergingFlag>(Models.Metadata.Header.ForceMergingKey, MergingFlag.None); break;
|
||||||
case DatHeaderField.ForceNodump: ForceNodump = NodumpFlag.None; break;
|
case DatHeaderField.ForceNodump: SetFieldValue<NodumpFlag>(Models.Metadata.Header.ForceNodumpKey, NodumpFlag.None); break;
|
||||||
case DatHeaderField.ForcePacking: ForcePacking = PackingFlag.None; break;
|
case DatHeaderField.ForcePacking: SetFieldValue<PackingFlag>(Models.Metadata.Header.ForcePackingKey, PackingFlag.None); break;
|
||||||
case DatHeaderField.HeaderSkipper: HeaderSkipper = null; break;
|
case DatHeaderField.HeaderSkipper: SetFieldValue<string?>(Models.Metadata.Header.HeaderKey, null); break;
|
||||||
case DatHeaderField.Homepage: Homepage = null; break;
|
case DatHeaderField.Homepage: SetFieldValue<string?>(Models.Metadata.Header.HomepageKey, null); break;
|
||||||
case DatHeaderField.ID: NoIntroID = null; break;
|
case DatHeaderField.ID: SetFieldValue<string?>(Models.Metadata.Header.IdKey, null); break;
|
||||||
// case DatHeaderField.Info_Default: Info_Default = null; break;
|
// case DatHeaderField.Info_Default: Info_Default = null; break;
|
||||||
// case DatHeaderField.Info_IsNamingOption: Info_IsNamingOption = null; break;
|
// case DatHeaderField.Info_IsNamingOption: Info_IsNamingOption = null; break;
|
||||||
// case DatHeaderField.Info_Name: Info_Name = null; break;
|
// case DatHeaderField.Info_Name: Info_Name = null; break;
|
||||||
// case DatHeaderField.Info_Visible: Info_Visible = null; break;
|
// case DatHeaderField.Info_Visible: Info_Visible = null; break;
|
||||||
case DatHeaderField.LockBiosMode: LockBiosMode = null; break;
|
case DatHeaderField.LockBiosMode: SetFieldValue<bool?>(Models.Metadata.Header.LockBiosModeKey, null); break;
|
||||||
case DatHeaderField.LockRomMode: LockRomMode = null; break;
|
case DatHeaderField.LockRomMode: SetFieldValue<bool?>(Models.Metadata.Header.LockRomModeKey, null); break;
|
||||||
case DatHeaderField.LockSampleMode: LockSampleMode = null; break;
|
case DatHeaderField.LockSampleMode: SetFieldValue<bool?>(Models.Metadata.Header.LockSampleModeKey, null); break;
|
||||||
case DatHeaderField.MameConfig: MameConfig = null; break;
|
case DatHeaderField.MameConfig: SetFieldValue<string?>(Models.Metadata.Header.MameConfigKey, null); break;
|
||||||
case DatHeaderField.Name: Name = null; break;
|
case DatHeaderField.Name: SetFieldValue<string?>(Models.Metadata.Header.NameKey, null); break;
|
||||||
case DatHeaderField.RomCenterVersion: RomCenterVersion = null; break;
|
case DatHeaderField.RomCenterVersion: SetFieldValue<string?>(Models.Metadata.Header.DatVersionKey, null); break;
|
||||||
case DatHeaderField.RomMode: RomMode = MergingFlag.None; break;
|
case DatHeaderField.RomMode: SetFieldValue<MergingFlag>(Models.Metadata.Header.RomModeKey, MergingFlag.None); break;
|
||||||
case DatHeaderField.RomTitle: RomTitle = null; break;
|
case DatHeaderField.RomTitle: SetFieldValue<string?>(Models.Metadata.Header.RomTitleKey, null); break;
|
||||||
case DatHeaderField.RootDir: RootDir = null; break;
|
case DatHeaderField.RootDir: SetFieldValue<string?>(Models.Metadata.Header.RootDirKey, null); break;
|
||||||
case DatHeaderField.SampleMode: SampleMode = MergingFlag.None; break;
|
case DatHeaderField.SampleMode: SetFieldValue<MergingFlag>(Models.Metadata.Header.SampleModeKey, MergingFlag.None); break;
|
||||||
case DatHeaderField.ScreenshotsHeight: ScreenshotsHeight = null; break;
|
case DatHeaderField.ScreenshotsHeight: SetFieldValue<string?>(Models.Metadata.Header.ScreenshotsHeightKey, null); break;
|
||||||
case DatHeaderField.ScreenshotsWidth: ScreenshotsWidth = null; break;
|
case DatHeaderField.ScreenshotsWidth: SetFieldValue<string?>(Models.Metadata.Header.ScreenshotsWidthKey, null); break;
|
||||||
case DatHeaderField.System: System = null; break;
|
case DatHeaderField.System: SetFieldValue<string?>(Models.Metadata.Header.SystemKey, null); break;
|
||||||
case DatHeaderField.Type: Type = null; break;
|
case DatHeaderField.Type: SetFieldValue<string?>(Models.Metadata.Header.TypeKey, null); break;
|
||||||
case DatHeaderField.Url: Url = null; break;
|
case DatHeaderField.Url: SetFieldValue<string?>(Models.Metadata.Header.UrlKey, null); break;
|
||||||
case DatHeaderField.Version: Version = null; break;
|
case DatHeaderField.Version: SetFieldValue<string?>(Models.Metadata.Header.VersionKey, null); break;
|
||||||
default: return false;
|
default: return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -670,43 +430,43 @@ namespace SabreTools.DatFiles
|
|||||||
DatHeaderField datHeaderField = fieldName.AsDatHeaderField();
|
DatHeaderField datHeaderField = fieldName.AsDatHeaderField();
|
||||||
switch (datHeaderField)
|
switch (datHeaderField)
|
||||||
{
|
{
|
||||||
case DatHeaderField.Author: Author = value; break;
|
case DatHeaderField.Author: SetFieldValue<string?>(Models.Metadata.Header.AuthorKey, value); break;
|
||||||
case DatHeaderField.BiosMode: BiosMode = value.AsEnumValue<MergingFlag>(); break;
|
case DatHeaderField.BiosMode: SetFieldValue<MergingFlag>(Models.Metadata.Header.BiosModeKey, value.AsEnumValue<MergingFlag>()); break;
|
||||||
case DatHeaderField.Build: Build = value; break;
|
case DatHeaderField.Build: SetFieldValue<string?>(Models.Metadata.Header.BuildKey, value); break;
|
||||||
case DatHeaderField.CanOpen: CanOpen = [.. value.Split(',')]; break;
|
case DatHeaderField.CanOpen: SetFieldValue<string[]?>(Models.Metadata.Header.CanOpenKey,[.. value.Split(',')]); break;
|
||||||
case DatHeaderField.Category: Category = value; break;
|
case DatHeaderField.Category: SetFieldValue<string?>(Models.Metadata.Header.CategoryKey, value); break;
|
||||||
case DatHeaderField.Comment: Comment = value; break;
|
case DatHeaderField.Comment: SetFieldValue<string?>(Models.Metadata.Header.CommentKey, value); break;
|
||||||
case DatHeaderField.Date: Date = value; break;
|
case DatHeaderField.Date: SetFieldValue<string?>(Models.Metadata.Header.DateKey, value); break;
|
||||||
case DatHeaderField.Debug: Debug = value.AsYesNo(); break;
|
case DatHeaderField.Debug: SetFieldValue<bool?>(Models.Metadata.Header.DebugKey, value.AsYesNo()); break;
|
||||||
case DatHeaderField.Description: Description = value; break;
|
case DatHeaderField.Description: SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, value); break;
|
||||||
case DatHeaderField.Email: Email = value; break;
|
case DatHeaderField.Email: SetFieldValue<string?>(Models.Metadata.Header.EmailKey, value); break;
|
||||||
case DatHeaderField.FileName: FileName = value; break;
|
case DatHeaderField.FileName: FileName = value; break;
|
||||||
case DatHeaderField.ForceMerging: ForceMerging = value.AsEnumValue<MergingFlag>(); break;
|
case DatHeaderField.ForceMerging: SetFieldValue<MergingFlag>(Models.Metadata.Header.ForceMergingKey, value.AsEnumValue<MergingFlag>()); break;
|
||||||
case DatHeaderField.ForceNodump: ForceNodump = value.AsEnumValue<NodumpFlag>(); break;
|
case DatHeaderField.ForceNodump: SetFieldValue<NodumpFlag>(Models.Metadata.Header.ForceNodumpKey, value.AsEnumValue<NodumpFlag>()); break;
|
||||||
case DatHeaderField.ForcePacking: ForcePacking = value.AsEnumValue<PackingFlag>(); break;
|
case DatHeaderField.ForcePacking: SetFieldValue<PackingFlag>(Models.Metadata.Header.ForcePackingKey, value.AsEnumValue<PackingFlag>()); break;
|
||||||
case DatHeaderField.HeaderSkipper: HeaderSkipper = value; break;
|
case DatHeaderField.HeaderSkipper: SetFieldValue<string?>(Models.Metadata.Header.HeaderKey, value); break;
|
||||||
case DatHeaderField.Homepage: Homepage = value; break;
|
case DatHeaderField.Homepage: SetFieldValue<string?>(Models.Metadata.Header.HomepageKey, value); break;
|
||||||
case DatHeaderField.ID: NoIntroID = value; break;
|
case DatHeaderField.ID: SetFieldValue<string?>(Models.Metadata.Header.IdKey, value); break;
|
||||||
// case DatHeaderField.Info_Default: Info_Default = value; break;
|
// case DatHeaderField.Info_Default: Info_Default = value; break;
|
||||||
// case DatHeaderField.Info_IsNamingOption: Info_IsNamingOption = value; break;
|
// case DatHeaderField.Info_IsNamingOption: Info_IsNamingOption = value; break;
|
||||||
// case DatHeaderField.Info_Name: Info_Name = value; break;
|
// case DatHeaderField.Info_Name: Info_Name = value; break;
|
||||||
// case DatHeaderField.Info_Visible: Info_Visible = value; break;
|
// case DatHeaderField.Info_Visible: Info_Visible = value; break;
|
||||||
case DatHeaderField.LockBiosMode: LockBiosMode = value.AsYesNo(); break;
|
case DatHeaderField.LockBiosMode: SetFieldValue<bool?>(Models.Metadata.Header.LockBiosModeKey, value.AsYesNo()); break;
|
||||||
case DatHeaderField.LockRomMode: LockRomMode = value.AsYesNo(); break;
|
case DatHeaderField.LockRomMode: SetFieldValue<bool?>(Models.Metadata.Header.LockRomModeKey, value.AsYesNo()); break;
|
||||||
case DatHeaderField.LockSampleMode: LockSampleMode = value.AsYesNo(); break;
|
case DatHeaderField.LockSampleMode: SetFieldValue<bool?>(Models.Metadata.Header.LockSampleModeKey, value.AsYesNo()); break;
|
||||||
case DatHeaderField.MameConfig: MameConfig = value; break;
|
case DatHeaderField.MameConfig: SetFieldValue<string?>(Models.Metadata.Header.MameConfigKey, value); break;
|
||||||
case DatHeaderField.Name: Name = value; break;
|
case DatHeaderField.Name: SetFieldValue<string?>(Models.Metadata.Header.NameKey, value); break;
|
||||||
case DatHeaderField.RomCenterVersion: RomCenterVersion = value; break;
|
case DatHeaderField.RomCenterVersion: SetFieldValue<string?>(Models.Metadata.Header.DatVersionKey, value); break;
|
||||||
case DatHeaderField.RomMode: RomMode = value.AsEnumValue<MergingFlag>(); break;
|
case DatHeaderField.RomMode: SetFieldValue<MergingFlag>(Models.Metadata.Header.RomModeKey, value.AsEnumValue<MergingFlag>()); break;
|
||||||
case DatHeaderField.RomTitle: RomTitle = value; break;
|
case DatHeaderField.RomTitle: SetFieldValue<string?>(Models.Metadata.Header.RomTitleKey, value); break;
|
||||||
case DatHeaderField.RootDir: RootDir = value; break;
|
case DatHeaderField.RootDir: SetFieldValue<string?>(Models.Metadata.Header.RootDirKey, value); break;
|
||||||
case DatHeaderField.SampleMode: SampleMode = value.AsEnumValue<MergingFlag>(); break;
|
case DatHeaderField.SampleMode: SetFieldValue<MergingFlag>(Models.Metadata.Header.SampleModeKey, value.AsEnumValue<MergingFlag>()); break;
|
||||||
case DatHeaderField.ScreenshotsHeight: ScreenshotsHeight = value; break;
|
case DatHeaderField.ScreenshotsHeight: SetFieldValue<string?>(Models.Metadata.Header.ScreenshotsHeightKey, value); break;
|
||||||
case DatHeaderField.ScreenshotsWidth: ScreenshotsWidth = value; break;
|
case DatHeaderField.ScreenshotsWidth: SetFieldValue<string?>(Models.Metadata.Header.ScreenshotsWidthKey, value); break;
|
||||||
case DatHeaderField.System: System = value; break;
|
case DatHeaderField.System: SetFieldValue<string?>(Models.Metadata.Header.SystemKey, value); break;
|
||||||
case DatHeaderField.Type: Type = value; break;
|
case DatHeaderField.Type: SetFieldValue<string?>(Models.Metadata.Header.TypeKey, value); break;
|
||||||
case DatHeaderField.Url: Url = value; break;
|
case DatHeaderField.Url: SetFieldValue<string?>(Models.Metadata.Header.UrlKey, value); break;
|
||||||
case DatHeaderField.Version: Version = value; break;
|
case DatHeaderField.Version: SetFieldValue<string?>(Models.Metadata.Header.VersionKey, value); break;
|
||||||
default: return false;
|
default: return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1177,7 +937,7 @@ namespace SabreTools.DatFiles
|
|||||||
/// <returns>String containing the new filename</returns>
|
/// <returns>String containing the new filename</returns>
|
||||||
private string CreateOutFileNamesHelper(string outDir, string extension, bool overwrite)
|
private string CreateOutFileNamesHelper(string outDir, string extension, bool overwrite)
|
||||||
{
|
{
|
||||||
string? filename = string.IsNullOrEmpty(FileName) ? Description : FileName;
|
string? filename = string.IsNullOrEmpty(FileName) ? GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey) : FileName;
|
||||||
|
|
||||||
// Strip off the extension if it's a holdover from the DAT
|
// Strip off the extension if it's a holdover from the DAT
|
||||||
if (Utilities.HasValidDatExtension(filename))
|
if (Utilities.HasValidDatExtension(filename))
|
||||||
|
|||||||
@@ -44,28 +44,43 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
if (cmp == null)
|
if (cmp == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Header.Name ??= cmp.Name;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey) == null)
|
||||||
Header.Description ??= cmp.Description;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, cmp.Name);
|
||||||
Header.RootDir ??= cmp.RootDir;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey) == null)
|
||||||
Header.Category ??= cmp.Category;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, cmp.Description);
|
||||||
Header.Version ??= cmp.Version;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.RootDirKey) == null)
|
||||||
Header.Date ??= cmp.Date;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.RootDirKey, cmp.RootDir);
|
||||||
Header.Author ??= cmp.Author;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.CategoryKey) == null)
|
||||||
Header.Homepage ??= cmp.Homepage;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.CategoryKey, cmp.Category);
|
||||||
Header.Url ??= cmp.Url;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.VersionKey) == null)
|
||||||
Header.Comment ??= cmp.Comment;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.VersionKey, cmp.Version);
|
||||||
Header.HeaderSkipper ??= cmp.Header;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.DateKey) == null)
|
||||||
Header.Type ??= cmp.Type;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.DateKey, cmp.Date);
|
||||||
if (Header.ForceMerging == MergingFlag.None)
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.AuthorKey) == null)
|
||||||
Header.ForceMerging = cmp.ForceMerging?.AsEnumValue<MergingFlag>() ?? MergingFlag.None;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.AuthorKey, cmp.Author);
|
||||||
if (Header.ForcePacking == PackingFlag.None)
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.HomepageKey) == null)
|
||||||
Header.ForcePacking = cmp.ForceZipping?.AsEnumValue<PackingFlag>() ?? PackingFlag.None;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.HomepageKey, cmp.Homepage);
|
||||||
if (Header.ForcePacking == PackingFlag.None)
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.UrlKey) == null)
|
||||||
Header.ForcePacking = cmp.ForcePacking?.AsEnumValue<PackingFlag>() ?? PackingFlag.None;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.UrlKey, cmp.Url);
|
||||||
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.CommentKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.CommentKey, cmp.Comment);
|
||||||
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.HeaderKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.HeaderKey, cmp.Header);
|
||||||
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.TypeKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.TypeKey, cmp.Type);
|
||||||
|
if (Header.GetFieldValue<MergingFlag>(Models.Metadata.Header.ForceMergingKey) == MergingFlag.None)
|
||||||
|
Header.SetFieldValue<MergingFlag>(Models.Metadata.Header.ForcePackingKey, cmp.ForceMerging?.AsEnumValue<MergingFlag>() ?? MergingFlag.None);
|
||||||
|
if (Header.GetFieldValue<PackingFlag>(Models.Metadata.Header.ForcePackingKey) == PackingFlag.None)
|
||||||
|
Header.SetFieldValue<PackingFlag>(Models.Metadata.Header.ForcePackingKey, cmp.ForceZipping?.AsEnumValue<PackingFlag>() ?? PackingFlag.None);
|
||||||
|
if (Header.GetFieldValue<PackingFlag>(Models.Metadata.Header.ForcePackingKey) == PackingFlag.None)
|
||||||
|
Header.SetFieldValue<PackingFlag>(Models.Metadata.Header.ForcePackingKey, cmp.ForcePacking?.AsEnumValue<PackingFlag>() ?? PackingFlag.None);
|
||||||
|
|
||||||
// Handle implied SuperDAT
|
// Handle implied SuperDAT
|
||||||
if (cmp.Name?.Contains(" - SuperDAT") == true && keep)
|
if (cmp.Name?.Contains(" - SuperDAT") == true && keep)
|
||||||
Header.Type ??= "SuperDAT";
|
{
|
||||||
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.TypeKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.TypeKey, "SuperDAT");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -184,24 +184,24 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
|
|
||||||
var clrMamePro = new Models.ClrMamePro.ClrMamePro
|
var clrMamePro = new Models.ClrMamePro.ClrMamePro
|
||||||
{
|
{
|
||||||
Name = Header.Name,
|
Name = Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey),
|
||||||
Description = Header.Description,
|
Description = Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey),
|
||||||
RootDir = Header.RootDir,
|
RootDir = Header.GetFieldValue<string?>(Models.Metadata.Header.RootDirKey),
|
||||||
Category = Header.Category,
|
Category = Header.GetFieldValue<string?>(Models.Metadata.Header.CategoryKey),
|
||||||
Version = Header.Version,
|
Version = Header.GetFieldValue<string?>(Models.Metadata.Header.VersionKey),
|
||||||
Date = Header.Date,
|
Date = Header.GetFieldValue<string?>(Models.Metadata.Header.DateKey),
|
||||||
Author = Header.Author,
|
Author = Header.GetFieldValue<string?>(Models.Metadata.Header.AuthorKey),
|
||||||
Homepage = Header.Homepage,
|
Homepage = Header.GetFieldValue<string?>(Models.Metadata.Header.HomepageKey),
|
||||||
Url = Header.Url,
|
Url = Header.GetFieldValue<string?>(Models.Metadata.Header.UrlKey),
|
||||||
Comment = Header.Comment,
|
Comment = Header.GetFieldValue<string?>(Models.Metadata.Header.CommentKey),
|
||||||
Header = Header.HeaderSkipper,
|
Header = Header.GetFieldValue<string?>(Models.Metadata.Header.HeaderKey),
|
||||||
Type = Header.Type,
|
Type = Header.GetFieldValue<string?>(Models.Metadata.Header.TypeKey),
|
||||||
};
|
};
|
||||||
|
|
||||||
if (Header.ForceMergingSpecified)
|
if (Header.GetFieldValue<MergingFlag>(Models.Metadata.Header.ForceMergingKey) != MergingFlag.None)
|
||||||
clrMamePro.ForceMerging = Header.ForceMerging.AsStringValue<MergingFlag>(useSecond: false);
|
clrMamePro.ForceMerging = Header.GetFieldValue<MergingFlag>(Models.Metadata.Header.ForceMergingKey).AsStringValue<MergingFlag>(useSecond: false);
|
||||||
if (Header.ForcePackingSpecified)
|
if (Header.GetFieldValue<PackingFlag>(Models.Metadata.Header.ForcePackingKey) != PackingFlag.None)
|
||||||
clrMamePro.ForcePacking = Header.ForcePacking.AsStringValue<PackingFlag>(useSecond: false);
|
clrMamePro.ForcePacking = Header.GetFieldValue<PackingFlag>(Models.Metadata.Header.ForcePackingKey).AsStringValue<PackingFlag>(useSecond: false);
|
||||||
|
|
||||||
return clrMamePro;
|
return clrMamePro;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,17 +42,27 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
if (doscenter == null)
|
if (doscenter == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Header.Name ??= doscenter.Name;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.AuthorKey) == null)
|
||||||
Header.Description ??= doscenter.Description;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.AuthorKey, doscenter.Author);
|
||||||
Header.Version ??= doscenter.Version;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.CommentKey) == null)
|
||||||
Header.Date ??= doscenter.Date;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.CommentKey, doscenter.Comment);
|
||||||
Header.Author ??= doscenter.Author;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.DateKey) == null)
|
||||||
Header.Homepage ??= doscenter.Homepage;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.DateKey, doscenter.Date);
|
||||||
Header.Comment ??= doscenter.Comment;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, doscenter.Description);
|
||||||
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.HomepageKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.HomepageKey, doscenter.Homepage);
|
||||||
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, doscenter.Name);
|
||||||
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.VersionKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.VersionKey, doscenter.Version);
|
||||||
|
|
||||||
// Handle implied SuperDAT
|
// Handle implied SuperDAT
|
||||||
if (doscenter.Name?.Contains(" - SuperDAT") == true && keep)
|
if (doscenter.Name?.Contains(" - SuperDAT") == true && keep)
|
||||||
Header.Type ??= "SuperDAT";
|
{
|
||||||
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.TypeKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.TypeKey, "SuperDAT");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -96,13 +96,13 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
|
|
||||||
var clrMamePro = new Models.DosCenter.DosCenter
|
var clrMamePro = new Models.DosCenter.DosCenter
|
||||||
{
|
{
|
||||||
Name = Header.Name,
|
Name = Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey),
|
||||||
Description = Header.Description,
|
Description = Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey),
|
||||||
Version = Header.Version,
|
Version = Header.GetFieldValue<string?>(Models.Metadata.Header.VersionKey),
|
||||||
Date = Header.Date,
|
Date = Header.GetFieldValue<string?>(Models.Metadata.Header.DateKey),
|
||||||
Author = Header.Author,
|
Author = Header.GetFieldValue<string?>(Models.Metadata.Header.AuthorKey),
|
||||||
Homepage = Header.Homepage,
|
Homepage = Header.GetFieldValue<string?>(Models.Metadata.Header.HomepageKey),
|
||||||
Comment = Header.Comment,
|
Comment = Header.GetFieldValue<string?>(Models.Metadata.Header.CommentKey),
|
||||||
};
|
};
|
||||||
|
|
||||||
return clrMamePro;
|
return clrMamePro;
|
||||||
|
|||||||
@@ -48,15 +48,23 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
if (mame == null)
|
if (mame == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Header.Name ??= mame.Build;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey) == null)
|
||||||
Header.Description ??= mame.Build;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, mame.Build);
|
||||||
Header.Build ??= mame.Build;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey) == null)
|
||||||
Header.Debug ??= mame.Debug.AsYesNo();
|
Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, mame.Build);
|
||||||
Header.MameConfig ??= mame.MameConfig;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.BuildKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.BuildKey, mame.Build);
|
||||||
|
if (Header.GetFieldValue<bool?>(Models.Metadata.Header.DebugKey) == null)
|
||||||
|
Header.SetFieldValue<bool?> (Models.Metadata.Header.DebugKey, mame.Debug.AsYesNo());
|
||||||
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.MameConfigKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.MameConfigKey, mame.MameConfig);
|
||||||
|
|
||||||
// Handle implied SuperDAT
|
// Handle implied SuperDAT
|
||||||
if (Header.Name?.Contains(" - SuperDAT") == true && keep)
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey)?.Contains(" - SuperDAT") == true && keep)
|
||||||
Header.Type ??= "SuperDAT";
|
{
|
||||||
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.TypeKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.TypeKey, "SuperDAT");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -212,9 +212,11 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
{
|
{
|
||||||
var datafile = new Models.Listxml.Mame
|
var datafile = new Models.Listxml.Mame
|
||||||
{
|
{
|
||||||
Build = Header.Name ?? Header.Description ?? Header.Build,
|
Build = Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey)
|
||||||
Debug = Header.Debug.FromYesNo(),
|
?? Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey)
|
||||||
MameConfig = Header.MameConfig,
|
?? Header.GetFieldValue<string?>(Models.Metadata.Header.BuildKey),
|
||||||
|
Debug = Header.GetFieldValue<bool?>(Models.Metadata.Header.DebugKey).FromYesNo(),
|
||||||
|
MameConfig = Header.GetFieldValue<string?>(Models.Metadata.Header.MameConfigKey),
|
||||||
|
|
||||||
Game = CreateGames(ignoreblanks)
|
Game = CreateGames(ignoreblanks)
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -44,8 +44,10 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
if (datafile == null)
|
if (datafile == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Header.Build ??= datafile.Build;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.BuildKey) == null)
|
||||||
Header.Debug ??= datafile.Debug.AsYesNo();
|
Header.SetFieldValue<string?>(Models.Metadata.Header.BuildKey, datafile.Build);
|
||||||
|
if (Header.GetFieldValue<bool?>(Models.Metadata.Header.DebugKey) == null)
|
||||||
|
Header.SetFieldValue<bool?>(Models.Metadata.Header.DebugKey, datafile.Debug.AsYesNo());
|
||||||
// SchemaLocation is specifically skipped
|
// SchemaLocation is specifically skipped
|
||||||
|
|
||||||
ConvertHeader(datafile.Header, keep);
|
ConvertHeader(datafile.Header, keep);
|
||||||
@@ -62,26 +64,42 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
if (header == null)
|
if (header == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Header.NoIntroID ??= header.Id;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.IdKey) == null)
|
||||||
Header.Name ??= header.Name;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.IdKey, header.Id);
|
||||||
Header.Description ??= header.Description;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey) == null)
|
||||||
Header.RootDir ??= header.RootDir;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, header.Name);
|
||||||
Header.Category ??= header.Category;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey) == null)
|
||||||
Header.Version ??= header.Version;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, header.Description);
|
||||||
Header.Date ??= header.Date;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.RootDirKey) == null)
|
||||||
Header.Author ??= header.Author;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.RootDirKey, header.RootDir);
|
||||||
Header.Email ??= header.Email;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.CategoryKey) == null)
|
||||||
Header.Homepage ??= header.Homepage;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.CategoryKey, header.Category);
|
||||||
Header.Url ??= header.Url;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.VersionKey) == null)
|
||||||
Header.Comment ??= header.Comment;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.VersionKey, header.Version);
|
||||||
Header.Type ??= header.Type;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.DateKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.DateKey, header.Date);
|
||||||
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.AuthorKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.AuthorKey, header.Author);
|
||||||
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.EmailKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.EmailKey, header.Email);
|
||||||
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.HomepageKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.HomepageKey, header.Homepage);
|
||||||
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.UrlKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.UrlKey, header.Url);
|
||||||
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.CommentKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.CommentKey, header.Comment);
|
||||||
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.TypeKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.TypeKey, header.Type);
|
||||||
|
|
||||||
ConvertSubheader(header.ClrMamePro);
|
ConvertSubheader(header.ClrMamePro);
|
||||||
ConvertSubheader(header.RomCenter);
|
ConvertSubheader(header.RomCenter);
|
||||||
|
|
||||||
// Handle implied SuperDAT
|
// Handle implied SuperDAT
|
||||||
if (header.Name?.Contains(" - SuperDAT") == true && keep)
|
if (header.Name?.Contains(" - SuperDAT") == true && keep)
|
||||||
Header.Type ??= "SuperDAT";
|
{
|
||||||
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.TypeKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.TypeKey, "SuperDAT");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -94,14 +112,14 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
if (clrMamePro == null)
|
if (clrMamePro == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Header.HeaderSkipper ??= clrMamePro.Header;
|
if (Header.GetFieldValue<MergingFlag>(Models.Metadata.Header.ForceMergingKey) == MergingFlag.None)
|
||||||
|
Header.SetFieldValue<MergingFlag>(Models.Metadata.Header.ForceMergingKey, clrMamePro.ForceMerging.AsEnumValue<MergingFlag>());
|
||||||
if (Header.ForceMerging == MergingFlag.None)
|
if (Header.GetFieldValue<NodumpFlag>(Models.Metadata.Header.ForceNodumpKey) == NodumpFlag.None)
|
||||||
Header.ForceMerging = clrMamePro.ForceMerging.AsEnumValue<MergingFlag>();
|
Header.SetFieldValue<NodumpFlag>(Models.Metadata.Header.ForceNodumpKey, clrMamePro.ForceNodump.AsEnumValue<NodumpFlag>());
|
||||||
if (Header.ForceNodump == NodumpFlag.None)
|
if (Header.GetFieldValue<PackingFlag>(Models.Metadata.Header.ForcePackingKey) == PackingFlag.None)
|
||||||
Header.ForceNodump = clrMamePro.ForceNodump.AsEnumValue<NodumpFlag>();
|
Header.SetFieldValue<PackingFlag>(Models.Metadata.Header.ForcePackingKey, clrMamePro.ForcePacking.AsEnumValue<PackingFlag>());
|
||||||
if (Header.ForcePacking == PackingFlag.None)
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.HeaderKey) == null)
|
||||||
Header.ForcePacking = clrMamePro.ForcePacking.AsEnumValue<PackingFlag>();
|
Header.SetFieldValue<string?>(Models.Metadata.Header.HeaderKey, clrMamePro.Header);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -114,18 +132,21 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
if (romCenter == null)
|
if (romCenter == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Header.System ??= romCenter.Plugin;
|
if (Header.GetFieldValue<MergingFlag>(Models.Metadata.Header.BiosModeKey) == MergingFlag.None)
|
||||||
|
Header.SetFieldValue<MergingFlag>(Models.Metadata.Header.BiosModeKey, romCenter.BiosMode.AsEnumValue<MergingFlag>());
|
||||||
|
if (Header.GetFieldValue<bool?>(Models.Metadata.Header.LockBiosModeKey) == null)
|
||||||
|
Header.SetFieldValue<bool?>(Models.Metadata.Header.LockBiosModeKey, romCenter.LockBiosMode.AsYesNo());
|
||||||
|
if (Header.GetFieldValue<bool?>(Models.Metadata.Header.LockRomModeKey) == null)
|
||||||
|
Header.SetFieldValue<bool?>(Models.Metadata.Header.LockRomModeKey, romCenter.LockRomMode.AsYesNo());
|
||||||
|
if (Header.GetFieldValue<bool?>(Models.Metadata.Header.LockSampleModeKey) == null)
|
||||||
|
Header.SetFieldValue<bool?>(Models.Metadata.Header.LockSampleModeKey, romCenter.LockSampleMode.AsYesNo());
|
||||||
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.PluginKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.PluginKey, romCenter.Plugin);
|
||||||
|
if (Header.GetFieldValue<MergingFlag>(Models.Metadata.Header.RomModeKey) == MergingFlag.None)
|
||||||
|
Header.SetFieldValue<MergingFlag>(Models.Metadata.Header.RomModeKey, romCenter.RomMode.AsEnumValue<MergingFlag>());
|
||||||
|
if (Header.GetFieldValue<MergingFlag>(Models.Metadata.Header.SampleModeKey) == MergingFlag.None)
|
||||||
|
Header.SetFieldValue<MergingFlag>(Models.Metadata.Header.SampleModeKey, romCenter.SampleMode.AsEnumValue<MergingFlag>());
|
||||||
|
|
||||||
if (Header.RomMode == MergingFlag.None)
|
|
||||||
Header.RomMode = romCenter.RomMode.AsEnumValue<MergingFlag>();
|
|
||||||
if (Header.BiosMode == MergingFlag.None)
|
|
||||||
Header.BiosMode = romCenter.BiosMode.AsEnumValue<MergingFlag>();
|
|
||||||
if (Header.SampleMode == MergingFlag.None)
|
|
||||||
Header.SampleMode = romCenter.SampleMode.AsEnumValue<MergingFlag>();
|
|
||||||
|
|
||||||
Header.LockRomMode ??= romCenter.LockRomMode.AsYesNo();
|
|
||||||
Header.LockBiosMode ??= romCenter.LockBiosMode.AsYesNo();
|
|
||||||
Header.LockSampleMode ??= romCenter.LockSampleMode.AsYesNo();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -137,7 +137,7 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
|
|
||||||
// Only write the doctype if we don't have No-Intro data
|
// Only write the doctype if we don't have No-Intro data
|
||||||
bool success;
|
bool success;
|
||||||
if (string.IsNullOrEmpty(Header.NoIntroID))
|
if (string.IsNullOrEmpty(Header.GetFieldValue<string?>(Models.Metadata.Header.IdKey)))
|
||||||
success = new Serialization.Files.Logiqx().SerializeToFileWithDocType(datafile, outfile);
|
success = new Serialization.Files.Logiqx().SerializeToFileWithDocType(datafile, outfile);
|
||||||
else
|
else
|
||||||
success = new Serialization.Files.Logiqx().Serialize(datafile, outfile);
|
success = new Serialization.Files.Logiqx().Serialize(datafile, outfile);
|
||||||
@@ -168,14 +168,14 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
{
|
{
|
||||||
var datafile = new Models.Logiqx.Datafile
|
var datafile = new Models.Logiqx.Datafile
|
||||||
{
|
{
|
||||||
Build = Header.Build,
|
Build = Header.GetFieldValue<string?>(Models.Metadata.Header.BuildKey),
|
||||||
Debug = Header.Debug.FromYesNo(),
|
Debug = Header.GetFieldValue<bool?>(Models.Metadata.Header.DebugKey).FromYesNo(),
|
||||||
|
|
||||||
Header = CreateHeader(),
|
Header = CreateHeader(),
|
||||||
Game = CreateGames(ignoreblanks)
|
Game = CreateGames(ignoreblanks)
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(Header.NoIntroID))
|
if (!string.IsNullOrEmpty(Header.GetFieldValue<string?>(Models.Metadata.Header.IdKey)))
|
||||||
datafile.SchemaLocation = "https://datomatic.no-intro.org/stuff https://datomatic.no-intro.org/stuff/schema_nointro_datfile_v3.xsd";
|
datafile.SchemaLocation = "https://datomatic.no-intro.org/stuff https://datomatic.no-intro.org/stuff/schema_nointro_datfile_v3.xsd";
|
||||||
|
|
||||||
return datafile;
|
return datafile;
|
||||||
@@ -192,19 +192,19 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
|
|
||||||
var header = new Models.Logiqx.Header
|
var header = new Models.Logiqx.Header
|
||||||
{
|
{
|
||||||
Id = Header.NoIntroID,
|
Id = Header.GetFieldValue<string?>(Models.Metadata.Header.IdKey),
|
||||||
Name = Header.Name,
|
Name = Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey),
|
||||||
Description = Header.Description,
|
Description = Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey),
|
||||||
RootDir = Header.RootDir,
|
RootDir = Header.GetFieldValue<string?>(Models.Metadata.Header.RootDirKey),
|
||||||
Category = Header.Category,
|
Category = Header.GetFieldValue<string?>(Models.Metadata.Header.CategoryKey),
|
||||||
Version = Header.Version,
|
Version = Header.GetFieldValue<string?>(Models.Metadata.Header.VersionKey),
|
||||||
Date = Header.Date,
|
Date = Header.GetFieldValue<string?>(Models.Metadata.Header.DateKey),
|
||||||
Author = Header.Author,
|
Author = Header.GetFieldValue<string?>(Models.Metadata.Header.AuthorKey),
|
||||||
Email = Header.Email,
|
Email = Header.GetFieldValue<string?>(Models.Metadata.Header.EmailKey),
|
||||||
Homepage = Header.Homepage,
|
Homepage = Header.GetFieldValue<string?>(Models.Metadata.Header.HomepageKey),
|
||||||
Url = Header.Url,
|
Url = Header.GetFieldValue<string?>(Models.Metadata.Header.UrlKey),
|
||||||
Comment = Header.Comment,
|
Comment = Header.GetFieldValue<string?>(Models.Metadata.Header.CommentKey),
|
||||||
Type = Header.Type,
|
Type = Header.GetFieldValue<string?>(Models.Metadata.Header.TypeKey),
|
||||||
|
|
||||||
ClrMamePro = CreateClrMamePro(),
|
ClrMamePro = CreateClrMamePro(),
|
||||||
RomCenter = CreateRomCenter(),
|
RomCenter = CreateRomCenter(),
|
||||||
@@ -219,25 +219,25 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
private Models.Logiqx.ClrMamePro? CreateClrMamePro()
|
private Models.Logiqx.ClrMamePro? CreateClrMamePro()
|
||||||
{
|
{
|
||||||
// If we don't have subheader values, we can't do anything
|
// If we don't have subheader values, we can't do anything
|
||||||
if (!Header.ForceMergingSpecified
|
if (Header.GetFieldValue<MergingFlag>(Models.Metadata.Header.ForceMergingKey) == MergingFlag.None
|
||||||
&& !Header.ForceNodumpSpecified
|
&& Header.GetFieldValue<NodumpFlag>(Models.Metadata.Header.ForceNodumpKey) == NodumpFlag.None
|
||||||
&& !Header.ForcePackingSpecified
|
&& Header.GetFieldValue<PackingFlag>(Models.Metadata.Header.ForcePackingKey) == PackingFlag.None
|
||||||
&& string.IsNullOrEmpty(Header.HeaderSkipper))
|
&& string.IsNullOrEmpty(Header.GetFieldValue<string?>(Models.Metadata.Header.HeaderKey)))
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
var subheader = new Models.Logiqx.ClrMamePro
|
var subheader = new Models.Logiqx.ClrMamePro
|
||||||
{
|
{
|
||||||
Header = Header.HeaderSkipper,
|
Header = Header.GetFieldValue<string?>(Models.Metadata.Header.HeaderKey),
|
||||||
};
|
};
|
||||||
|
|
||||||
if (Header.ForceMergingSpecified)
|
if (Header.GetFieldValue<MergingFlag>(Models.Metadata.Header.ForceMergingKey) != MergingFlag.None)
|
||||||
subheader.ForceMerging = Header.ForceMerging.AsStringValue<MergingFlag>(useSecond: false);
|
subheader.ForceMerging = Header.GetFieldValue<MergingFlag>(Models.Metadata.Header.ForceMergingKey).AsStringValue<MergingFlag>(useSecond: false);
|
||||||
if (Header.ForceNodumpSpecified)
|
if (Header.GetFieldValue<NodumpFlag>(Models.Metadata.Header.ForceNodumpKey) != NodumpFlag.None)
|
||||||
subheader.ForceNodump = Header.ForceNodump.AsStringValue<NodumpFlag>();
|
subheader.ForceNodump = Header.GetFieldValue<NodumpFlag>(Models.Metadata.Header.ForceNodumpKey).AsStringValue<NodumpFlag>();
|
||||||
if (Header.ForcePackingSpecified)
|
if (Header.GetFieldValue<PackingFlag>(Models.Metadata.Header.ForcePackingKey) != PackingFlag.None)
|
||||||
subheader.ForcePacking = Header.ForcePacking.AsStringValue<PackingFlag>(useSecond: false);
|
subheader.ForcePacking = Header.GetFieldValue<PackingFlag>(Models.Metadata.Header.ForcePackingKey).AsStringValue<PackingFlag>(useSecond: false);
|
||||||
|
|
||||||
return subheader;
|
return subheader;
|
||||||
}
|
}
|
||||||
@@ -248,35 +248,35 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
private Models.Logiqx.RomCenter? CreateRomCenter()
|
private Models.Logiqx.RomCenter? CreateRomCenter()
|
||||||
{
|
{
|
||||||
// If we don't have subheader values, we can't do anything
|
// If we don't have subheader values, we can't do anything
|
||||||
if (string.IsNullOrEmpty(Header.System)
|
if (string.IsNullOrEmpty(Header.GetFieldValue<string?>(Models.Metadata.Header.SystemKey))
|
||||||
&& !Header.RomModeSpecified
|
&& Header.GetFieldValue<MergingFlag>(Models.Metadata.Header.BiosModeKey) == MergingFlag.None
|
||||||
&& !Header.BiosModeSpecified
|
&& Header.GetFieldValue<bool?>(Models.Metadata.Header.LockBiosModeKey) == null
|
||||||
&& !Header.SampleModeSpecified
|
&& Header.GetFieldValue<bool?>(Models.Metadata.Header.LockRomModeKey) == null
|
||||||
&& !Header.LockRomModeSpecified
|
&& Header.GetFieldValue<bool?>(Models.Metadata.Header.LockSampleModeKey) == null
|
||||||
&& !Header.LockBiosModeSpecified
|
&& Header.GetFieldValue<MergingFlag>(Models.Metadata.Header.RomModeKey) == MergingFlag.None
|
||||||
&& !Header.LockSampleModeSpecified)
|
&& Header.GetFieldValue<MergingFlag>(Models.Metadata.Header.SampleModeKey) == MergingFlag.None)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
var subheader = new Models.Logiqx.RomCenter
|
var subheader = new Models.Logiqx.RomCenter
|
||||||
{
|
{
|
||||||
Plugin = Header.System,
|
Plugin = Header.GetFieldValue<string?>(Models.Metadata.Header.PluginKey),
|
||||||
};
|
};
|
||||||
|
|
||||||
if (Header.RomModeSpecified)
|
if (Header.GetFieldValue<MergingFlag>(Models.Metadata.Header.RomModeKey) != MergingFlag.None)
|
||||||
subheader.RomMode = Header.RomMode.AsStringValue<MergingFlag>(useSecond: true);
|
subheader.RomMode = Header.GetFieldValue<MergingFlag>(Models.Metadata.Header.RomModeKey).AsStringValue<MergingFlag>(useSecond: true);
|
||||||
if (Header.BiosModeSpecified)
|
if (Header.GetFieldValue<MergingFlag>(Models.Metadata.Header.BiosModeKey) != MergingFlag.None)
|
||||||
subheader.BiosMode = Header.BiosMode.AsStringValue<MergingFlag>(useSecond: true);
|
subheader.BiosMode = Header.GetFieldValue<MergingFlag>(Models.Metadata.Header.BiosModeKey).AsStringValue<MergingFlag>(useSecond: true);
|
||||||
if (Header.SampleModeSpecified)
|
if (Header.GetFieldValue<MergingFlag>(Models.Metadata.Header.SampleModeKey) != MergingFlag.None)
|
||||||
subheader.SampleMode = Header.SampleMode.AsStringValue<MergingFlag>(useSecond: true);
|
subheader.SampleMode = Header.GetFieldValue<MergingFlag>(Models.Metadata.Header.SampleModeKey).AsStringValue<MergingFlag>(useSecond: true);
|
||||||
|
|
||||||
if (Header.LockRomModeSpecified)
|
if (Header.GetFieldValue<bool?>(Models.Metadata.Header.LockRomModeKey) != null)
|
||||||
subheader.LockRomMode = Header.LockRomMode.FromYesNo();
|
subheader.LockRomMode = Header.GetFieldValue<bool?>(Models.Metadata.Header.LockRomModeKey).FromYesNo();
|
||||||
if (Header.LockBiosModeSpecified)
|
if (Header.GetFieldValue<bool?>(Models.Metadata.Header.LockBiosModeKey) != null)
|
||||||
subheader.LockBiosMode = Header.LockBiosMode.FromYesNo();
|
subheader.LockBiosMode = Header.GetFieldValue<bool?>(Models.Metadata.Header.LockBiosModeKey).FromYesNo();
|
||||||
if (Header.LockSampleModeSpecified)
|
if (Header.GetFieldValue<bool?>(Models.Metadata.Header.LockSampleModeKey) != null)
|
||||||
subheader.LockSampleMode = Header.LockSampleMode.FromYesNo();
|
subheader.LockSampleMode = Header.GetFieldValue<bool?>(Models.Metadata.Header.LockSampleModeKey).FromYesNo();
|
||||||
|
|
||||||
return subheader;
|
return subheader;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
using SabreTools.Core.Tools;
|
using SabreTools.Core.Tools;
|
||||||
|
|
||||||
namespace SabreTools.DatFiles.Formats
|
namespace SabreTools.DatFiles.Formats
|
||||||
@@ -63,21 +64,24 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
if (config == null)
|
if (config == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Header.Name ??= config.DatName;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, config.DatName);
|
||||||
//Header.ImFolder ??= config.ImFolder; // TODO: Add to internal model
|
Header.SetFieldValue<string?>(Models.Metadata.Header.DatVersionKey, config.DatVersion);
|
||||||
Header.Version = config.DatVersion;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.ImFolderKey, config.ImFolder);
|
||||||
Header.System = config.System;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.RomTitleKey, config.RomTitle);
|
||||||
Header.ScreenshotsWidth = config.ScreenshotsWidth;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.ScreenshotsHeightKey, config.ScreenshotsHeight);
|
||||||
Header.ScreenshotsHeight = config.ScreenshotsHeight;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.ScreenshotsWidthKey, config.ScreenshotsWidth);
|
||||||
ConvertInfos(config.Infos);
|
Header.SetFieldValue<string?>(Models.Metadata.Header.SystemKey, config.System);
|
||||||
ConvertCanOpen(config.CanOpen);
|
ConvertCanOpen(config.CanOpen);
|
||||||
|
ConvertInfos(config.Infos);
|
||||||
ConvertNewDat(config.NewDat);
|
ConvertNewDat(config.NewDat);
|
||||||
ConvertSearch(config.Search);
|
ConvertSearch(config.Search);
|
||||||
Header.RomTitle = config.RomTitle;
|
|
||||||
|
|
||||||
// Handle implied SuperDAT
|
// Handle implied SuperDAT
|
||||||
if (config.DatName?.Contains(" - SuperDAT") == true && keep)
|
if (config.DatName?.Contains(" - SuperDAT") == true && keep)
|
||||||
Header.Type ??= "SuperDAT";
|
{
|
||||||
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.TypeKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.TypeKey, "SuperDAT");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -223,7 +227,7 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Header.Infos = offlineListInfos;
|
Header.SetFieldValue<OfflineListInfo[]?>(Models.Metadata.Header.InfosKey, [.. offlineListInfos]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -236,7 +240,7 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
if (canOpen?.Extension == null)
|
if (canOpen?.Extension == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Header.CanOpen = new List<string>(canOpen.Extension);
|
Header.SetFieldValue<string[]?>(Models.Metadata.Header.CanOpenKey, canOpen.Extension);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -249,9 +253,9 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
if (newDat == null)
|
if (newDat == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Header.Url = newDat.DatVersionUrl;
|
Header.SetFieldValue<string?>("DATVERSIONURL", newDat.DatVersionUrl);
|
||||||
//Header.DatUrl = newDat.DatUrl; // TODO: Add to internal model
|
//Header.SetFieldValue<Models.OfflineList.DatUrl?>("DATURL", newDat.DatUrl); // TODO: Add to internal model
|
||||||
//Header.ImUrl = newDat.ImUrl; // TODO: Add to internal model
|
Header.SetFieldValue<string?>("IMURL", newDat.DatVersionUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -97,17 +97,17 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
|
|
||||||
var configuration = new Models.OfflineList.Configuration
|
var configuration = new Models.OfflineList.Configuration
|
||||||
{
|
{
|
||||||
DatName = Header.Name,
|
DatName = Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey),
|
||||||
//ImFolder = Header.ImFolder; // TODO: Add to internal model
|
ImFolder = Header.GetFieldValue<string?>(Models.Metadata.Header.ImFolderKey),
|
||||||
DatVersion = Header.Version,
|
DatVersion = Header.GetFieldValue<string?>(Models.Metadata.Header.DatVersionKey),
|
||||||
System = Header.System,
|
System = Header.GetFieldValue<string?>(Models.Metadata.Header.SystemKey),
|
||||||
ScreenshotsWidth = Header.ScreenshotsWidth,
|
ScreenshotsWidth = Header.GetFieldValue<string?>(Models.Metadata.Header.ScreenshotsWidthKey),
|
||||||
ScreenshotsHeight = Header.ScreenshotsHeight,
|
ScreenshotsHeight = Header.GetFieldValue<string?>(Models.Metadata.Header.ScreenshotsHeightKey),
|
||||||
Infos = CreateInfos(),
|
Infos = CreateInfos(),
|
||||||
CanOpen = CreateCanOpen(),
|
CanOpen = CreateCanOpen(),
|
||||||
NewDat = CreateNewDat(),
|
NewDat = CreateNewDat(),
|
||||||
Search = CreateSearch(),
|
Search = CreateSearch(),
|
||||||
RomTitle = Header.RomTitle,
|
RomTitle = Header.GetFieldValue<string?>(Models.Metadata.Header.RomTitleKey),
|
||||||
};
|
};
|
||||||
|
|
||||||
return configuration;
|
return configuration;
|
||||||
@@ -119,11 +119,11 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
private Models.OfflineList.Infos? CreateInfos()
|
private Models.OfflineList.Infos? CreateInfos()
|
||||||
{
|
{
|
||||||
// If we don't have infos, we can't do anything
|
// If we don't have infos, we can't do anything
|
||||||
if (!Header.InfosSpecified || Header.Infos == null)
|
if (!Header.InfosSpecified)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
var infos = new Models.OfflineList.Infos();
|
var infos = new Models.OfflineList.Infos();
|
||||||
foreach (var info in Header.Infos)
|
foreach (var info in Header.GetFieldValue<OfflineListInfo[]?>(Models.Metadata.Header.InfosKey)!)
|
||||||
{
|
{
|
||||||
switch (info.Name)
|
switch (info.Name)
|
||||||
{
|
{
|
||||||
@@ -255,12 +255,12 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
private Models.OfflineList.CanOpen? CreateCanOpen()
|
private Models.OfflineList.CanOpen? CreateCanOpen()
|
||||||
{
|
{
|
||||||
// If we don't have a canopen, we can't do anything
|
// If we don't have a canopen, we can't do anything
|
||||||
if (!Header.CanOpenSpecified || Header.CanOpen == null)
|
if (!Header.CanOpenSpecified || Header.GetFieldValue<string[]?>(Models.Metadata.Header.CanOpenKey) == null)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
var canOpen = new Models.OfflineList.CanOpen
|
var canOpen = new Models.OfflineList.CanOpen
|
||||||
{
|
{
|
||||||
Extension = [.. Header.CanOpen],
|
Extension = [.. Header.GetFieldValue<string[]?>(Models.Metadata.Header.CanOpenKey)],
|
||||||
};
|
};
|
||||||
|
|
||||||
return canOpen;
|
return canOpen;
|
||||||
@@ -277,9 +277,9 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
|
|
||||||
var newDat = new Models.OfflineList.NewDat
|
var newDat = new Models.OfflineList.NewDat
|
||||||
{
|
{
|
||||||
DatVersionUrl = Header.Url,
|
DatVersionUrl = Header.GetFieldValue<string?>("DATVERSIONURL"),
|
||||||
//DatUrl = Header.DatUrl; // TODO: Add to internal model
|
//DatUrl = Header.GetFieldValue<Models.OfflineList.DatUrl?>("DATURL"); // TODO: Add to internal model
|
||||||
//ImUrl = Header.ImUrl; // TODO: Add to internal model
|
ImUrl = Header.GetFieldValue<string?>("IMURL"),
|
||||||
};
|
};
|
||||||
|
|
||||||
return newDat;
|
return newDat;
|
||||||
|
|||||||
@@ -45,9 +45,12 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
if (softwaredb == null)
|
if (softwaredb == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Header.Name ??= "openMSX Software List";
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey) == null)
|
||||||
Header.Description ??= Header.Name;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, "openMSX Software List");
|
||||||
Header.Date ??= softwaredb.Timestamp;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey));
|
||||||
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.DateKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.DateKey, softwaredb.Timestamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
{
|
{
|
||||||
var softwaredb = new Models.OpenMSX.SoftwareDb
|
var softwaredb = new Models.OpenMSX.SoftwareDb
|
||||||
{
|
{
|
||||||
Timestamp = Header.Date,
|
Timestamp = Header.GetFieldValue<string?>(Models.Metadata.Header.DateKey),
|
||||||
Software = CreateSoftwares(ignoreblanks)
|
Software = CreateSoftwares(ignoreblanks)
|
||||||
};
|
};
|
||||||
return softwaredb;
|
return softwaredb;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using SabreTools.Core;
|
using SabreTools.Core;
|
||||||
|
using SabreTools.Models.RomCenter;
|
||||||
|
|
||||||
namespace SabreTools.DatFiles.Formats
|
namespace SabreTools.DatFiles.Formats
|
||||||
{
|
{
|
||||||
@@ -48,13 +49,20 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
if (credits == null)
|
if (credits == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Header.Author ??= credits.Author;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.AuthorKey) == null)
|
||||||
Header.Version ??= credits.Version;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.AuthorKey, credits.Author);
|
||||||
Header.Email ??= credits.Email;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.CommentKey) == null)
|
||||||
Header.Homepage ??= credits.Homepage;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.CommentKey, credits.Comment);
|
||||||
Header.Url ??= credits.Url;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.DateKey) == null)
|
||||||
Header.Date ??= credits.Date;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.DateKey, credits.Date);
|
||||||
Header.Comment ??= credits.Comment;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.EmailKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.EmailKey, credits.Email);
|
||||||
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.HomepageKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.HomepageKey, credits.Homepage);
|
||||||
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.UrlKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.UrlKey, credits.Url);
|
||||||
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.VersionKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.VersionKey, credits.Version);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -67,12 +75,14 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
if (dat == null)
|
if (dat == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Header.RomCenterVersion ??= dat.Version;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.DatVersionKey) == null)
|
||||||
Header.System ??= dat.Plugin;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.DatVersionKey, dat.Version);
|
||||||
if (Header.ForceMerging == MergingFlag.None && dat.Split == "1")
|
if (Header.GetFieldValue<MergingFlag>(Models.Metadata.Header.ForceMergingKey) == MergingFlag.None && dat.Split == "1")
|
||||||
Header.ForceMerging = MergingFlag.Split;
|
Header.SetFieldValue<MergingFlag>(Models.Metadata.Header.ForceMergingKey, MergingFlag.Split);
|
||||||
if (Header.ForceMerging == MergingFlag.None && dat.Merge == "1")
|
if (Header.GetFieldValue<MergingFlag>(Models.Metadata.Header.ForceMergingKey) == MergingFlag.None && dat.Merge == "1")
|
||||||
Header.ForceMerging = MergingFlag.Merged;
|
Header.SetFieldValue<MergingFlag>(Models.Metadata.Header.ForceMergingKey, MergingFlag.Merged);
|
||||||
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.SystemKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.SystemKey, dat.Plugin);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -85,8 +95,10 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
if (emulator == null)
|
if (emulator == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Header.Name ??= emulator.RefName;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.EmulatorVersionKey) == null)
|
||||||
Header.Description ??= emulator.Version;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.EmulatorVersionKey, emulator.Version);
|
||||||
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.RefNameKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.RefNameKey, emulator.RefName);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -92,13 +92,13 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
{
|
{
|
||||||
var credits = new Models.RomCenter.Credits
|
var credits = new Models.RomCenter.Credits
|
||||||
{
|
{
|
||||||
Author = Header.Author,
|
Author = Header.GetFieldValue<string?>(Models.Metadata.Header.AuthorKey),
|
||||||
Version = Header.Version,
|
Version = Header.GetFieldValue<string?>(Models.Metadata.Header.VersionKey),
|
||||||
Email = Header.Email,
|
Email = Header.GetFieldValue<string?>(Models.Metadata.Header.EmailKey),
|
||||||
Homepage = Header.Homepage,
|
Homepage = Header.GetFieldValue<string?>(Models.Metadata.Header.HomepageKey),
|
||||||
Url = Header.Url,
|
Url = Header.GetFieldValue<string?>(Models.Metadata.Header.UrlKey),
|
||||||
Date = Header.Date,
|
Date = Header.GetFieldValue<string?>(Models.Metadata.Header.DateKey),
|
||||||
Comment = Header.Comment,
|
Comment = Header.GetFieldValue<string?>(Models.Metadata.Header.CommentKey),
|
||||||
};
|
};
|
||||||
return credits;
|
return credits;
|
||||||
}
|
}
|
||||||
@@ -110,10 +110,10 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
{
|
{
|
||||||
var dat = new Models.RomCenter.Dat
|
var dat = new Models.RomCenter.Dat
|
||||||
{
|
{
|
||||||
Version = Header.RomCenterVersion,
|
Version = Header.GetFieldValue<string?>(Models.Metadata.Header.DatVersionKey),
|
||||||
Plugin = Header.System,
|
Plugin = Header.GetFieldValue<string?>(Models.Metadata.Header.SystemKey),
|
||||||
Split = (Header.ForceMerging == MergingFlag.Split ? "1" : "0"),
|
Split = (Header.GetFieldValue<MergingFlag>(Models.Metadata.Header.ForceMergingKey) == MergingFlag.Split ? "1" : "0"),
|
||||||
Merge = (Header.ForceMerging == MergingFlag.Merged || Header.ForceMerging == MergingFlag.FullMerged ? "1" : "0"),
|
Merge = (Header.GetFieldValue<MergingFlag>(Models.Metadata.Header.ForceMergingKey) == MergingFlag.Merged || Header.GetFieldValue<MergingFlag>(Models.Metadata.Header.ForceMergingKey) == MergingFlag.FullMerged ? "1" : "0"),
|
||||||
};
|
};
|
||||||
return dat;
|
return dat;
|
||||||
}
|
}
|
||||||
@@ -125,8 +125,8 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
{
|
{
|
||||||
var emulator = new Models.RomCenter.Emulator
|
var emulator = new Models.RomCenter.Emulator
|
||||||
{
|
{
|
||||||
RefName = Header.Name,
|
RefName = Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey),
|
||||||
Version = Header.Description,
|
Version = Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey),
|
||||||
};
|
};
|
||||||
return emulator;
|
return emulator;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -160,8 +160,8 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
var row = new Models.SeparatedValue.Row
|
var row = new Models.SeparatedValue.Row
|
||||||
{
|
{
|
||||||
FileName = Header.FileName,
|
FileName = Header.FileName,
|
||||||
InternalName = Header.Name,
|
InternalName = Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey),
|
||||||
Description = Header.Description,
|
Description = Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey),
|
||||||
GameName = disk.Machine.GetFieldValue<string?>(Models.Metadata.Machine.NameKey),
|
GameName = disk.Machine.GetFieldValue<string?>(Models.Metadata.Machine.NameKey),
|
||||||
GameDescription = disk.Machine.GetFieldValue<string?>(Models.Metadata.Machine.DescriptionKey),
|
GameDescription = disk.Machine.GetFieldValue<string?>(Models.Metadata.Machine.DescriptionKey),
|
||||||
Type = disk.GetFieldValue<ItemType>(Models.Metadata.Disk.TypeKey).AsStringValue<ItemType>(),
|
Type = disk.GetFieldValue<ItemType>(Models.Metadata.Disk.TypeKey).AsStringValue<ItemType>(),
|
||||||
@@ -188,8 +188,8 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
var row = new Models.SeparatedValue.Row
|
var row = new Models.SeparatedValue.Row
|
||||||
{
|
{
|
||||||
FileName = Header.FileName,
|
FileName = Header.FileName,
|
||||||
InternalName = Header.Name,
|
InternalName = Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey),
|
||||||
Description = Header.Description,
|
Description = Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey),
|
||||||
GameName = media.Machine.GetFieldValue<string?>(Models.Metadata.Machine.NameKey),
|
GameName = media.Machine.GetFieldValue<string?>(Models.Metadata.Machine.NameKey),
|
||||||
GameDescription = media.Machine.GetFieldValue<string?>(Models.Metadata.Machine.DescriptionKey),
|
GameDescription = media.Machine.GetFieldValue<string?>(Models.Metadata.Machine.DescriptionKey),
|
||||||
Type = media.ItemType.AsStringValue<ItemType>(),
|
Type = media.ItemType.AsStringValue<ItemType>(),
|
||||||
@@ -216,8 +216,8 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
var row = new Models.SeparatedValue.Row
|
var row = new Models.SeparatedValue.Row
|
||||||
{
|
{
|
||||||
FileName = Header.FileName,
|
FileName = Header.FileName,
|
||||||
InternalName = Header.Name,
|
InternalName = Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey),
|
||||||
Description = Header.Description,
|
Description = Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey),
|
||||||
GameName = rom.Machine.GetFieldValue<string?>(Models.Metadata.Machine.NameKey),
|
GameName = rom.Machine.GetFieldValue<string?>(Models.Metadata.Machine.NameKey),
|
||||||
GameDescription = rom.Machine.GetFieldValue<string?>(Models.Metadata.Machine.DescriptionKey),
|
GameDescription = rom.Machine.GetFieldValue<string?>(Models.Metadata.Machine.DescriptionKey),
|
||||||
Type = rom.ItemType.AsStringValue<ItemType>(),
|
Type = rom.ItemType.AsStringValue<ItemType>(),
|
||||||
|
|||||||
@@ -47,13 +47,19 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
if (softwarelist == null)
|
if (softwarelist == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Header.Name ??= softwarelist.Name;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey) == null)
|
||||||
Header.Description ??= softwarelist.Description;
|
Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, softwarelist.Name);
|
||||||
Header.Comment ??= softwarelist.Notes;
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, softwarelist.Description);
|
||||||
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.CommentKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.CommentKey, softwarelist.Notes);
|
||||||
|
|
||||||
// Handle implied SuperDAT
|
// Handle implied SuperDAT
|
||||||
if (Header.Name?.Contains(" - SuperDAT") == true && keep)
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey)?.Contains(" - SuperDAT") == true && keep)
|
||||||
Header.Type ??= "SuperDAT";
|
{
|
||||||
|
if (Header.GetFieldValue<string?>(Models.Metadata.Header.TypeKey) == null)
|
||||||
|
Header.SetFieldValue<string?>(Models.Metadata.Header.TypeKey, "SuperDAT");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -166,9 +166,9 @@ namespace SabreTools.DatFiles.Formats
|
|||||||
{
|
{
|
||||||
var softwarelist = new Models.SoftwareList.SoftwareList
|
var softwarelist = new Models.SoftwareList.SoftwareList
|
||||||
{
|
{
|
||||||
Name = Header.Name,
|
Name = Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey),
|
||||||
Description = Header.Description,
|
Description = Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey),
|
||||||
Notes = Header.Comment,
|
Notes = Header.GetFieldValue<string?>(Models.Metadata.Header.CommentKey),
|
||||||
Software = CreateSoftware(ignoreblanks),
|
Software = CreateSoftware(ignoreblanks),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -381,17 +381,17 @@ namespace SabreTools.DatTools
|
|||||||
if (string.IsNullOrEmpty(datFile.Header.FileName))
|
if (string.IsNullOrEmpty(datFile.Header.FileName))
|
||||||
datFile.Header.FileName = "All DATs";
|
datFile.Header.FileName = "All DATs";
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(datFile.Header.Name))
|
if (string.IsNullOrEmpty(datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey)))
|
||||||
datFile.Header.Name = "datFile.All DATs";
|
datFile.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, "datFile.All DATs");
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(datFile.Header.Description))
|
if (string.IsNullOrEmpty(datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey)))
|
||||||
datFile.Header.Description = "datFile.All DATs";
|
datFile.Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, "datFile.All DATs");
|
||||||
|
|
||||||
string post = " (Duplicates)";
|
string post = " (Duplicates)";
|
||||||
DatFile dupeData = DatFile.Create(datFile.Header);
|
DatFile dupeData = DatFile.Create(datFile.Header);
|
||||||
dupeData.Header.FileName += post;
|
dupeData.Header.FileName += post;
|
||||||
dupeData.Header.Name += post;
|
dupeData.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, dupeData.Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey) + post);
|
||||||
dupeData.Header.Description += post;
|
dupeData.Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, dupeData.Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey) + post);
|
||||||
dupeData.Items = [];
|
dupeData.Items = [];
|
||||||
|
|
||||||
watch.Stop();
|
watch.Stop();
|
||||||
@@ -470,11 +470,11 @@ namespace SabreTools.DatTools
|
|||||||
if (string.IsNullOrEmpty(datFile.Header.FileName))
|
if (string.IsNullOrEmpty(datFile.Header.FileName))
|
||||||
datFile.Header.FileName = "All DATs";
|
datFile.Header.FileName = "All DATs";
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(datFile.Header.Name))
|
if (string.IsNullOrEmpty(datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey)))
|
||||||
datFile.Header.Name = "All DATs";
|
datFile.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, "All DATs");
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(datFile.Header.Description))
|
if (string.IsNullOrEmpty(datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey)))
|
||||||
datFile.Header.Description = "All DATs";
|
datFile.Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, "All DATs");
|
||||||
|
|
||||||
// Loop through each of the inputs and get or create a new DatData object
|
// Loop through each of the inputs and get or create a new DatData object
|
||||||
DatFile[] outDatsArray = new DatFile[inputs.Count];
|
DatFile[] outDatsArray = new DatFile[inputs.Count];
|
||||||
@@ -490,8 +490,8 @@ namespace SabreTools.DatTools
|
|||||||
string innerpost = $" ({j} - {inputs[j].GetNormalizedFileName(true)} Only)";
|
string innerpost = $" ({j} - {inputs[j].GetNormalizedFileName(true)} Only)";
|
||||||
DatFile diffData = DatFile.Create(datFile.Header);
|
DatFile diffData = DatFile.Create(datFile.Header);
|
||||||
diffData.Header.FileName += innerpost;
|
diffData.Header.FileName += innerpost;
|
||||||
diffData.Header.Name += innerpost;
|
diffData.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, diffData.Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey) + innerpost);
|
||||||
diffData.Header.Description += innerpost;
|
diffData.Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, diffData.Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey) + innerpost);
|
||||||
diffData.Items = [];
|
diffData.Items = [];
|
||||||
outDatsArray[j] = diffData;
|
outDatsArray[j] = diffData;
|
||||||
#if NET40_OR_GREATER || NETCOREAPP
|
#if NET40_OR_GREATER || NETCOREAPP
|
||||||
@@ -574,17 +574,17 @@ namespace SabreTools.DatTools
|
|||||||
if (string.IsNullOrEmpty(datFile.Header.FileName))
|
if (string.IsNullOrEmpty(datFile.Header.FileName))
|
||||||
datFile.Header.FileName = "All DATs";
|
datFile.Header.FileName = "All DATs";
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(datFile.Header.Name))
|
if (string.IsNullOrEmpty(datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey)))
|
||||||
datFile.Header.Name = "All DATs";
|
datFile.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, "All DATs");
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(datFile.Header.Description))
|
if (string.IsNullOrEmpty(datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey)))
|
||||||
datFile.Header.Description = "All DATs";
|
datFile.Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, "All DATs");
|
||||||
|
|
||||||
string post = " (No Duplicates)";
|
string post = " (No Duplicates)";
|
||||||
DatFile outerDiffData = DatFile.Create(datFile.Header);
|
DatFile outerDiffData = DatFile.Create(datFile.Header);
|
||||||
outerDiffData.Header.FileName += post;
|
outerDiffData.Header.FileName += post;
|
||||||
outerDiffData.Header.Name += post;
|
outerDiffData.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, outerDiffData.Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey) + post);
|
||||||
outerDiffData.Header.Description += post;
|
outerDiffData.Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, outerDiffData.Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey) + post);
|
||||||
outerDiffData.Items = [];
|
outerDiffData.Items = [];
|
||||||
|
|
||||||
watch.Stop();
|
watch.Stop();
|
||||||
|
|||||||
@@ -335,7 +335,7 @@ namespace SabreTools.DatTools
|
|||||||
string romname = string.Empty;
|
string romname = string.Empty;
|
||||||
|
|
||||||
// If we have a SuperDAT, we want anything that's not the base path as the game, and the file as the rom
|
// If we have a SuperDAT, we want anything that's not the base path as the game, and the file as the rom
|
||||||
if (datFile.Header.Type == "SuperDAT")
|
if (datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.TypeKey) == "SuperDAT")
|
||||||
{
|
{
|
||||||
if (basePath != null)
|
if (basePath != null)
|
||||||
gamename = fulldir.Remove(0, basePath.Length + 1);
|
gamename = fulldir.Remove(0, basePath.Length + 1);
|
||||||
@@ -384,7 +384,7 @@ namespace SabreTools.DatTools
|
|||||||
private static void ProcessFile(DatFile datFile, string item, string? basePath, HashType[] hashes, TreatAsFile asFiles)
|
private static void ProcessFile(DatFile datFile, string item, string? basePath, HashType[] hashes, TreatAsFile asFiles)
|
||||||
{
|
{
|
||||||
logger.Verbose($"'{Path.GetFileName(item)}' treated like a file");
|
logger.Verbose($"'{Path.GetFileName(item)}' treated like a file");
|
||||||
BaseFile? baseFile = BaseFile.GetInfo(item, header: datFile.Header.HeaderSkipper, hashes: hashes, asFiles: asFiles);
|
BaseFile? baseFile = BaseFile.GetInfo(item, header: datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.HeaderKey), hashes: hashes, asFiles: asFiles);
|
||||||
DatItem? datItem = DatItem.Create(baseFile);
|
DatItem? datItem = DatItem.Create(baseFile);
|
||||||
if (datItem != null)
|
if (datItem != null)
|
||||||
ProcessFileHelper(datFile, item, datItem, basePath, string.Empty);
|
ProcessFileHelper(datFile, item, datItem, basePath, string.Empty);
|
||||||
@@ -447,7 +447,7 @@ namespace SabreTools.DatTools
|
|||||||
if (string.IsNullOrEmpty(parent))
|
if (string.IsNullOrEmpty(parent))
|
||||||
{
|
{
|
||||||
// If we have a SuperDAT, we want anything that's not the base path as the game, and the file as the rom
|
// If we have a SuperDAT, we want anything that's not the base path as the game, and the file as the rom
|
||||||
if (datFile.Header.Type == "SuperDAT")
|
if (datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.TypeKey) == "SuperDAT")
|
||||||
{
|
{
|
||||||
machineName = Path.GetDirectoryName(item.Remove(0, basepath?.Length ?? 0));
|
machineName = Path.GetDirectoryName(item.Remove(0, basepath?.Length ?? 0));
|
||||||
itemName = Path.GetFileName(item);
|
itemName = Path.GetFileName(item);
|
||||||
@@ -468,7 +468,7 @@ namespace SabreTools.DatTools
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// If we have a SuperDAT, we want the archive name as the game, and the file as everything else (?)
|
// If we have a SuperDAT, we want the archive name as the game, and the file as everything else (?)
|
||||||
if (datFile.Header.Type == "SuperDAT")
|
if (datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.TypeKey) == "SuperDAT")
|
||||||
{
|
{
|
||||||
machineName = parent;
|
machineName = parent;
|
||||||
itemName = datItem.GetName();
|
itemName = datItem.GetName();
|
||||||
|
|||||||
@@ -65,8 +65,8 @@ namespace SabreTools.DatTools
|
|||||||
outDir = outDir.Ensure(create: true);
|
outDir = outDir.Ensure(create: true);
|
||||||
|
|
||||||
// Now we want to get forcepack flag if it's not overridden
|
// Now we want to get forcepack flag if it's not overridden
|
||||||
if (outputFormat == OutputFormat.Folder && datFile.Header.ForcePacking != PackingFlag.None)
|
if (outputFormat == OutputFormat.Folder && datFile.Header.GetFieldValue<PackingFlag>(Models.Metadata.Header.ForcePackingKey) != PackingFlag.None)
|
||||||
outputFormat = GetOutputFormat(datFile.Header.ForcePacking);
|
outputFormat = GetOutputFormat(datFile.Header.GetFieldValue<PackingFlag>(Models.Metadata.Header.ForcePackingKey));
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@@ -219,8 +219,8 @@ namespace SabreTools.DatTools
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Now we want to get forcepack flag if it's not overridden
|
// Now we want to get forcepack flag if it's not overridden
|
||||||
if (outputFormat == OutputFormat.Folder && datFile.Header.ForcePacking != PackingFlag.None)
|
if (outputFormat == OutputFormat.Folder && datFile.Header.GetFieldValue<PackingFlag>(Models.Metadata.Header.ForcePackingKey) != PackingFlag.None)
|
||||||
outputFormat = GetOutputFormat(datFile.Header.ForcePacking);
|
outputFormat = GetOutputFormat(datFile.Header.GetFieldValue<PackingFlag>(Models.Metadata.Header.ForcePackingKey));
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@@ -427,7 +427,7 @@ namespace SabreTools.DatTools
|
|||||||
|
|
||||||
// Special case for partial packing mode
|
// Special case for partial packing mode
|
||||||
bool shouldCheck = false;
|
bool shouldCheck = false;
|
||||||
if (outputFormat == OutputFormat.Folder && datFile.Header.ForcePacking == PackingFlag.Partial)
|
if (outputFormat == OutputFormat.Folder && datFile.Header.GetFieldValue<PackingFlag>(Models.Metadata.Header.ForcePackingKey) == PackingFlag.Partial)
|
||||||
{
|
{
|
||||||
shouldCheck = true;
|
shouldCheck = true;
|
||||||
datFile.Items.BucketBy(ItemKey.Machine, DedupeType.None, lower: false);
|
datFile.Items.BucketBy(ItemKey.Machine, DedupeType.None, lower: false);
|
||||||
@@ -459,11 +459,11 @@ namespace SabreTools.DatTools
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Now we want to take care of headers, if applicable
|
// Now we want to take care of headers, if applicable
|
||||||
if (datFile.Header.HeaderSkipper != null)
|
if (datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.HeaderKey) != null)
|
||||||
{
|
{
|
||||||
// Check to see if we have a matching header first
|
// Check to see if we have a matching header first
|
||||||
SkipperMatch.Init();
|
SkipperMatch.Init();
|
||||||
Rule rule = SkipperMatch.GetMatchingRule(fileStream, Path.GetFileNameWithoutExtension(datFile.Header.HeaderSkipper));
|
Rule rule = SkipperMatch.GetMatchingRule(fileStream, Path.GetFileNameWithoutExtension(datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.HeaderKey)!));
|
||||||
|
|
||||||
// If there's a match, create the new file to write
|
// If there's a match, create the new file to write
|
||||||
if (rule.Tests != null && rule.Tests.Length != 0)
|
if (rule.Tests != null && rule.Tests.Length != 0)
|
||||||
|
|||||||
@@ -56,13 +56,13 @@ namespace SabreTools.DatTools
|
|||||||
// Set all of the appropriate outputs for each of the subsets
|
// Set all of the appropriate outputs for each of the subsets
|
||||||
DatFile extADat = DatFile.Create(datFile.Header.CloneStandard());
|
DatFile extADat = DatFile.Create(datFile.Header.CloneStandard());
|
||||||
extADat.Header.FileName += $" ({newExtAString})";
|
extADat.Header.FileName += $" ({newExtAString})";
|
||||||
extADat.Header.Name += $" ({newExtAString})";
|
extADat.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, extADat.Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey) + $" ({newExtAString})");
|
||||||
extADat.Header.Description += $" ({newExtAString})";
|
extADat.Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, extADat.Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey) + $" ({newExtAString})");
|
||||||
|
|
||||||
DatFile extBDat = DatFile.Create(datFile.Header.CloneStandard());
|
DatFile extBDat = DatFile.Create(datFile.Header.CloneStandard());
|
||||||
extBDat.Header.FileName += $" ({newExtBString})";
|
extBDat.Header.FileName += $" ({newExtBString})";
|
||||||
extBDat.Header.Name += $" ({newExtBString})";
|
extBDat.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, extBDat.Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey) + $" ({newExtBString})");
|
||||||
extBDat.Header.Description += $" ({newExtBString})";
|
extBDat.Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, extBDat.Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey) + $" ({newExtBString})");
|
||||||
|
|
||||||
// Now separate the roms accordingly
|
// Now separate the roms accordingly
|
||||||
#if NET452_OR_GREATER || NETCOREAPP
|
#if NET452_OR_GREATER || NETCOREAPP
|
||||||
@@ -124,43 +124,43 @@ namespace SabreTools.DatTools
|
|||||||
// TODO: Can this be made into a loop?
|
// TODO: Can this be made into a loop?
|
||||||
fieldDats[Models.Metadata.Rom.StatusKey] = DatFile.Create(datFile.Header.CloneStandard());
|
fieldDats[Models.Metadata.Rom.StatusKey] = DatFile.Create(datFile.Header.CloneStandard());
|
||||||
fieldDats[Models.Metadata.Rom.StatusKey].Header.FileName += " (Nodump)";
|
fieldDats[Models.Metadata.Rom.StatusKey].Header.FileName += " (Nodump)";
|
||||||
fieldDats[Models.Metadata.Rom.StatusKey].Header.Name += " (Nodump)";
|
fieldDats[Models.Metadata.Rom.StatusKey].Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, fieldDats[Models.Metadata.Rom.StatusKey].Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey) + " (Nodump)");
|
||||||
fieldDats[Models.Metadata.Rom.StatusKey].Header.Description += " (Nodump)";
|
fieldDats[Models.Metadata.Rom.StatusKey].Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, fieldDats[Models.Metadata.Rom.StatusKey].Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey) + " (Nodump)");
|
||||||
|
|
||||||
fieldDats[Models.Metadata.Rom.SHA512Key] = DatFile.Create(datFile.Header.CloneStandard());
|
fieldDats[Models.Metadata.Rom.SHA512Key] = DatFile.Create(datFile.Header.CloneStandard());
|
||||||
fieldDats[Models.Metadata.Rom.SHA512Key].Header.FileName += " (SHA-512)";
|
fieldDats[Models.Metadata.Rom.SHA512Key].Header.FileName += " (SHA-512)";
|
||||||
fieldDats[Models.Metadata.Rom.SHA512Key].Header.Name += " (SHA-512)";
|
fieldDats[Models.Metadata.Rom.SHA512Key].Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, fieldDats[Models.Metadata.Rom.SHA512Key].Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey) + " (SHA-512)");
|
||||||
fieldDats[Models.Metadata.Rom.SHA512Key].Header.Description += " (SHA-512)";
|
fieldDats[Models.Metadata.Rom.SHA512Key].Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, fieldDats[Models.Metadata.Rom.SHA512Key].Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey) + " (SHA-512)");
|
||||||
|
|
||||||
fieldDats[Models.Metadata.Rom.SHA384Key] = DatFile.Create(datFile.Header.CloneStandard());
|
fieldDats[Models.Metadata.Rom.SHA384Key] = DatFile.Create(datFile.Header.CloneStandard());
|
||||||
fieldDats[Models.Metadata.Rom.SHA384Key].Header.FileName += " (SHA-384)";
|
fieldDats[Models.Metadata.Rom.SHA384Key].Header.FileName += " (SHA-384)";
|
||||||
fieldDats[Models.Metadata.Rom.SHA384Key].Header.Name += " (SHA-384)";
|
fieldDats[Models.Metadata.Rom.SHA384Key].Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, fieldDats[Models.Metadata.Rom.SHA384Key].Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey) + " (SHA-384)");
|
||||||
fieldDats[Models.Metadata.Rom.SHA384Key].Header.Description += " (SHA-384)";
|
fieldDats[Models.Metadata.Rom.SHA384Key].Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, fieldDats[Models.Metadata.Rom.SHA384Key].Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey) + " (SHA-384)");
|
||||||
|
|
||||||
fieldDats[Models.Metadata.Rom.SHA256Key] = DatFile.Create(datFile.Header.CloneStandard());
|
fieldDats[Models.Metadata.Rom.SHA256Key] = DatFile.Create(datFile.Header.CloneStandard());
|
||||||
fieldDats[Models.Metadata.Rom.SHA256Key].Header.FileName += " (SHA-256)";
|
fieldDats[Models.Metadata.Rom.SHA256Key].Header.FileName += " (SHA-256)";
|
||||||
fieldDats[Models.Metadata.Rom.SHA256Key].Header.Name += " (SHA-256)";
|
fieldDats[Models.Metadata.Rom.SHA256Key].Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, fieldDats[Models.Metadata.Rom.SHA256Key].Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey) + " (SHA-256)");
|
||||||
fieldDats[Models.Metadata.Rom.SHA256Key].Header.Description += " (SHA-256)";
|
fieldDats[Models.Metadata.Rom.SHA256Key].Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, fieldDats[Models.Metadata.Rom.SHA256Key].Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey) + " (SHA-256)");
|
||||||
|
|
||||||
fieldDats[Models.Metadata.Rom.SHA1Key] = DatFile.Create(datFile.Header.CloneStandard());
|
fieldDats[Models.Metadata.Rom.SHA1Key] = DatFile.Create(datFile.Header.CloneStandard());
|
||||||
fieldDats[Models.Metadata.Rom.SHA1Key].Header.FileName += " (SHA-1)";
|
fieldDats[Models.Metadata.Rom.SHA1Key].Header.FileName += " (SHA-1)";
|
||||||
fieldDats[Models.Metadata.Rom.SHA1Key].Header.Name += " (SHA-1)";
|
fieldDats[Models.Metadata.Rom.SHA1Key].Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, fieldDats[Models.Metadata.Rom.SHA1Key].Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey) + " (SHA-1)");
|
||||||
fieldDats[Models.Metadata.Rom.SHA1Key].Header.Description += " (SHA-1)";
|
fieldDats[Models.Metadata.Rom.SHA1Key].Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, fieldDats[Models.Metadata.Rom.SHA1Key].Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey) + " (SHA-1)");
|
||||||
|
|
||||||
fieldDats[Models.Metadata.Rom.MD5Key] = DatFile.Create(datFile.Header.CloneStandard());
|
fieldDats[Models.Metadata.Rom.MD5Key] = DatFile.Create(datFile.Header.CloneStandard());
|
||||||
fieldDats[Models.Metadata.Rom.MD5Key].Header.FileName += " (MD5)";
|
fieldDats[Models.Metadata.Rom.MD5Key].Header.FileName += " (MD5)";
|
||||||
fieldDats[Models.Metadata.Rom.MD5Key].Header.Name += " (MD5)";
|
fieldDats[Models.Metadata.Rom.MD5Key].Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, fieldDats[Models.Metadata.Rom.MD5Key].Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey) + " (MD5)");
|
||||||
fieldDats[Models.Metadata.Rom.MD5Key].Header.Description += " (MD5)";
|
fieldDats[Models.Metadata.Rom.MD5Key].Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, fieldDats[Models.Metadata.Rom.MD5Key].Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey) + " (MD5)");
|
||||||
|
|
||||||
fieldDats[Models.Metadata.Rom.CRCKey] = DatFile.Create(datFile.Header.CloneStandard());
|
fieldDats[Models.Metadata.Rom.CRCKey] = DatFile.Create(datFile.Header.CloneStandard());
|
||||||
fieldDats[Models.Metadata.Rom.CRCKey].Header.FileName += " (CRC)";
|
fieldDats[Models.Metadata.Rom.CRCKey].Header.FileName += " (CRC)";
|
||||||
fieldDats[Models.Metadata.Rom.CRCKey].Header.Name += " (CRC)";
|
fieldDats[Models.Metadata.Rom.CRCKey].Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, fieldDats[Models.Metadata.Rom.CRCKey].Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey) + " (CRC)");
|
||||||
fieldDats[Models.Metadata.Rom.CRCKey].Header.Description += " (CRC)";
|
fieldDats[Models.Metadata.Rom.CRCKey].Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, fieldDats[Models.Metadata.Rom.CRCKey].Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey) + " (CRC)");
|
||||||
|
|
||||||
fieldDats["null"] = DatFile.Create(datFile.Header.CloneStandard());
|
fieldDats["null"] = DatFile.Create(datFile.Header.CloneStandard());
|
||||||
fieldDats["null"].Header.FileName += " (Other)";
|
fieldDats["null"].Header.FileName += " (Other)";
|
||||||
fieldDats["null"].Header.Name += " (Other)";
|
fieldDats["null"].Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, fieldDats["null"].Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey) + " (Other)");
|
||||||
fieldDats["null"].Header.Description += " (Other)";
|
fieldDats["null"].Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, fieldDats["null"].Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey) + " (Other)");
|
||||||
|
|
||||||
// Now populate each of the DAT objects in turn
|
// Now populate each of the DAT objects in turn
|
||||||
#if NET452_OR_GREATER || NETCOREAPP
|
#if NET452_OR_GREATER || NETCOREAPP
|
||||||
@@ -264,7 +264,7 @@ namespace SabreTools.DatTools
|
|||||||
|
|
||||||
// Create a temporary DAT to add things to
|
// Create a temporary DAT to add things to
|
||||||
DatFile tempDat = DatFile.Create(datFile.Header);
|
DatFile tempDat = DatFile.Create(datFile.Header);
|
||||||
tempDat.Header.Name = null;
|
tempDat.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, null);
|
||||||
|
|
||||||
// Sort the input keys
|
// Sort the input keys
|
||||||
List<string> keys = [.. datFile.Items.Keys];
|
List<string> keys = [.. datFile.Items.Keys];
|
||||||
@@ -280,11 +280,11 @@ namespace SabreTools.DatTools
|
|||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
// Here, the key is the name of the game to be used for comparison
|
// Here, the key is the name of the game to be used for comparison
|
||||||
if (tempDat.Header.Name != null && tempDat.Header.Name != Path.GetDirectoryName(key))
|
if (tempDat.Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey) != null && tempDat.Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey) != Path.GetDirectoryName(key))
|
||||||
{
|
{
|
||||||
// Reset the DAT for the next items
|
// Reset the DAT for the next items
|
||||||
tempDat = DatFile.Create(datFile.Header);
|
tempDat = DatFile.Create(datFile.Header);
|
||||||
tempDat.Header.Name = null;
|
tempDat.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clean the input list and set all games to be pathless
|
// Clean the input list and set all games to be pathless
|
||||||
@@ -302,7 +302,7 @@ namespace SabreTools.DatTools
|
|||||||
tempDat.Items.AddRange(key, items);
|
tempDat.Items.AddRange(key, items);
|
||||||
|
|
||||||
// Then set the DAT name to be the parent directory name
|
// Then set the DAT name to be the parent directory name
|
||||||
tempDat.Header.Name = Path.GetDirectoryName(key);
|
tempDat.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, Path.GetDirectoryName(key));
|
||||||
#if NET40_OR_GREATER || NETCOREAPP
|
#if NET40_OR_GREATER || NETCOREAPP
|
||||||
});
|
});
|
||||||
#else
|
#else
|
||||||
@@ -342,7 +342,7 @@ namespace SabreTools.DatTools
|
|||||||
private static void SplitByLevelHelper(DatFile datFile, DatFile newDatFile, string outDir, bool shortname, bool restore)
|
private static void SplitByLevelHelper(DatFile datFile, DatFile newDatFile, string outDir, bool shortname, bool restore)
|
||||||
{
|
{
|
||||||
// Get the name from the DAT to use separately
|
// Get the name from the DAT to use separately
|
||||||
string? name = newDatFile.Header.Name;
|
string? name = newDatFile.Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey);
|
||||||
string? expName = name?.Replace("/", " - ")?.Replace("\\", " - ");
|
string? expName = name?.Replace("/", " - ")?.Replace("\\", " - ");
|
||||||
|
|
||||||
// Now set the new output values
|
// Now set the new output values
|
||||||
@@ -363,9 +363,9 @@ namespace SabreTools.DatTools
|
|||||||
);
|
);
|
||||||
#endif
|
#endif
|
||||||
newDatFile.Header.FileName = restore ? $"{datFile.Header.FileName} ({newDatFile.Header.FileName})" : newDatFile.Header.FileName;
|
newDatFile.Header.FileName = restore ? $"{datFile.Header.FileName} ({newDatFile.Header.FileName})" : newDatFile.Header.FileName;
|
||||||
newDatFile.Header.Name = $"{datFile.Header.Name} ({expName})";
|
newDatFile.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, $"{datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey)} ({expName})");
|
||||||
newDatFile.Header.Description = string.IsNullOrEmpty(datFile.Header.Description) ? newDatFile.Header.Name : $"{datFile.Header.Description} ({expName})";
|
newDatFile.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, string.IsNullOrEmpty(datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey)) ? newDatFile.Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey) : $"{datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey)} ({expName})");
|
||||||
newDatFile.Header.Type = null;
|
newDatFile.Header.SetFieldValue<string?>(Models.Metadata.Header.TypeKey, null);
|
||||||
|
|
||||||
// Write out the temporary DAT to the proper directory
|
// Write out the temporary DAT to the proper directory
|
||||||
Writer.Write(newDatFile, outDir);
|
Writer.Write(newDatFile, outDir);
|
||||||
@@ -384,13 +384,13 @@ namespace SabreTools.DatTools
|
|||||||
|
|
||||||
DatFile lessThan = DatFile.Create(datFile.Header.CloneStandard());
|
DatFile lessThan = DatFile.Create(datFile.Header.CloneStandard());
|
||||||
lessThan.Header.FileName += $" (less than {radix})";
|
lessThan.Header.FileName += $" (less than {radix})";
|
||||||
lessThan.Header.Name += $" (less than {radix})";
|
lessThan.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, lessThan.Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey) + $" (less than {radix})");
|
||||||
lessThan.Header.Description += $" (less than {radix})";
|
lessThan.Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, lessThan.Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey) + $" (less than {radix})");
|
||||||
|
|
||||||
DatFile greaterThan = DatFile.Create(datFile.Header.CloneStandard());
|
DatFile greaterThan = DatFile.Create(datFile.Header.CloneStandard());
|
||||||
greaterThan.Header.FileName += $" (equal-greater than {radix})";
|
greaterThan.Header.FileName += $" (equal-greater than {radix})";
|
||||||
greaterThan.Header.Name += $" (equal-greater than {radix})";
|
greaterThan.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, greaterThan.Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey) + $" (equal-greater than {radix})");
|
||||||
greaterThan.Header.Description += $" (equal-greater than {radix})";
|
greaterThan.Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, greaterThan.Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey) + $" (equal-greater than {radix})");
|
||||||
|
|
||||||
// Now populate each of the DAT objects in turn
|
// Now populate each of the DAT objects in turn
|
||||||
#if NET452_OR_GREATER || NETCOREAPP
|
#if NET452_OR_GREATER || NETCOREAPP
|
||||||
@@ -466,8 +466,8 @@ namespace SabreTools.DatTools
|
|||||||
long currentIndex = 0;
|
long currentIndex = 0;
|
||||||
DatFile currentDat = DatFile.Create(datFile.Header.CloneStandard());
|
DatFile currentDat = DatFile.Create(datFile.Header.CloneStandard());
|
||||||
currentDat.Header.FileName += $"_{currentIndex}";
|
currentDat.Header.FileName += $"_{currentIndex}";
|
||||||
currentDat.Header.Name += $"_{currentIndex}";
|
currentDat.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, currentDat.Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey) + $"_{currentIndex}");
|
||||||
currentDat.Header.Description += $"_{currentIndex}";
|
currentDat.Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, currentDat.Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey) + $"_{currentIndex}");
|
||||||
|
|
||||||
// Loop through each machine
|
// Loop through each machine
|
||||||
foreach (string machine in keys)
|
foreach (string machine in keys)
|
||||||
@@ -509,8 +509,8 @@ namespace SabreTools.DatTools
|
|||||||
currentIndex++;
|
currentIndex++;
|
||||||
currentDat = DatFile.Create(datFile.Header.CloneStandard());
|
currentDat = DatFile.Create(datFile.Header.CloneStandard());
|
||||||
currentDat.Header.FileName += $"_{currentIndex}";
|
currentDat.Header.FileName += $"_{currentIndex}";
|
||||||
currentDat.Header.Name += $"_{currentIndex}";
|
currentDat.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, currentDat.Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey) + $"_{currentIndex}");
|
||||||
currentDat.Header.Description += $"_{currentIndex}";
|
currentDat.Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, currentDat.Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey) + $"_{currentIndex}");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the current machine to the current DatFile
|
// Add the current machine to the current DatFile
|
||||||
@@ -553,8 +553,8 @@ namespace SabreTools.DatTools
|
|||||||
{
|
{
|
||||||
typeDats[itemType] = DatFile.Create(datFile.Header.CloneStandard());
|
typeDats[itemType] = DatFile.Create(datFile.Header.CloneStandard());
|
||||||
typeDats[itemType].Header.FileName += $" ({itemType})";
|
typeDats[itemType].Header.FileName += $" ({itemType})";
|
||||||
typeDats[itemType].Header.Name += $" ({itemType})";
|
typeDats[itemType].Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, typeDats[itemType].Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey) + $" ({itemType})");
|
||||||
typeDats[itemType].Header.Description += $" ({itemType})";
|
typeDats[itemType].Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, typeDats[itemType].Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey) + $" ({itemType})");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now populate each of the DAT objects in turn
|
// Now populate each of the DAT objects in turn
|
||||||
|
|||||||
@@ -105,8 +105,8 @@ namespace SabreTools.DatTools
|
|||||||
|
|
||||||
// Set fixdat headers in case of writing out
|
// Set fixdat headers in case of writing out
|
||||||
datFile.Header.FileName = $"fixDAT_{datFile.Header.FileName}";
|
datFile.Header.FileName = $"fixDAT_{datFile.Header.FileName}";
|
||||||
datFile.Header.Name = $"fixDAT_{datFile.Header.Name}";
|
datFile.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, $"fixDAT_{datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey)}");
|
||||||
datFile.Header.Description = $"fixDAT_{datFile.Header.Description}";
|
datFile.Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, $"fixDAT_{datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey)}");
|
||||||
datFile.Items.ClearMarked();
|
datFile.Items.ClearMarked();
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
@@ -154,8 +154,8 @@ namespace SabreTools.DatTools
|
|||||||
|
|
||||||
// Set fixdat headers in case of writing out
|
// Set fixdat headers in case of writing out
|
||||||
datFile.Header.FileName = $"fixDAT_{datFile.Header.FileName}";
|
datFile.Header.FileName = $"fixDAT_{datFile.Header.FileName}";
|
||||||
datFile.Header.Name = $"fixDAT_{datFile.Header.Name}";
|
datFile.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, $"fixDAT_{datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey)}");
|
||||||
datFile.Header.Description = $"fixDAT_{datFile.Header.Description}";
|
datFile.Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, $"fixDAT_{datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey)}");
|
||||||
datFile.Items.ClearMarked();
|
datFile.Items.ClearMarked();
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
|
|||||||
@@ -153,30 +153,49 @@ namespace SabreTools.DatTools
|
|||||||
// Empty FileName
|
// Empty FileName
|
||||||
if (string.IsNullOrEmpty(datFile.Header.FileName))
|
if (string.IsNullOrEmpty(datFile.Header.FileName))
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(datFile.Header.Name) && string.IsNullOrEmpty(datFile.Header.Description))
|
if (string.IsNullOrEmpty(datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey)) && string.IsNullOrEmpty(datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey)))
|
||||||
datFile.Header.FileName = datFile.Header.Name = datFile.Header.Description = "Default";
|
{
|
||||||
|
datFile.Header.FileName = "Default";
|
||||||
|
datFile.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, "Default");
|
||||||
|
datFile.Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, "Default");
|
||||||
|
}
|
||||||
|
|
||||||
else if (string.IsNullOrEmpty(datFile.Header.Name) && !string.IsNullOrEmpty(datFile.Header.Description))
|
else if (string.IsNullOrEmpty(datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey)) && !string.IsNullOrEmpty(datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey)))
|
||||||
datFile.Header.FileName = datFile.Header.Name = datFile.Header.Description;
|
{
|
||||||
|
datFile.Header.FileName = datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey);
|
||||||
|
datFile.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey));
|
||||||
|
}
|
||||||
|
|
||||||
else if (!string.IsNullOrEmpty(datFile.Header.Name) && string.IsNullOrEmpty(datFile.Header.Description))
|
else if (!string.IsNullOrEmpty(datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey)) && string.IsNullOrEmpty(datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey)))
|
||||||
datFile.Header.FileName = datFile.Header.Description = datFile.Header.Name;
|
{
|
||||||
|
datFile.Header.FileName = datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey);
|
||||||
|
datFile.Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey));
|
||||||
|
}
|
||||||
|
|
||||||
else if (!string.IsNullOrEmpty(datFile.Header.Name) && !string.IsNullOrEmpty(datFile.Header.Description))
|
else if (!string.IsNullOrEmpty(datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey)) && !string.IsNullOrEmpty(datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey)))
|
||||||
datFile.Header.FileName = datFile.Header.Description;
|
{
|
||||||
|
datFile.Header.FileName = datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Filled FileName
|
// Filled FileName
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(datFile.Header.Name) && string.IsNullOrEmpty(datFile.Header.Description))
|
if (string.IsNullOrEmpty(datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey)) && string.IsNullOrEmpty(datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey)))
|
||||||
datFile.Header.Name = datFile.Header.Description = datFile.Header.FileName;
|
{
|
||||||
|
datFile.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, datFile.Header.FileName);
|
||||||
|
datFile.Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, datFile.Header.FileName);
|
||||||
|
}
|
||||||
|
|
||||||
else if (string.IsNullOrEmpty(datFile.Header.Name) && !string.IsNullOrEmpty(datFile.Header.Description))
|
else if (string.IsNullOrEmpty(datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey)) && !string.IsNullOrEmpty(datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey)))
|
||||||
datFile.Header.Name = datFile.Header.Description;
|
{
|
||||||
|
datFile.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey));
|
||||||
|
}
|
||||||
|
|
||||||
else if (!string.IsNullOrEmpty(datFile.Header.Name) && string.IsNullOrEmpty(datFile.Header.Description))
|
else if (!string.IsNullOrEmpty(datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey)) && string.IsNullOrEmpty(datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey)))
|
||||||
datFile.Header.Description = datFile.Header.Name;
|
{
|
||||||
|
datFile.Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, datFile.Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -417,7 +417,7 @@ namespace SabreTools.Filtering
|
|||||||
internal static void SetOneRomPerGame(DatFile datFile)
|
internal static void SetOneRomPerGame(DatFile datFile)
|
||||||
{
|
{
|
||||||
// Because this introduces subfolders, we need to set the SuperDAT type
|
// Because this introduces subfolders, we need to set the SuperDAT type
|
||||||
datFile.Header.Type = "SuperDAT";
|
datFile.Header.SetFieldValue<string?>(Models.Metadata.Header.TypeKey, "SuperDAT");
|
||||||
|
|
||||||
// For each rom, we want to update the game to be "<game name>/<rom name>"
|
// For each rom, we want to update the game to be "<game name>/<rom name>"
|
||||||
#if NET452_OR_GREATER || NETCOREAPP
|
#if NET452_OR_GREATER || NETCOREAPP
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ namespace SabreTools.Filtering
|
|||||||
{
|
{
|
||||||
// If we are using tags from the DAT, set the proper input for split type unless overridden
|
// If we are using tags from the DAT, set the proper input for split type unless overridden
|
||||||
if (useTags && SplitType == MergingFlag.None)
|
if (useTags && SplitType == MergingFlag.None)
|
||||||
SplitType = datFile.Header.ForceMerging;
|
SplitType = datFile.Header.GetFieldValue<MergingFlag>(Models.Metadata.Header.ForceMergingKey);
|
||||||
|
|
||||||
// Run internal splitting
|
// Run internal splitting
|
||||||
switch (SplitType)
|
switch (SplitType)
|
||||||
|
|||||||
@@ -2153,30 +2153,15 @@ Some special strings that can be used:
|
|||||||
var datHeader = new DatHeader()
|
var datHeader = new DatHeader()
|
||||||
{
|
{
|
||||||
AddExtension = GetString(features, AddExtensionStringValue),
|
AddExtension = GetString(features, AddExtensionStringValue),
|
||||||
Author = GetString(features, AuthorStringValue),
|
|
||||||
Category = GetString(features, CategoryStringValue),
|
|
||||||
Comment = GetString(features, CommentStringValue),
|
|
||||||
Date = GetString(features, DateStringValue),
|
|
||||||
Description = GetString(features, DescriptionStringValue),
|
|
||||||
Email = GetString(features, EmailStringValue),
|
|
||||||
FileName = GetString(features, FilenameStringValue),
|
FileName = GetString(features, FilenameStringValue),
|
||||||
ForceMerging = GetString(features, ForceMergingStringValue).AsEnumValue<MergingFlag>(),
|
|
||||||
ForceNodump = GetString(features, ForceNodumpStringValue).AsEnumValue<NodumpFlag>(),
|
|
||||||
ForcePacking = GetString(features, ForcePackingStringValue).AsEnumValue<PackingFlag>(),
|
|
||||||
GameName = GetBoolean(features, GamePrefixValue),
|
GameName = GetBoolean(features, GamePrefixValue),
|
||||||
HeaderSkipper = GetString(features, HeaderStringValue),
|
|
||||||
Homepage = GetString(features, HomepageStringValue),
|
|
||||||
Name = GetString(features, NameStringValue),
|
|
||||||
Postfix = GetString(features, PostfixStringValue),
|
Postfix = GetString(features, PostfixStringValue),
|
||||||
Prefix = GetString(features, PrefixStringValue),
|
Prefix = GetString(features, PrefixStringValue),
|
||||||
Quotes = GetBoolean(features, QuotesValue),
|
Quotes = GetBoolean(features, QuotesValue),
|
||||||
RemoveExtension = GetBoolean(features, RemoveExtensionsValue),
|
RemoveExtension = GetBoolean(features, RemoveExtensionsValue),
|
||||||
ReplaceExtension = GetString(features, ReplaceExtensionStringValue),
|
ReplaceExtension = GetString(features, ReplaceExtensionStringValue),
|
||||||
RootDir = GetString(features, RootStringValue),
|
|
||||||
Type = GetBoolean(features, SuperdatValue) ? "SuperDAT" : null,
|
|
||||||
Url = GetString(features, UrlStringValue),
|
|
||||||
UseRomName = GetBoolean(features, RomsValue),
|
UseRomName = GetBoolean(features, RomsValue),
|
||||||
Version = GetString(features, VersionStringValue),
|
|
||||||
// Get the depot information
|
// Get the depot information
|
||||||
InputDepot = new DepotInformation(
|
InputDepot = new DepotInformation(
|
||||||
GetBoolean(features, DepotValue),
|
GetBoolean(features, DepotValue),
|
||||||
@@ -2185,6 +2170,22 @@ Some special strings that can be used:
|
|||||||
GetBoolean(features, RombaValue),
|
GetBoolean(features, RombaValue),
|
||||||
GetInt32(features, RombaDepthInt32Value))
|
GetInt32(features, RombaDepthInt32Value))
|
||||||
};
|
};
|
||||||
|
datHeader.SetFieldValue<string?>(Models.Metadata.Header.AuthorKey, GetString(features, AuthorStringValue));
|
||||||
|
datHeader.SetFieldValue<string?>(Models.Metadata.Header.CategoryKey, GetString(features, CategoryStringValue));
|
||||||
|
datHeader.SetFieldValue<string?>(Models.Metadata.Header.CommentKey, GetString(features, CommentStringValue));
|
||||||
|
datHeader.SetFieldValue<string?>(Models.Metadata.Header.DateKey, GetString(features, DateStringValue));
|
||||||
|
datHeader.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, GetString(features, DescriptionStringValue));
|
||||||
|
datHeader.SetFieldValue<string?>(Models.Metadata.Header.EmailKey, GetString(features, EmailStringValue));
|
||||||
|
datHeader.SetFieldValue<MergingFlag>(Models.Metadata.Header.ForceMergingKey, GetString(features, ForceMergingStringValue).AsEnumValue<MergingFlag>());
|
||||||
|
datHeader.SetFieldValue<NodumpFlag>(Models.Metadata.Header.ForceNodumpKey, GetString(features, ForceNodumpStringValue).AsEnumValue<NodumpFlag>());
|
||||||
|
datHeader.SetFieldValue<PackingFlag>(Models.Metadata.Header.ForceNodumpKey, GetString(features, ForcePackingStringValue).AsEnumValue<PackingFlag>());
|
||||||
|
datHeader.SetFieldValue<string?>(Models.Metadata.Header.HeaderKey, GetString(features, HeaderStringValue));
|
||||||
|
datHeader.SetFieldValue<string?>(Models.Metadata.Header.HomepageKey, GetString(features, HomepageStringValue));
|
||||||
|
datHeader.SetFieldValue<string?>(Models.Metadata.Header.NameKey, GetString(features, NameStringValue));
|
||||||
|
datHeader.SetFieldValue<string?>(Models.Metadata.Header.RootDirKey, GetString(features, RootStringValue));
|
||||||
|
datHeader.SetFieldValue<string?>(Models.Metadata.Header.TypeKey, GetBoolean(features, SuperdatValue) ? "SuperDAT" : null);
|
||||||
|
datHeader.SetFieldValue<string?>(Models.Metadata.Header.UrlKey, GetString(features, UrlStringValue));
|
||||||
|
datHeader.SetFieldValue<string?>(Models.Metadata.Header.VersionKey, GetString(features, VersionStringValue));
|
||||||
|
|
||||||
bool deprecated = GetBoolean(features, DeprecatedValue);
|
bool deprecated = GetBoolean(features, DeprecatedValue);
|
||||||
foreach (string ot in GetList(features, OutputTypeListValue))
|
foreach (string ot in GetList(features, OutputTypeListValue))
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ namespace SabreTools.Features
|
|||||||
|
|
||||||
// Create a new DATFromDir object and process the inputs
|
// Create a new DATFromDir object and process the inputs
|
||||||
DatFile basedat = DatFile.Create(Header!);
|
DatFile basedat = DatFile.Create(Header!);
|
||||||
basedat.Header.Date = DateTime.Now.ToString("yyyy-MM-dd");
|
basedat.Header.SetFieldValue<string?>(Models.Metadata.Header.DateKey, DateTime.Now.ToString("yyyy-MM-dd"));
|
||||||
|
|
||||||
// For each input directory, create a DAT
|
// For each input directory, create a DAT
|
||||||
foreach (string path in Inputs)
|
foreach (string path in Inputs)
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ using SabreTools.FileTypes;
|
|||||||
using SabreTools.Help;
|
using SabreTools.Help;
|
||||||
using SabreTools.IO;
|
using SabreTools.IO;
|
||||||
using SabreTools.Logging;
|
using SabreTools.Logging;
|
||||||
|
using SabreTools.Models.InstallShieldCabinet;
|
||||||
|
|
||||||
namespace SabreTools.Features
|
namespace SabreTools.Features
|
||||||
{
|
{
|
||||||
@@ -101,8 +102,8 @@ namespace SabreTools.Features
|
|||||||
datdata.Header.OutputDepot = Header.OutputDepot?.Clone() as DepotInformation;
|
datdata.Header.OutputDepot = Header.OutputDepot?.Clone() as DepotInformation;
|
||||||
|
|
||||||
// If we have overridden the header skipper, set it now
|
// If we have overridden the header skipper, set it now
|
||||||
if (!string.IsNullOrEmpty(Header.HeaderSkipper))
|
if (!string.IsNullOrEmpty(Header.GetFieldValue<string?>(Models.Metadata.Header.HeaderKey)))
|
||||||
datdata.Header.HeaderSkipper = Header.HeaderSkipper;
|
datdata.Header.SetFieldValue<string?>(Models.Metadata.Header.HeaderKey, Header.GetFieldValue<string?>(Models.Metadata.Header.HeaderKey));
|
||||||
|
|
||||||
// If we have the depot flag, respect it
|
// If we have the depot flag, respect it
|
||||||
bool success;
|
bool success;
|
||||||
@@ -115,8 +116,8 @@ namespace SabreTools.Features
|
|||||||
if (success && updateDat)
|
if (success && updateDat)
|
||||||
{
|
{
|
||||||
datdata.Header.FileName = $"fixDAT_{Header.FileName}";
|
datdata.Header.FileName = $"fixDAT_{Header.FileName}";
|
||||||
datdata.Header.Name = $"fixDAT_{Header.Name}";
|
datdata.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, $"fixDAT_{Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey)}");
|
||||||
datdata.Header.Description = $"fixDAT_{Header.Description}";
|
datdata.Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, $"fixDAT_{Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey)}");
|
||||||
datdata.Items.ClearMarked();
|
datdata.Items.ClearMarked();
|
||||||
Writer.Write(datdata, OutputDir);
|
Writer.Write(datdata, OutputDir);
|
||||||
}
|
}
|
||||||
@@ -140,8 +141,8 @@ namespace SabreTools.Features
|
|||||||
datdata.Header.OutputDepot = Header.OutputDepot?.Clone() as DepotInformation;
|
datdata.Header.OutputDepot = Header.OutputDepot?.Clone() as DepotInformation;
|
||||||
|
|
||||||
// If we have overridden the header skipper, set it now
|
// If we have overridden the header skipper, set it now
|
||||||
if (!string.IsNullOrEmpty(Header.HeaderSkipper))
|
if (!string.IsNullOrEmpty(Header.GetFieldValue<string?>(Models.Metadata.Header.HeaderKey)))
|
||||||
datdata.Header.HeaderSkipper = Header.HeaderSkipper;
|
datdata.Header.SetFieldValue<string?>(Models.Metadata.Header.HeaderKey, Header.GetFieldValue<string?>(Models.Metadata.Header.HeaderKey));
|
||||||
|
|
||||||
watch.Stop();
|
watch.Stop();
|
||||||
|
|
||||||
@@ -156,8 +157,8 @@ namespace SabreTools.Features
|
|||||||
if (success && updateDat)
|
if (success && updateDat)
|
||||||
{
|
{
|
||||||
datdata.Header.FileName = $"fixDAT_{Header.FileName}";
|
datdata.Header.FileName = $"fixDAT_{Header.FileName}";
|
||||||
datdata.Header.Name = $"fixDAT_{Header.Name}";
|
datdata.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, $"fixDAT_{Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey)}");
|
||||||
datdata.Header.Description = $"fixDAT_{Header.Description}";
|
datdata.Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, $"fixDAT_{Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey)}");
|
||||||
datdata.Items.ClearMarked();
|
datdata.Items.ClearMarked();
|
||||||
Writer.Write(datdata, OutputDir);
|
Writer.Write(datdata, OutputDir);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -107,34 +107,34 @@ namespace SabreTools.Features
|
|||||||
&& !(updateMode.HasFlag(UpdateMode.DiffAgainst) || updateMode.HasFlag(UpdateMode.BaseReplace)))
|
&& !(updateMode.HasFlag(UpdateMode.DiffAgainst) || updateMode.HasFlag(UpdateMode.BaseReplace)))
|
||||||
{
|
{
|
||||||
// Get the values that will be used
|
// Get the values that will be used
|
||||||
if (string.IsNullOrWhiteSpace(Header.Date))
|
if (string.IsNullOrWhiteSpace(Header.GetFieldValue<string?>(Models.Metadata.Header.DateKey)))
|
||||||
Header.Date = DateTime.Now.ToString("yyyy-MM-dd");
|
Header.SetFieldValue<string?>(Models.Metadata.Header.DateKey, DateTime.Now.ToString("yyyy-MM-dd"));
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(Header.Name))
|
if (string.IsNullOrWhiteSpace(Header.GetFieldValue<string?>(Models.Metadata.Header.NameKey)))
|
||||||
{
|
{
|
||||||
Header.Name = (updateMode != 0 ? "DiffDAT" : "MergeDAT")
|
Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, (updateMode != 0 ? "DiffDAT" : "MergeDAT")
|
||||||
+ (Header.Type == "SuperDAT" ? "-SuperDAT" : string.Empty)
|
+ (Header.GetFieldValue<string?>(Models.Metadata.Header.TypeKey) == "SuperDAT" ? "-SuperDAT" : string.Empty)
|
||||||
+ (Cleaner!.DedupeRoms != DedupeType.None ? "-deduped" : string.Empty);
|
+ (Cleaner!.DedupeRoms != DedupeType.None ? "-deduped" : string.Empty));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(Header.Description))
|
if (string.IsNullOrWhiteSpace(Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey)))
|
||||||
{
|
{
|
||||||
Header.Description = (updateMode != 0 ? "DiffDAT" : "MergeDAT")
|
Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, (updateMode != 0 ? "DiffDAT" : "MergeDAT")
|
||||||
+ (Header.Type == "SuperDAT" ? "-SuperDAT" : string.Empty)
|
+ (Header.GetFieldValue<string?>(Models.Metadata.Header.TypeKey) == "SuperDAT" ? "-SuperDAT" : string.Empty)
|
||||||
+ (Cleaner!.DedupeRoms != DedupeType.None ? " - deduped" : string.Empty);
|
+ (Cleaner!.DedupeRoms != DedupeType.None ? " - deduped" : string.Empty));
|
||||||
|
|
||||||
if (!GetBoolean(features, NoAutomaticDateValue))
|
if (!GetBoolean(features, NoAutomaticDateValue))
|
||||||
Header.Description += $" ({Header.Date})";
|
Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, $"{Header.GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey)} ({Header.GetFieldValue<string?>(Models.Metadata.Header.DateKey)})");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(Header.Category) && updateMode != 0)
|
if (string.IsNullOrWhiteSpace(Header.GetFieldValue<string?>(Models.Metadata.Header.CategoryKey)) && updateMode != 0)
|
||||||
Header.Category = "DiffDAT";
|
Header.SetFieldValue<string?>(Models.Metadata.Header.CategoryKey, "DiffDAT");
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(Header.Author))
|
if (string.IsNullOrWhiteSpace(Header.GetFieldValue<string?>(Models.Metadata.Header.AuthorKey)))
|
||||||
Header.Author = $"SabreTools {Prepare.Version}";
|
Header.SetFieldValue<string?>(Models.Metadata.Header.AuthorKey, $"SabreTools {Prepare.Version}");
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(Header.Comment))
|
if (string.IsNullOrWhiteSpace(Header.GetFieldValue<string?>(Models.Metadata.Header.CommentKey)))
|
||||||
Header.Comment = $"Generated by SabreTools {Prepare.Version}";
|
Header.SetFieldValue<string?>(Models.Metadata.Header.CommentKey, $"Generated by SabreTools {Prepare.Version}");
|
||||||
}
|
}
|
||||||
|
|
||||||
// If no update fields are set, default to Names
|
// If no update fields are set, default to Names
|
||||||
@@ -290,8 +290,8 @@ namespace SabreTools.Features
|
|||||||
|
|
||||||
datHeaders[j] = userInputDat.Header;
|
datHeaders[j] = userInputDat.Header;
|
||||||
datHeaders[j].FileName += innerpost;
|
datHeaders[j].FileName += innerpost;
|
||||||
datHeaders[j].Name += innerpost;
|
datHeaders[j].SetFieldValue<string?>(Models.Metadata.Header.NameKey, datHeaders[j].GetFieldValue<string?>(Models.Metadata.Header.NameKey) + innerpost);
|
||||||
datHeaders[j].Description += innerpost;
|
datHeaders[j].SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, datHeaders[j].GetFieldValue<string?>(Models.Metadata.Header.DescriptionKey) + innerpost);
|
||||||
}
|
}
|
||||||
#if NET40_OR_GREATER || NETCOREAPP
|
#if NET40_OR_GREATER || NETCOREAPP
|
||||||
});
|
});
|
||||||
@@ -409,7 +409,7 @@ namespace SabreTools.Features
|
|||||||
if (updateMode.HasFlag(UpdateMode.Merge))
|
if (updateMode.HasFlag(UpdateMode.Merge))
|
||||||
{
|
{
|
||||||
// If we're in SuperDAT mode, prefix all games with their respective DATs
|
// If we're in SuperDAT mode, prefix all games with their respective DATs
|
||||||
if (string.Equals(userInputDat.Header.Type, "SuperDAT", StringComparison.OrdinalIgnoreCase))
|
if (string.Equals(userInputDat.Header.GetFieldValue<string?>(Models.Metadata.Header.TypeKey), "SuperDAT", StringComparison.OrdinalIgnoreCase))
|
||||||
DatFileTool.ApplySuperDAT(userInputDat, inputPaths);
|
DatFileTool.ApplySuperDAT(userInputDat, inputPaths);
|
||||||
|
|
||||||
Writer.Write(userInputDat, OutputDir);
|
Writer.Write(userInputDat, OutputDir);
|
||||||
|
|||||||
@@ -75,8 +75,8 @@ namespace SabreTools.Features
|
|||||||
datdata.Header.InputDepot = Header!.InputDepot?.Clone() as DepotInformation;
|
datdata.Header.InputDepot = Header!.InputDepot?.Clone() as DepotInformation;
|
||||||
|
|
||||||
// If we have overridden the header skipper, set it now
|
// If we have overridden the header skipper, set it now
|
||||||
if (!string.IsNullOrEmpty(Header.HeaderSkipper))
|
if (!string.IsNullOrEmpty(Header.GetFieldValue<string?>(Models.Metadata.Header.HeaderKey)))
|
||||||
datdata.Header.HeaderSkipper = Header.HeaderSkipper;
|
datdata.Header.SetFieldValue<string?>(Models.Metadata.Header.HeaderKey, Header.GetFieldValue<string?>(Models.Metadata.Header.HeaderKey));
|
||||||
|
|
||||||
// If we have the depot flag, respect it
|
// If we have the depot flag, respect it
|
||||||
if (Header.InputDepot?.IsActive ?? false)
|
if (Header.InputDepot?.IsActive ?? false)
|
||||||
@@ -123,8 +123,8 @@ namespace SabreTools.Features
|
|||||||
datdata.Header.InputDepot = Header!.InputDepot?.Clone() as DepotInformation;
|
datdata.Header.InputDepot = Header!.InputDepot?.Clone() as DepotInformation;
|
||||||
|
|
||||||
// If we have overridden the header skipper, set it now
|
// If we have overridden the header skipper, set it now
|
||||||
if (!string.IsNullOrEmpty(Header.HeaderSkipper))
|
if (!string.IsNullOrEmpty(Header.GetFieldValue<string?>(Models.Metadata.Header.HeaderKey)))
|
||||||
datdata.Header.HeaderSkipper = Header.HeaderSkipper;
|
datdata.Header.SetFieldValue<string?>(Models.Metadata.Header.HeaderKey, Header.GetFieldValue<string?>(Models.Metadata.Header.HeaderKey));
|
||||||
|
|
||||||
watch.Stop();
|
watch.Stop();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user