diff --git a/SabreTools.DatFiles/DatFile.MetadataConverter.cs b/SabreTools.DatFiles/DatFile.MetadataConverter.cs
index ee2c047c..4f6fbc65 100644
--- a/SabreTools.DatFiles/DatFile.MetadataConverter.cs
+++ b/SabreTools.DatFiles/DatFile.MetadataConverter.cs
@@ -3,7 +3,6 @@ using System.Linq;
namespace SabreTools.DatFiles
{
// TODO: Convert nested items (e.g. Configuration, DipLocation)
- // TODO: Determine which items need to have their values flipped (e.g. Part, DiskArea, DataArea)
public partial class DatFile
{
#region Converters
@@ -14,25 +13,23 @@ namespace SabreTools.DatFiles
/// Metadata file to convert
/// Name of the file to be parsed
/// Index ID for the DAT
+ /// True if full pathnames are to be kept, false otherwise (default)
/// True to only add item statistics while parsing, false otherwise
- public void ConvertMetadata(Models.Metadata.MetadataFile? item, string filename, int indexId, bool statsOnly)
+ public void ConvertMetadata(Models.Metadata.MetadataFile? item, string filename, int indexId, bool keep, bool statsOnly)
{
// If the metadata file is invalid, we can't do anything
if (item == null || !item.Any())
return;
- // TODO: Add header parsing
+ // Get the header from the metadata
+ var header = item.Read(Models.Metadata.MetadataFile.HeaderKey);
+ if (header != null)
+ ConvertHeader(header);
// Get the machines from the metadata
var machines = ReadItemArray(item, Models.Metadata.MetadataFile.MachineKey);
- if (machines == null)
- return;
-
- // Loop through the machines and add
- foreach (var machine in machines)
- {
- ConvertMachine(machine, filename, indexId, statsOnly);
- }
+ if (machines != null)
+ ConvertMachines(machines, filename, indexId, statsOnly);
}
///
@@ -41,7 +38,65 @@ namespace SabreTools.DatFiles
/// Header to convert
private void ConvertHeader(Models.Metadata.Header? item)
{
+ // If the header is invalid, we can't do anything
+ if (item == null || !item.Any())
+ return;
+ // Create an internal header
+ var header = new DatFiles.DatHeader(item);
+
+ // Convert subheader values
+ if (item.ContainsKey(Models.Metadata.Header.CanOpenKey))
+ {
+ // TODO: Implement
+ }
+ if (item.ContainsKey(Models.Metadata.Header.ImagesKey))
+ {
+ // TODO: Implement
+ }
+ if (item.ContainsKey(Models.Metadata.Header.InfosKey))
+ {
+ // TODO: Implement
+ }
+ if (item.ContainsKey(Models.Metadata.Header.NewDatKey))
+ {
+ // TODO: Implement
+ }
+ if (item.ContainsKey(Models.Metadata.Header.SearchKey))
+ {
+ // TODO: Implement
+ }
+
+ // Get all fields that can be set
+ var nonItemFields = Filter.TypeHelper.GetConstants(typeof(Models.Metadata.Header));
+ if (nonItemFields == null)
+ return;
+
+ // Loop through and selectively set all fields
+ foreach (string field in nonItemFields)
+ {
+ // TODO: Implement selective setting of all fields in Header
+ }
+ }
+
+ ///
+ /// Convert machines information
+ ///
+ /// Machine array to convert
+ /// Name of the file to be parsed
+ /// Index ID for the DAT
+ /// True to only add item statistics while parsing, false otherwise
+ private void ConvertMachines(Models.Metadata.Machine[]? items, string filename, int indexId, bool statsOnly)
+ {
+ // If the array is invalid, we can't do anything
+ if (items == null || !items.Any())
+ return;
+
+ // Loop through the machines and add
+ foreach (var machine in items)
+ {
+ ConvertMachine(machine, filename, indexId, statsOnly);
+ }
}
///
@@ -197,22 +252,6 @@ namespace SabreTools.DatFiles
}
}
- ///
- /// Read an item array from a given key, if possible
- ///
- private static T[]? ReadItemArray(Models.Metadata.DictionaryBase item, string key) where T : Models.Metadata.DictionaryBase
- {
- var items = item.Read(key);
- if (items == default)
- {
- var single = item.Read(key);
- if (single != default)
- items = [single];
- }
-
- return items;
- }
-
///
/// Convert Adjuster information
///
@@ -938,6 +977,22 @@ namespace SabreTools.DatFiles
}
}
+ ///
+ /// Read an item array from a given key, if possible
+ ///
+ private static T[]? ReadItemArray(Models.Metadata.DictionaryBase item, string key) where T : Models.Metadata.DictionaryBase
+ {
+ var items = item.Read(key);
+ if (items == default)
+ {
+ var single = item.Read(key);
+ if (single != default)
+ items = [single];
+ }
+
+ return items;
+ }
+
#endregion
}
}
\ No newline at end of file
diff --git a/SabreTools.DatFiles/DatHeader.cs b/SabreTools.DatFiles/DatHeader.cs
index f2c8b129..f5f3fc12 100644
--- a/SabreTools.DatFiles/DatHeader.cs
+++ b/SabreTools.DatFiles/DatHeader.cs
@@ -112,6 +112,28 @@ namespace SabreTools.DatFiles
#region Instance Methods
+ #region Constructors
+
+ public DatHeader() { }
+
+ public DatHeader(Models.Metadata.Header header)
+ {
+ // Get all fields to automatically copy without processing
+ var nonItemFields = TypeHelper.GetConstants(typeof(Models.Metadata.Header));
+ if (nonItemFields == null)
+ return;
+
+ // Populate the internal machine from non-filter fields
+ _header = [];
+ foreach (string fieldName in nonItemFields)
+ {
+ if (header.ContainsKey(fieldName))
+ _header[fieldName] = header[fieldName];
+ }
+ }
+
+ #endregion
+
#region Accessors
///
diff --git a/SabreTools.DatFiles/Formats/ArchiveDotOrg.Reader.cs b/SabreTools.DatFiles/Formats/ArchiveDotOrg.Reader.cs
index 91a87c80..12a51f2f 100644
--- a/SabreTools.DatFiles/Formats/ArchiveDotOrg.Reader.cs
+++ b/SabreTools.DatFiles/Formats/ArchiveDotOrg.Reader.cs
@@ -17,7 +17,7 @@ namespace SabreTools.DatFiles.Formats
var metadata = new Serialization.CrossModel.ArchiveDotOrg().Serialize(files);
// Convert to the internal format
- ConvertMetadata(metadata, filename, indexId, statsOnly);
+ ConvertMetadata(metadata, filename, indexId, keep, statsOnly);
}
catch (Exception ex) when (!throwOnError)
{
diff --git a/SabreTools.DatFiles/Formats/AttractMode.Reader.cs b/SabreTools.DatFiles/Formats/AttractMode.Reader.cs
index a2f8b0a8..0bc46540 100644
--- a/SabreTools.DatFiles/Formats/AttractMode.Reader.cs
+++ b/SabreTools.DatFiles/Formats/AttractMode.Reader.cs
@@ -17,7 +17,7 @@ namespace SabreTools.DatFiles.Formats
var metadata = new Serialization.CrossModel.AttractMode().Serialize(metadataFile);
// Convert to the internal format
- ConvertMetadata(metadata, filename, indexId, statsOnly);
+ ConvertMetadata(metadata, filename, indexId, keep, statsOnly);
}
catch (Exception ex) when (!throwOnError)
{
diff --git a/SabreTools.DatFiles/Formats/ClrMamePro.Reader.cs b/SabreTools.DatFiles/Formats/ClrMamePro.Reader.cs
index 9d7ece06..d213526e 100644
--- a/SabreTools.DatFiles/Formats/ClrMamePro.Reader.cs
+++ b/SabreTools.DatFiles/Formats/ClrMamePro.Reader.cs
@@ -22,7 +22,7 @@ namespace SabreTools.DatFiles.Formats
ConvertHeader(metadataFile?.ClrMamePro, keep);
// Convert to the internal format
- ConvertMetadata(metadata, filename, indexId, statsOnly);
+ ConvertMetadata(metadata, filename, indexId, keep, statsOnly);
}
catch (Exception ex) when (!throwOnError)
{
diff --git a/SabreTools.DatFiles/Formats/DosCenter.Reader.cs b/SabreTools.DatFiles/Formats/DosCenter.Reader.cs
index 8d93e144..b30a3c40 100644
--- a/SabreTools.DatFiles/Formats/DosCenter.Reader.cs
+++ b/SabreTools.DatFiles/Formats/DosCenter.Reader.cs
@@ -20,7 +20,7 @@ namespace SabreTools.DatFiles.Formats
ConvertHeader(metadataFile?.DosCenter, keep);
// Convert to the internal format
- ConvertMetadata(metadata, filename, indexId, statsOnly);
+ ConvertMetadata(metadata, filename, indexId, keep, statsOnly);
}
catch (Exception ex) when (!throwOnError)
{
diff --git a/SabreTools.DatFiles/Formats/EverdriveSMDB.Reader.cs b/SabreTools.DatFiles/Formats/EverdriveSMDB.Reader.cs
index f4447eaf..b784f92b 100644
--- a/SabreTools.DatFiles/Formats/EverdriveSMDB.Reader.cs
+++ b/SabreTools.DatFiles/Formats/EverdriveSMDB.Reader.cs
@@ -17,7 +17,7 @@ namespace SabreTools.DatFiles.Formats
var metadata = new Serialization.CrossModel.EverdriveSMDB().Serialize(metadataFile);
// Convert to the internal format
- ConvertMetadata(metadata, filename, indexId, statsOnly);
+ ConvertMetadata(metadata, filename, indexId, keep, statsOnly);
}
catch (Exception ex) when (!throwOnError)
{
diff --git a/SabreTools.DatFiles/Formats/Hashfile.Reader.cs b/SabreTools.DatFiles/Formats/Hashfile.Reader.cs
index 94937de3..cf1c7d72 100644
--- a/SabreTools.DatFiles/Formats/Hashfile.Reader.cs
+++ b/SabreTools.DatFiles/Formats/Hashfile.Reader.cs
@@ -17,7 +17,7 @@ namespace SabreTools.DatFiles.Formats
var metadata = new Serialization.CrossModel.Hashfile().Serialize(hashfile);
// Convert to the internal format
- ConvertMetadata(metadata, filename, indexId, statsOnly);
+ ConvertMetadata(metadata, filename, indexId, keep, statsOnly);
}
catch (Exception ex) when (!throwOnError)
{
diff --git a/SabreTools.DatFiles/Formats/Logiqx.Reader.cs b/SabreTools.DatFiles/Formats/Logiqx.Reader.cs
index 651a1813..92a24eef 100644
--- a/SabreTools.DatFiles/Formats/Logiqx.Reader.cs
+++ b/SabreTools.DatFiles/Formats/Logiqx.Reader.cs
@@ -22,7 +22,7 @@ namespace SabreTools.DatFiles.Formats
ConvertHeader(metadataFile, keep);
// Convert to the internal format
- ConvertMetadata(metadata, filename, indexId, statsOnly);
+ ConvertMetadata(metadata, filename, indexId, keep, statsOnly);
}
catch (Exception ex) when (!throwOnError)
{
diff --git a/SabreTools.DatFiles/Formats/OfflineList.Reader.cs b/SabreTools.DatFiles/Formats/OfflineList.Reader.cs
index f49e945a..337ebd26 100644
--- a/SabreTools.DatFiles/Formats/OfflineList.Reader.cs
+++ b/SabreTools.DatFiles/Formats/OfflineList.Reader.cs
@@ -27,7 +27,7 @@ namespace SabreTools.DatFiles.Formats
ConvertConfiguration(dat?.Configuration, keep);
// Convert to the internal format
- ConvertMetadata(metadata, filename, indexId, statsOnly);
+ ConvertMetadata(metadata, filename, indexId, keep, statsOnly);
// Convert the GUI to the internal format
ConvertGUI(dat?.GUI);
diff --git a/SabreTools.DatFiles/Formats/RomCenter.Reader.cs b/SabreTools.DatFiles/Formats/RomCenter.Reader.cs
index ecff7abc..3f91e931 100644
--- a/SabreTools.DatFiles/Formats/RomCenter.Reader.cs
+++ b/SabreTools.DatFiles/Formats/RomCenter.Reader.cs
@@ -28,7 +28,7 @@ namespace SabreTools.DatFiles.Formats
ConvertEmulator(metadataFile?.Emulator);
// Convert to the internal format
- ConvertMetadata(metadata, filename, indexId, statsOnly);
+ ConvertMetadata(metadata, filename, indexId, keep, statsOnly);
}
catch (Exception ex) when (!throwOnError)
{
diff --git a/SabreTools.DatFiles/Formats/SeparatedValue.Reader.cs b/SabreTools.DatFiles/Formats/SeparatedValue.Reader.cs
index 5c6678d8..d6c519f5 100644
--- a/SabreTools.DatFiles/Formats/SeparatedValue.Reader.cs
+++ b/SabreTools.DatFiles/Formats/SeparatedValue.Reader.cs
@@ -17,7 +17,7 @@ namespace SabreTools.DatFiles.Formats
var metadata = new Serialization.CrossModel.SeparatedValue().Serialize(metadataFile);
// Convert to the internal format
- ConvertMetadata(metadata, filename, indexId, statsOnly);
+ ConvertMetadata(metadata, filename, indexId, keep, statsOnly);
}
catch (Exception ex) when (!throwOnError)
{