diff --git a/SabreTools.Data.Extensions/MetadataExtensions.cs b/SabreTools.Data.Extensions/MetadataExtensions.cs
index 59643ac3..c46fece7 100644
--- a/SabreTools.Data.Extensions/MetadataExtensions.cs
+++ b/SabreTools.Data.Extensions/MetadataExtensions.cs
@@ -52,13 +52,17 @@ namespace SabreTools.Data.Extensions
Port => null,
RamOption => self.ReadString(RamOption.NameKey),
Release => self.ReadString(Release.NameKey),
+ ReleaseDetails => null,
Rom => self.ReadString(Rom.NameKey),
Sample => self.ReadString(Sample.NameKey),
+ Serials => null,
SharedFeat => self.ReadString(SharedFeat.NameKey),
Slot => self.ReadString(Slot.NameKey),
SlotOption => self.ReadString(SlotOption.NameKey),
SoftwareList => self.ReadString(SoftwareList.NameKey),
Sound => null,
+ SourceDetails => null,
+ Video => null,
_ => null,
};
@@ -106,13 +110,17 @@ namespace SabreTools.Data.Extensions
case Port: break;
case RamOption: self[RamOption.NameKey] = name; break;
case Release: self[Release.NameKey] = name; break;
+ case ReleaseDetails: break;
case Rom: self[Rom.NameKey] = name; break;
case Sample: self[Sample.NameKey] = name; break;
+ case Serials: break;
case SharedFeat: self[SharedFeat.NameKey] = name; break;
case Slot: self[Slot.NameKey] = name; break;
case SlotOption: self[SlotOption.NameKey] = name; break;
case SoftwareList: self[SoftwareList.NameKey] = name; break;
case Sound: break;
+ case SourceDetails: break;
+ case Video: break;
default: break;
}
diff --git a/SabreTools.Data.Models/Metadata/Archive.cs b/SabreTools.Data.Models/Metadata/Archive.cs
index ab7d3929..d80c9ecd 100644
--- a/SabreTools.Data.Models/Metadata/Archive.cs
+++ b/SabreTools.Data.Models/Metadata/Archive.cs
@@ -8,9 +8,105 @@ namespace SabreTools.Data.Models.Metadata
{
#region Keys
+ /// string, No-Intro DB extension
+ public const string NumberKey = "number";
+
+ /// string, No-Intro DB extension
+ public const string CloneKey = "clone";
+
+ /// string, No-Intro DB extension
+ public const string RegParentKey = "regparent";
+
+ /// string, No-Intro DB extension
+ public const string MergeOfKey = "mergeof";
+
+ /// string, No-Intro DB extension
+ public const string MergeNameKey = "mergename";
+
/// string
public const string NameKey = "name";
+ /// string, No-Intro DB extension
+ public const string NameAltKey = "name_alt";
+
+ /// string, No-Intro DB extension
+ public const string RegionKey = "region";
+
+ /// string, No-Intro DB extension
+ public const string LanguagesKey = "languages";
+
+ /// byte, No-Intro DB extension
+ public const string ShowLangKey = "showlang";
+
+ /// string, No-Intro DB extension
+ public const string LangCheckedKey = "langchecked";
+
+ /// string, No-Intro DB extension
+ public const string Version1Key = "version1";
+
+ /// string, No-Intro DB extension
+ public const string Version2Key = "version2";
+
+ /// string, No-Intro DB extension
+ public const string DevStatusKey = "devstatus";
+
+ /// string, No-Intro DB extension
+ public const string AdditionalKey = "additional";
+
+ /// string, No-Intro DB extension
+ public const string Special1Key = "special1";
+
+ /// string, No-Intro DB extension
+ public const string Special2Key = "special2";
+
+ /// byte, No-Intro DB extension
+ public const string AltKey = "alt";
+
+ /// string, No-Intro DB extension
+ public const string GameId1Key = "gameid1";
+
+ /// string, No-Intro DB extension
+ public const string GameId2Key = "gameid2";
+
+ /// string, No-Intro DB extension
+ public const string DescriptionKey = "description";
+
+ /// byte, No-Intro DB extension
+ public const string BiosKey = "bios";
+
+ /// byte, No-Intro DB extension
+ public const string LicensedKey = "licensed";
+
+ /// byte, No-Intro DB extension
+ public const string PirateKey = "pirate";
+
+ /// byte, No-Intro DB extension
+ public const string PhysicalKey = "physical";
+
+ /// byte, No-Intro DB extension
+ public const string CompleteKey = "complete";
+
+ /// byte, No-Intro DB extension
+ public const string AdultKey = "adult";
+
+ /// byte, No-Intro DB extension
+ public const string DatKey = "dat";
+
+ /// byte, No-Intro DB extension
+ public const string ListedKey = "listed";
+
+ /// byte, No-Intro DB extension
+ public const string PrivateKey = "private";
+
+ /// string, No-Intro DB extension
+ public const string StickyNoteKey = "stickynote";
+
+ /// string, No-Intro DB extension
+ public const string DatterNoteKey = "datternote";
+
+ /// string, No-Intro DB extension
+ public const string CategoriesKey = "categories";
+
#endregion
public Archive() => Type = ItemType.Archive;
diff --git a/SabreTools.Data.Models/Metadata/Enums.cs b/SabreTools.Data.Models/Metadata/Enums.cs
index ae8a0447..59913ea0 100644
--- a/SabreTools.Data.Models/Metadata/Enums.cs
+++ b/SabreTools.Data.Models/Metadata/Enums.cs
@@ -288,14 +288,17 @@ namespace SabreTools.Data.Models.Metadata
Port,
RamOption,
Release,
+ ReleaseDetails,
Rom,
Sample,
+ Serials,
SharedFeat,
Slot,
SlotOption,
Software,
SoftwareList,
Sound,
+ SourceDetails,
Video,
///
diff --git a/SabreTools.Data.Models/Metadata/ReleaseDetails.cs b/SabreTools.Data.Models/Metadata/ReleaseDetails.cs
new file mode 100644
index 00000000..6a1a9fa9
--- /dev/null
+++ b/SabreTools.Data.Models/Metadata/ReleaseDetails.cs
@@ -0,0 +1,63 @@
+using System.Xml.Serialization;
+using Newtonsoft.Json;
+
+namespace SabreTools.Data.Models.Metadata
+{
+ [JsonObject("release_details"), XmlRoot("release_details")]
+ public class ReleaseDetails : DatItem
+ {
+ #region Keys
+
+ /// string
+ public const string IdKey = "id";
+
+ /// string
+ public const string AppendToNumberKey = "appendtonumber";
+
+ /// string
+ public const string DateKey = "date";
+
+ /// string
+ public const string OriginalFormatKey = "originalformat";
+
+ /// string
+ public const string GroupKey = "group";
+
+ /// string
+ public const string DirNameKey = "dirname";
+
+ /// string
+ public const string NfoNameKey = "nfoname";
+
+ /// string
+ public const string NfoSizeKey = "nfosize";
+
+ /// string
+ public const string NfoCRCKey = "nfocrc";
+
+ /// string
+ public const string ArchiveNameKey = "archivename";
+
+ /// string
+ public const string RomInfoKey = "rominfo";
+
+ /// string
+ public const string CategoryKey = "category";
+
+ /// string
+ public const string CommentKey = "comment";
+
+ /// string
+ public const string ToolKey = "tool";
+
+ /// string
+ public const string RegionKey = "region";
+
+ /// string
+ public const string OriginKey = "origin";
+
+ #endregion
+
+ public ReleaseDetails() => Type = ItemType.ReleaseDetails;
+ }
+}
diff --git a/SabreTools.Data.Models/Metadata/Serials.cs b/SabreTools.Data.Models/Metadata/Serials.cs
new file mode 100644
index 00000000..9f451b3e
--- /dev/null
+++ b/SabreTools.Data.Models/Metadata/Serials.cs
@@ -0,0 +1,57 @@
+using System.Xml.Serialization;
+using Newtonsoft.Json;
+
+namespace SabreTools.Data.Models.Metadata
+{
+ [JsonObject("serials"), XmlRoot("serials")]
+ public class Serials : DatItem
+ {
+ #region Keys
+
+ /// string
+ public const string MediaSerial1Key = "mediaserial1";
+
+ /// string
+ public const string MediaSerial2Key = "mediaserial2";
+
+ /// string
+ public const string MediaSerial3Key = "mediaserial3";
+
+ /// string
+ public const string PCBSerialKey = "pcbserial";
+
+ /// string
+ public const string RomChipSerial1Key = "romchipserial1";
+
+ /// string
+ public const string RomChipSerial2Key = "romchipserial2";
+
+ /// string
+ public const string LockoutSerialKey = "lockoutserial";
+
+ /// string
+ public const string SaveChipSerialKey = "savechipserial";
+
+ /// string
+ public const string ChipSerialKey = "chipserial";
+
+ /// string
+ public const string BoxSerialKey = "boxserial";
+
+ /// string
+ public const string MediaStampKey = "mediastamp";
+
+ /// string
+ public const string BoxBarcodeKey = "boxbarcode";
+
+ /// string
+ public const string DigitalSerial1Key = "digitalserial1";
+
+ /// string
+ public const string DigitalSerial2Key = "digitalserial2";
+
+ #endregion
+
+ public Serials() => Type = ItemType.Serials;
+ }
+}
diff --git a/SabreTools.Data.Models/Metadata/SourceDetails.cs b/SabreTools.Data.Models/Metadata/SourceDetails.cs
new file mode 100644
index 00000000..b151d954
--- /dev/null
+++ b/SabreTools.Data.Models/Metadata/SourceDetails.cs
@@ -0,0 +1,87 @@
+using System.Xml.Serialization;
+using Newtonsoft.Json;
+
+namespace SabreTools.Data.Models.Metadata
+{
+ [JsonObject("source_details"), XmlRoot("source_details")]
+ public class SourceDetails : DatItem
+ {
+ #region Keys
+
+ /// string
+ public const string IdKey = "id";
+
+ /// string
+ public const string AppendToNumberKey = "appendtonumber";
+
+ /// string
+ public const string SectionKey = "section";
+
+ /// string
+ public const string RomInfoKey = "rominfo";
+
+ /// string
+ public const string DumpDateKey = "dumpdate";
+
+ /// byte
+ public const string DumpDateInfoKey = "dumpdateinfo";
+
+ /// string
+ public const string ReleaseDateKey = "releasedate";
+
+ /// byte
+ public const string ReleaseDateInfoKey = "releasedateinfo";
+
+ /// string
+ public const string DumperKey = "dumper";
+
+ /// string
+ public const string ProjectKey = "project";
+
+ /// string
+ public const string OriginalFormatKey = "originalformat";
+
+ /// byte
+ public const string NodumpKey = "nodump";
+
+ /// string
+ public const string ToolKey = "tool";
+
+ /// string
+ public const string OriginKey = "origin";
+
+ /// string
+ public const string Comment1Key = "comment1";
+
+ /// string
+ public const string Comment2Key = "comment2";
+
+ /// string
+ public const string Link1Key = "link1";
+
+ /// byte
+ public const string Link1PublicKey = "link1public";
+
+ /// string
+ public const string Link2Key = "link2";
+
+ /// byte
+ public const string Link2PublicKey = "link2public";
+
+ /// string
+ public const string Link3Key = "link3";
+
+ /// byte
+ public const string Link3PublicKey = "link3public";
+
+ /// string
+ public const string RegionKey = "region";
+
+ /// string
+ public const string MediaTitleKey = "mediatitle";
+
+ #endregion
+
+ public SourceDetails() => Type = ItemType.SourceDetails;
+ }
+}
diff --git a/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs b/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs
index e624e82f..51bfb603 100644
--- a/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs
+++ b/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs
@@ -354,7 +354,39 @@ namespace SabreTools.Metadata.DatFiles.Test
{
return new Data.Models.Metadata.Archive
{
+ [Data.Models.Metadata.Archive.NumberKey] = "number",
+ [Data.Models.Metadata.Archive.CloneKey] = "clone",
+ [Data.Models.Metadata.Archive.RegParentKey] = "regparent",
+ [Data.Models.Metadata.Archive.MergeOfKey] = "mergeof",
+ [Data.Models.Metadata.Archive.MergeNameKey] = "mergename",
[Data.Models.Metadata.Archive.NameKey] = "name",
+ [Data.Models.Metadata.Archive.NameAltKey] = "name_alt",
+ [Data.Models.Metadata.Archive.RegionKey] = "region",
+ [Data.Models.Metadata.Archive.LanguagesKey] = "languages",
+ [Data.Models.Metadata.Archive.ShowLangKey] = "showlang",
+ [Data.Models.Metadata.Archive.LangCheckedKey] = "langchecked",
+ [Data.Models.Metadata.Archive.Version1Key] = "version1",
+ [Data.Models.Metadata.Archive.Version2Key] = "version2",
+ [Data.Models.Metadata.Archive.DevStatusKey] = "devstatus",
+ [Data.Models.Metadata.Archive.AdditionalKey] = "additional",
+ [Data.Models.Metadata.Archive.Special1Key] = "special1",
+ [Data.Models.Metadata.Archive.Special2Key] = "special2",
+ [Data.Models.Metadata.Archive.AltKey] = "alt",
+ [Data.Models.Metadata.Archive.GameId1Key] = "gameid1",
+ [Data.Models.Metadata.Archive.GameId2Key] = "gameid2",
+ [Data.Models.Metadata.Archive.DescriptionKey] = "description",
+ [Data.Models.Metadata.Archive.BiosKey] = "bios",
+ [Data.Models.Metadata.Archive.LicensedKey] = "licensed",
+ [Data.Models.Metadata.Archive.PirateKey] = "pirate",
+ [Data.Models.Metadata.Archive.PhysicalKey] = "physical",
+ [Data.Models.Metadata.Archive.CompleteKey] = "complete",
+ [Data.Models.Metadata.Archive.AdultKey] = "adult",
+ [Data.Models.Metadata.Archive.DatKey] = "dat",
+ [Data.Models.Metadata.Archive.ListedKey] = "listed",
+ [Data.Models.Metadata.Archive.PrivateKey] = "private",
+ [Data.Models.Metadata.Archive.StickyNoteKey] = "stickynote",
+ [Data.Models.Metadata.Archive.DatterNoteKey] = "datternote",
+ [Data.Models.Metadata.Archive.CategoriesKey] = "categories",
};
}
@@ -711,6 +743,29 @@ namespace SabreTools.Metadata.DatFiles.Test
};
}
+ private static Data.Models.Metadata.ReleaseDetails CreateMetadataReleaseDetails()
+ {
+ return new Data.Models.Metadata.ReleaseDetails
+ {
+ [Data.Models.Metadata.ReleaseDetails.IdKey] = "id",
+ [Data.Models.Metadata.ReleaseDetails.AppendToNumberKey] = "appendtonumber",
+ [Data.Models.Metadata.ReleaseDetails.DateKey] = "date",
+ [Data.Models.Metadata.ReleaseDetails.OriginalFormatKey] = "originalformat",
+ [Data.Models.Metadata.ReleaseDetails.GroupKey] = "group",
+ [Data.Models.Metadata.ReleaseDetails.DirNameKey] = "dirname",
+ [Data.Models.Metadata.ReleaseDetails.NfoNameKey] = "nfoname",
+ [Data.Models.Metadata.ReleaseDetails.NfoSizeKey] = "nfosize",
+ [Data.Models.Metadata.ReleaseDetails.NfoCRCKey] = "nfocrc",
+ [Data.Models.Metadata.ReleaseDetails.ArchiveNameKey] = "archivename",
+ [Data.Models.Metadata.ReleaseDetails.RomInfoKey] = "rominfo",
+ [Data.Models.Metadata.ReleaseDetails.CategoryKey] = "category",
+ [Data.Models.Metadata.ReleaseDetails.CommentKey] = "comment",
+ [Data.Models.Metadata.ReleaseDetails.ToolKey] = "tool",
+ [Data.Models.Metadata.ReleaseDetails.RegionKey] = "region",
+ [Data.Models.Metadata.ReleaseDetails.OriginKey] = "origin",
+ };
+ }
+
private static Data.Models.Metadata.Rom CreateMetadataRom()
{
return new Data.Models.Metadata.Rom
@@ -822,6 +877,27 @@ namespace SabreTools.Metadata.DatFiles.Test
};
}
+ private static Data.Models.Metadata.Serials CreateMetadataSerials()
+ {
+ return new Data.Models.Metadata.Serials
+ {
+ [Data.Models.Metadata.Serials.MediaSerial1Key] = "mediaserial1",
+ [Data.Models.Metadata.Serials.MediaSerial2Key] = "mediaserial2",
+ [Data.Models.Metadata.Serials.MediaSerial3Key] = "mediaserial3",
+ [Data.Models.Metadata.Serials.PCBSerialKey] = "pcbserial",
+ [Data.Models.Metadata.Serials.RomChipSerial1Key] = "romchipserial1",
+ [Data.Models.Metadata.Serials.RomChipSerial2Key] = "romchipserial2",
+ [Data.Models.Metadata.Serials.LockoutSerialKey] = "lockoutserial",
+ [Data.Models.Metadata.Serials.SaveChipSerialKey] = "savechipserial",
+ [Data.Models.Metadata.Serials.ChipSerialKey] = "chipserial",
+ [Data.Models.Metadata.Serials.BoxSerialKey] = "boxserial",
+ [Data.Models.Metadata.Serials.MediaStampKey] = "mediastamp",
+ [Data.Models.Metadata.Serials.BoxBarcodeKey] = "boxbarcode",
+ [Data.Models.Metadata.Serials.DigitalSerial1Key] = "digitalserial1",
+ [Data.Models.Metadata.Serials.DigitalSerial2Key] = "digitalserial2",
+ };
+ }
+
private static Data.Models.Metadata.SharedFeat CreateMetadataSharedFeat()
{
return new Data.Models.Metadata.SharedFeat
@@ -889,6 +965,37 @@ namespace SabreTools.Metadata.DatFiles.Test
};
}
+ private static Data.Models.Metadata.SourceDetails CreateMetadataSourceDetails()
+ {
+ return new Data.Models.Metadata.SourceDetails
+ {
+ [Data.Models.Metadata.SourceDetails.IdKey] = "id",
+ [Data.Models.Metadata.SourceDetails.AppendToNumberKey] = "appendtonumber",
+ [Data.Models.Metadata.SourceDetails.SectionKey] = "section",
+ [Data.Models.Metadata.SourceDetails.RomInfoKey] = "rominfo",
+ [Data.Models.Metadata.SourceDetails.DumpDateKey] = "dumpdate",
+ [Data.Models.Metadata.SourceDetails.DumpDateInfoKey] = "dumpdateinfo",
+ [Data.Models.Metadata.SourceDetails.ReleaseDateKey] = "releasedate",
+ [Data.Models.Metadata.SourceDetails.ReleaseDateInfoKey] = "releasedateinfo",
+ [Data.Models.Metadata.SourceDetails.DumperKey] = "dumper",
+ [Data.Models.Metadata.SourceDetails.ProjectKey] = "project",
+ [Data.Models.Metadata.SourceDetails.OriginalFormatKey] = "originalformat",
+ [Data.Models.Metadata.SourceDetails.NodumpKey] = "nodump",
+ [Data.Models.Metadata.SourceDetails.ToolKey] = "tool",
+ [Data.Models.Metadata.SourceDetails.OriginKey] = "origin",
+ [Data.Models.Metadata.SourceDetails.Comment1Key] = "comment1",
+ [Data.Models.Metadata.SourceDetails.Comment2Key] = "comment2",
+ [Data.Models.Metadata.SourceDetails.Link1Key] = "link1",
+ [Data.Models.Metadata.SourceDetails.Link1PublicKey] = "link1public",
+ [Data.Models.Metadata.SourceDetails.Link2Key] = "link2",
+ [Data.Models.Metadata.SourceDetails.Link2PublicKey] = "link2public",
+ [Data.Models.Metadata.SourceDetails.Link3Key] = "link3",
+ [Data.Models.Metadata.SourceDetails.Link3PublicKey] = "link3public",
+ [Data.Models.Metadata.SourceDetails.RegionKey] = "region",
+ [Data.Models.Metadata.SourceDetails.MediaTitleKey] = "mediatitle",
+ };
+ }
+
private static Data.Models.Logiqx.Trurip CreateMetadataTrurip()
{
return new Data.Models.Logiqx.Trurip
diff --git a/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs b/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs
index 03bf581d..e6fb6f2d 100644
--- a/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs
+++ b/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs
@@ -635,7 +635,39 @@ namespace SabreTools.Metadata.DatFiles.Test
private static void ValidateMetadataArchive(Data.Models.Metadata.Archive? archive)
{
Assert.NotNull(archive);
+ Assert.Equal("number", archive.ReadString(Data.Models.Metadata.Archive.NumberKey));
+ Assert.Equal("clone", archive.ReadString(Data.Models.Metadata.Archive.CloneKey));
+ Assert.Equal("regparent", archive.ReadString(Data.Models.Metadata.Archive.RegParentKey));
+ Assert.Equal("mergeof", archive.ReadString(Data.Models.Metadata.Archive.MergeOfKey));
+ Assert.Equal("mergename", archive.ReadString(Data.Models.Metadata.Archive.MergeNameKey));
Assert.Equal("name", archive.ReadString(Data.Models.Metadata.Archive.NameKey));
+ Assert.Equal("name_alt", archive.ReadString(Data.Models.Metadata.Archive.NameAltKey));
+ Assert.Equal("region", archive.ReadString(Data.Models.Metadata.Archive.RegionKey));
+ Assert.Equal("languages", archive.ReadString(Data.Models.Metadata.Archive.LanguagesKey));
+ Assert.Equal("showlang", archive.ReadString(Data.Models.Metadata.Archive.ShowLangKey));
+ Assert.Equal("langchecked", archive.ReadString(Data.Models.Metadata.Archive.LangCheckedKey));
+ Assert.Equal("version1", archive.ReadString(Data.Models.Metadata.Archive.Version1Key));
+ Assert.Equal("version2", archive.ReadString(Data.Models.Metadata.Archive.Version2Key));
+ Assert.Equal("devstatus", archive.ReadString(Data.Models.Metadata.Archive.DevStatusKey));
+ Assert.Equal("additional", archive.ReadString(Data.Models.Metadata.Archive.AdditionalKey));
+ Assert.Equal("special1", archive.ReadString(Data.Models.Metadata.Archive.Special1Key));
+ Assert.Equal("special2", archive.ReadString(Data.Models.Metadata.Archive.Special2Key));
+ Assert.Equal("alt", archive.ReadString(Data.Models.Metadata.Archive.AltKey));
+ Assert.Equal("gameid1", archive.ReadString(Data.Models.Metadata.Archive.GameId1Key));
+ Assert.Equal("gameid2", archive.ReadString(Data.Models.Metadata.Archive.GameId2Key));
+ Assert.Equal("description", archive.ReadString(Data.Models.Metadata.Archive.DescriptionKey));
+ Assert.Equal("bios", archive.ReadString(Data.Models.Metadata.Archive.BiosKey));
+ Assert.Equal("licensed", archive.ReadString(Data.Models.Metadata.Archive.LicensedKey));
+ Assert.Equal("pirate", archive.ReadString(Data.Models.Metadata.Archive.PirateKey));
+ Assert.Equal("physical", archive.ReadString(Data.Models.Metadata.Archive.PhysicalKey));
+ Assert.Equal("complete", archive.ReadString(Data.Models.Metadata.Archive.CompleteKey));
+ Assert.Equal("adult", archive.ReadString(Data.Models.Metadata.Archive.AdultKey));
+ Assert.Equal("dat", archive.ReadString(Data.Models.Metadata.Archive.DatKey));
+ Assert.Equal("listed", archive.ReadString(Data.Models.Metadata.Archive.ListedKey));
+ Assert.Equal("private", archive.ReadString(Data.Models.Metadata.Archive.PrivateKey));
+ Assert.Equal("stickynote", archive.ReadString(Data.Models.Metadata.Archive.StickyNoteKey));
+ Assert.Equal("datternote", archive.ReadString(Data.Models.Metadata.Archive.DatterNoteKey));
+ Assert.Equal("categories", archive.ReadString(Data.Models.Metadata.Archive.CategoriesKey));
}
private static void ValidateMetadataBiosSet(Data.Models.Metadata.BiosSet? biosSet)
@@ -979,6 +1011,27 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal("region", release.ReadString(Data.Models.Metadata.Release.RegionKey));
}
+ private static void ValidateMetadataReleaseDetails(Data.Models.Metadata.ReleaseDetails? releaseDetails)
+ {
+ Assert.NotNull(releaseDetails);
+ Assert.Equal("id", releaseDetails.ReadString(Data.Models.Metadata.ReleaseDetails.IdKey));
+ Assert.Equal("appendtonumber", releaseDetails.ReadString(Data.Models.Metadata.ReleaseDetails.AppendToNumberKey));
+ Assert.Equal("date", releaseDetails.ReadString(Data.Models.Metadata.ReleaseDetails.DateKey));
+ Assert.Equal("originalformat", releaseDetails.ReadString(Data.Models.Metadata.ReleaseDetails.OriginalFormatKey));
+ Assert.Equal("group", releaseDetails.ReadString(Data.Models.Metadata.ReleaseDetails.GroupKey));
+ Assert.Equal("dirname", releaseDetails.ReadString(Data.Models.Metadata.ReleaseDetails.DirNameKey));
+ Assert.Equal("nfoname", releaseDetails.ReadString(Data.Models.Metadata.ReleaseDetails.NfoNameKey));
+ Assert.Equal("nfosize", releaseDetails.ReadString(Data.Models.Metadata.ReleaseDetails.NfoSizeKey));
+ Assert.Equal("nfocrc", releaseDetails.ReadString(Data.Models.Metadata.ReleaseDetails.NfoCRCKey));
+ Assert.Equal("archivename", releaseDetails.ReadString(Data.Models.Metadata.ReleaseDetails.ArchiveNameKey));
+ Assert.Equal("rominfo", releaseDetails.ReadString(Data.Models.Metadata.ReleaseDetails.RomInfoKey));
+ Assert.Equal("category", releaseDetails.ReadString(Data.Models.Metadata.ReleaseDetails.CategoryKey));
+ Assert.Equal("comment", releaseDetails.ReadString(Data.Models.Metadata.ReleaseDetails.CommentKey));
+ Assert.Equal("tool", releaseDetails.ReadString(Data.Models.Metadata.ReleaseDetails.ToolKey));
+ Assert.Equal("region", releaseDetails.ReadString(Data.Models.Metadata.ReleaseDetails.RegionKey));
+ Assert.Equal("origin", releaseDetails.ReadString(Data.Models.Metadata.ReleaseDetails.OriginKey));
+ }
+
private static void ValidateMetadataRom(Data.Models.Metadata.Rom? rom)
{
Assert.NotNull(rom);
@@ -1086,6 +1139,25 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal("name", sample.ReadString(Data.Models.Metadata.Sample.NameKey));
}
+ private static void ValidateMetadataSerials(Data.Models.Metadata.Serials? serials)
+ {
+ Assert.NotNull(serials);
+ Assert.Equal("mediaserial1", serials.ReadString(Data.Models.Metadata.Serials.MediaSerial1Key));
+ Assert.Equal("mediaserial2", serials.ReadString(Data.Models.Metadata.Serials.MediaSerial2Key));
+ Assert.Equal("mediaserial3", serials.ReadString(Data.Models.Metadata.Serials.MediaSerial3Key));
+ Assert.Equal("pcbserial", serials.ReadString(Data.Models.Metadata.Serials.PCBSerialKey));
+ Assert.Equal("romchipserial1", serials.ReadString(Data.Models.Metadata.Serials.RomChipSerial1Key));
+ Assert.Equal("romchipserial2", serials.ReadString(Data.Models.Metadata.Serials.RomChipSerial2Key));
+ Assert.Equal("lockoutserial", serials.ReadString(Data.Models.Metadata.Serials.LockoutSerialKey));
+ Assert.Equal("savechipserial", serials.ReadString(Data.Models.Metadata.Serials.SaveChipSerialKey));
+ Assert.Equal("chipserial", serials.ReadString(Data.Models.Metadata.Serials.ChipSerialKey));
+ Assert.Equal("boxserial", serials.ReadString(Data.Models.Metadata.Serials.BoxSerialKey));
+ Assert.Equal("mediastamp", serials.ReadString(Data.Models.Metadata.Serials.MediaStampKey));
+ Assert.Equal("boxbarcode", serials.ReadString(Data.Models.Metadata.Serials.BoxBarcodeKey));
+ Assert.Equal("digitalserial1", serials.ReadString(Data.Models.Metadata.Serials.DigitalSerial1Key));
+ Assert.Equal("digitalserial2", serials.ReadString(Data.Models.Metadata.Serials.DigitalSerial2Key));
+ }
+
private static void ValidateMetadataSharedFeat(Data.Models.Metadata.SharedFeat? sharedFeat)
{
Assert.NotNull(sharedFeat);
@@ -1131,6 +1203,35 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal(12345, sound.ReadLong(Data.Models.Metadata.Sound.ChannelsKey));
}
+ private static void ValidateMetadataSourceDetails(Data.Models.Metadata.SourceDetails? sourceDetails)
+ {
+ Assert.NotNull(sourceDetails);
+ Assert.Equal("id", sourceDetails.ReadString(Data.Models.Metadata.SourceDetails.IdKey));
+ Assert.Equal("appendtonumber", sourceDetails.ReadString(Data.Models.Metadata.SourceDetails.AppendToNumberKey));
+ Assert.Equal("section", sourceDetails.ReadString(Data.Models.Metadata.SourceDetails.SectionKey));
+ Assert.Equal("rominfo", sourceDetails.ReadString(Data.Models.Metadata.SourceDetails.RomInfoKey));
+ Assert.Equal("dumpdate", sourceDetails.ReadString(Data.Models.Metadata.SourceDetails.DumpDateKey));
+ Assert.Equal("dumpdateinfo", sourceDetails.ReadString(Data.Models.Metadata.SourceDetails.DumpDateInfoKey));
+ Assert.Equal("releasedate", sourceDetails.ReadString(Data.Models.Metadata.SourceDetails.ReleaseDateKey));
+ Assert.Equal("releasedateinfo", sourceDetails.ReadString(Data.Models.Metadata.SourceDetails.ReleaseDateInfoKey));
+ Assert.Equal("dumper", sourceDetails.ReadString(Data.Models.Metadata.SourceDetails.DumperKey));
+ Assert.Equal("project", sourceDetails.ReadString(Data.Models.Metadata.SourceDetails.ProjectKey));
+ Assert.Equal("originalformat", sourceDetails.ReadString(Data.Models.Metadata.SourceDetails.OriginalFormatKey));
+ Assert.Equal("nodump", sourceDetails.ReadString(Data.Models.Metadata.SourceDetails.NodumpKey));
+ Assert.Equal("tool", sourceDetails.ReadString(Data.Models.Metadata.SourceDetails.ToolKey));
+ Assert.Equal("origin", sourceDetails.ReadString(Data.Models.Metadata.SourceDetails.OriginKey));
+ Assert.Equal("comment1", sourceDetails.ReadString(Data.Models.Metadata.SourceDetails.Comment1Key));
+ Assert.Equal("comment2", sourceDetails.ReadString(Data.Models.Metadata.SourceDetails.Comment2Key));
+ Assert.Equal("link1", sourceDetails.ReadString(Data.Models.Metadata.SourceDetails.Link1Key));
+ Assert.Equal("link1public", sourceDetails.ReadString(Data.Models.Metadata.SourceDetails.Link1PublicKey));
+ Assert.Equal("link2", sourceDetails.ReadString(Data.Models.Metadata.SourceDetails.Link2Key));
+ Assert.Equal("link2public", sourceDetails.ReadString(Data.Models.Metadata.SourceDetails.Link2PublicKey));
+ Assert.Equal("link3", sourceDetails.ReadString(Data.Models.Metadata.SourceDetails.Link3Key));
+ Assert.Equal("link3public", sourceDetails.ReadString(Data.Models.Metadata.SourceDetails.Link3PublicKey));
+ Assert.Equal("region", sourceDetails.ReadString(Data.Models.Metadata.SourceDetails.RegionKey));
+ Assert.Equal("mediatitle", sourceDetails.ReadString(Data.Models.Metadata.SourceDetails.MediaTitleKey));
+ }
+
private static void ValidateMetadataTrurip(Data.Models.Logiqx.Trurip? trurip)
{
Assert.NotNull(trurip);
diff --git a/SabreTools.Metadata.DatItems/DatItem.cs b/SabreTools.Metadata.DatItems/DatItem.cs
index 60d6c6b4..e542490d 100644
--- a/SabreTools.Metadata.DatItems/DatItem.cs
+++ b/SabreTools.Metadata.DatItems/DatItem.cs
@@ -45,6 +45,7 @@ namespace SabreTools.Metadata.DatItems
[XmlInclude(typeof(Port))]
[XmlInclude(typeof(RamOption))]
[XmlInclude(typeof(Release))]
+ [XmlInclude(typeof(ReleaseDetails))]
[XmlInclude(typeof(Rom))]
[XmlInclude(typeof(Sample))]
[XmlInclude(typeof(SharedFeat))]
@@ -52,6 +53,7 @@ namespace SabreTools.Metadata.DatItems
[XmlInclude(typeof(SlotOption))]
[XmlInclude(typeof(SoftwareList))]
[XmlInclude(typeof(Sound))]
+ [XmlInclude(typeof(SourceDetails))]
public abstract class DatItem : ModelBackedItem, IEquatable, IComparable, ICloneable
{
#region Constants
diff --git a/SabreTools.Metadata.DatItems/Formats/ReleaseDetails.cs b/SabreTools.Metadata.DatItems/Formats/ReleaseDetails.cs
index bbb48229..cd39f5ef 100644
--- a/SabreTools.Metadata.DatItems/Formats/ReleaseDetails.cs
+++ b/SabreTools.Metadata.DatItems/Formats/ReleaseDetails.cs
@@ -1,188 +1,39 @@
using System.Xml.Serialization;
using Newtonsoft.Json;
+using SabreTools.Data.Extensions;
-// TODO: Add item mappings for all fields
namespace SabreTools.Metadata.DatItems.Formats
{
///
/// Represents a single release details item
///
[JsonObject("release_details"), XmlRoot("release_details")]
- public sealed class ReleaseDetails : DatItem
+ public sealed class ReleaseDetails : DatItem
{
#region Fields
/// />
protected override ItemType ItemType => ItemType.ReleaseDetails;
- ///
- /// Id value
- ///
- /// TODO: Is this required?
- [JsonProperty("id", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("id")]
- public string? Id { get; set; }
-
- ///
- /// Directory name value
- ///
- [JsonProperty("dirname", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("dirname")]
- public string? DirName { get; set; }
-
- ///
- /// Rom info value
- ///
- [JsonProperty("rominfo", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("rominfo")]
- public string? RomInfo { get; set; }
-
- ///
- /// Category value
- ///
- [JsonProperty("category", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("category")]
- public string? Category { get; set; }
-
- ///
- /// NFO name value
- ///
- [JsonProperty("nfoname", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("nfoname")]
- public string? NfoName { get; set; }
-
- ///
- /// NFO size value
- ///
- [JsonProperty("nfosize", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("nfosize")]
- public long? NfoSize { get; set; }
-
- ///
- /// NFO CRC value
- ///
- [JsonProperty("nfocrc", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("nfocrc")]
- public string? NfoCrc { get; set; }
-
- ///
- /// Archive name value
- ///
- [JsonProperty("archivename", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("archivename")]
- public string? ArchiveName { get; set; }
-
- ///
- /// Original format value
- ///
- [JsonProperty("originalformat", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("originalformat")]
- public string? OriginalFormat { get; set; }
-
- ///
- /// Date value
- ///
- [JsonProperty("date", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("date")]
- public string? Date { get; set; }
-
- ///
- /// Grpup value
- ///
- [JsonProperty("group", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("group")]
- public string? Group { get; set; }
-
- ///
- /// Comment value
- ///
- [JsonProperty("comment", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("comment")]
- public string? Comment { get; set; }
-
- ///
- /// Tool value
- ///
- [JsonProperty("tool", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("tool")]
- public string? Tool { get; set; }
-
- ///
- /// Region value
- ///
- [JsonProperty("region", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("region")]
- public string? Region { get; set; }
-
- ///
- /// Origin value
- ///
- [JsonProperty("origin", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("origin")]
- public string? Origin { get; set; }
-
#endregion
#region Constructors
- ///
- /// Create a default, empty ReleaseDetails object
- ///
- public ReleaseDetails()
- {
- Write(Data.Models.Metadata.DatItem.TypeKey, ItemType);
- }
+ public ReleaseDetails() : base() { }
+ public ReleaseDetails(Data.Models.Metadata.ReleaseDetails item) : base(item) { }
+
+ public ReleaseDetails(Data.Models.Metadata.ReleaseDetails item, Machine machine, Source source) : this(item)
+ {
+ Write(SourceKey, source);
+ CopyMachineInformation(machine);
+ }
#endregion
#region Cloning Methods
///
- public override object Clone()
- {
- var releaseDetails = new ReleaseDetails()
- {
- Id = this.Id,
- DirName = this.DirName,
- RomInfo = this.RomInfo,
- Category = this.Category,
- NfoName = this.NfoName,
- NfoSize = this.NfoSize,
- NfoCrc = this.NfoCrc,
- ArchiveName = this.ArchiveName,
- OriginalFormat = this.OriginalFormat,
- Date = this.Date,
- Group = this.Group,
- Comment = this.Comment,
- Tool = this.Tool,
- Region = this.Region,
- Origin = this.Origin,
- };
- releaseDetails.Write(DupeTypeKey, Read(DupeTypeKey));
- releaseDetails.Write(MachineKey, GetMachine());
- releaseDetails.Write(RemoveKey, ReadBool(RemoveKey));
- releaseDetails.Write(SourceKey, Read(SourceKey));
- releaseDetails.Write(Data.Models.Metadata.DatItem.TypeKey, ReadString(Data.Models.Metadata.DatItem.TypeKey).AsItemType().AsStringValue());
-
- return releaseDetails;
- }
-
- #endregion
-
- #region Comparision Methods
-
- ///
- public override bool Equals(DatItem? other)
- {
- // If we don't have a Details, return false
- if (ReadString(Data.Models.Metadata.DatItem.TypeKey) != other?.ReadString(Data.Models.Metadata.DatItem.TypeKey))
- return false;
-
- // Otherwise, treat it as a Details
- ReleaseDetails? newOther = other as ReleaseDetails;
-
- // If the Details information matches
- return Id == newOther!.Id
- && DirName == newOther.DirName
- && RomInfo == newOther.RomInfo
- && Category == newOther.Category
- && NfoName == newOther.NfoName
- && NfoSize == newOther.NfoSize
- && NfoCrc == newOther.NfoCrc
- && ArchiveName == newOther.ArchiveName
- && OriginalFormat == newOther.OriginalFormat
- && Date == newOther.Date
- && Group == newOther.Group
- && Comment == newOther.Comment
- && Tool == newOther.Tool
- && Region == newOther.Region
- && Origin == newOther.Origin;
- }
+ public override object Clone() => new ReleaseDetails(_internal.Clone() as Data.Models.Metadata.ReleaseDetails ?? []);
#endregion
}
diff --git a/SabreTools.Metadata.DatItems/Formats/Serials.cs b/SabreTools.Metadata.DatItems/Formats/Serials.cs
index 1b1d0cdb..344ced23 100644
--- a/SabreTools.Metadata.DatItems/Formats/Serials.cs
+++ b/SabreTools.Metadata.DatItems/Formats/Serials.cs
@@ -1,114 +1,32 @@
using System.Xml.Serialization;
using Newtonsoft.Json;
+using SabreTools.Data.Extensions;
-// TODO: Add item mappings for all fields
namespace SabreTools.Metadata.DatItems.Formats
{
///
/// Represents a single serials item
///
[JsonObject("serials"), XmlRoot("serials")]
- public sealed class Serials : DatItem
+ public sealed class Serials : DatItem
{
#region Fields
/// />
protected override ItemType ItemType => ItemType.Serials;
- ///
- /// Digital serial 1 value
- ///
- [JsonProperty("digital_serial1", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("digital_serial1")]
- public string? DigitalSerial1 { get; set; }
-
- ///
- /// Digital serial 2 value
- ///
- [JsonProperty("digital_serial2", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("digital_serial2")]
- public string? DigitalSerial2 { get; set; }
-
- ///
- /// Media serial 1 value
- ///
- [JsonProperty("media_serial1", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("media_serial1")]
- public string? MediaSerial1 { get; set; }
-
- ///
- /// Media serial 2 value
- ///
- [JsonProperty("media_serial2", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("media_serial2")]
- public string? MediaSerial2 { get; set; }
-
- ///
- /// Media serial 3 value
- ///
- [JsonProperty("media_serial3", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("media_serial3")]
- public string? MediaSerial3 { get; set; }
-
- ///
- /// PCB serial value
- ///
- [JsonProperty("pcb_serial", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("pcb_serial")]
- public string? PcbSerial { get; set; }
-
- ///
- /// Rom chip serial 1 value
- ///
- [JsonProperty("romchip_serial1", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("romchip_serial1")]
- public string? RomChipSerial1 { get; set; }
-
- ///
- /// Rom chip serial 2 value
- ///
- [JsonProperty("romchip_serial2", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("romchip_serial2")]
- public string? RomChipSerial2 { get; set; }
-
- ///
- /// Lockout serial value
- ///
- [JsonProperty("lockout_serial", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("lockout_serial")]
- public string? LockoutSerial { get; set; }
-
- ///
- /// Save chip serial value
- ///
- [JsonProperty("savechip_serial", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("savechip_serial")]
- public string? SaveChipSerial { get; set; }
-
- ///
- /// Chip serial value
- ///
- [JsonProperty("chip_serial", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("chip_serial")]
- public string? ChipSerial { get; set; }
-
- ///
- /// Box serial value
- ///
- [JsonProperty("box_serial", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("box_serial")]
- public string? BoxSerial { get; set; }
-
- ///
- /// Media stamp value
- ///
- [JsonProperty("mediastamp", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("mediastamp")]
- public string? MediaStamp { get; set; }
-
- ///
- /// Box barcode value
- ///
- [JsonProperty("box_barcode", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("box_barcode")]
- public string? BoxBarcode { get; set; }
-
#endregion
#region Constructors
- ///
- /// Create a default, empty Serials object
- ///
- public Serials()
+ public Serials() : base() { }
+
+ public Serials(Data.Models.Metadata.Serials item) : base(item) { }
+
+ public Serials(Data.Models.Metadata.Serials item, Machine machine, Source source) : this(item)
{
- Write(Data.Models.Metadata.DatItem.TypeKey, ItemType);
+ Write(SourceKey, source);
+ CopyMachineInformation(machine);
}
#endregion
@@ -116,64 +34,7 @@ namespace SabreTools.Metadata.DatItems.Formats
#region Cloning Methods
///
- public override object Clone()
- {
- var serials = new Serials()
- {
- DigitalSerial1 = this.DigitalSerial1,
- DigitalSerial2 = this.DigitalSerial2,
- MediaSerial1 = this.MediaSerial1,
- MediaSerial2 = this.MediaSerial2,
- MediaSerial3 = this.MediaSerial3,
- PcbSerial = this.PcbSerial,
- RomChipSerial1 = this.RomChipSerial1,
- RomChipSerial2 = this.RomChipSerial2,
- LockoutSerial = this.LockoutSerial,
- SaveChipSerial = this.SaveChipSerial,
- ChipSerial = this.ChipSerial,
- BoxSerial = this.BoxSerial,
- MediaStamp = this.MediaStamp,
- BoxBarcode = this.BoxBarcode,
- };
- serials.Write(DupeTypeKey, Read(DupeTypeKey));
- serials.Write(MachineKey, GetMachine());
- serials.Write(RemoveKey, ReadBool(RemoveKey));
- serials.Write(SourceKey, Read(SourceKey));
- serials.Write(Data.Models.Metadata.DatItem.TypeKey, ReadString(Data.Models.Metadata.DatItem.TypeKey).AsItemType().AsStringValue());
-
- return serials;
- }
-
- #endregion
-
- #region Comparision Methods
-
- ///
- public override bool Equals(DatItem? other)
- {
- // If we don't have a Serials, return false
- if (ReadString(Data.Models.Metadata.DatItem.TypeKey) != other?.ReadString(Data.Models.Metadata.DatItem.TypeKey))
- return false;
-
- // Otherwise, treat it as a Serials
- Serials? newOther = other as Serials;
-
- // If the Serials information matches
- return DigitalSerial1 == newOther!.DigitalSerial1
- && DigitalSerial2 == newOther.DigitalSerial2
- && MediaSerial1 == newOther.MediaSerial1
- && MediaSerial2 == newOther.MediaSerial2
- && MediaSerial3 == newOther.MediaSerial3
- && PcbSerial == newOther.PcbSerial
- && RomChipSerial1 == newOther.RomChipSerial1
- && RomChipSerial2 == newOther.RomChipSerial2
- && LockoutSerial == newOther.LockoutSerial
- && SaveChipSerial == newOther.SaveChipSerial
- && ChipSerial == newOther.ChipSerial
- && BoxSerial == newOther.BoxSerial
- && MediaStamp == newOther.MediaStamp
- && BoxBarcode == newOther.BoxBarcode;
- }
+ public override object Clone() => new Serials(_internal.Clone() as Data.Models.Metadata.Serials ?? []);
#endregion
}
diff --git a/SabreTools.Metadata.DatItems/Formats/SourceDetails.cs b/SabreTools.Metadata.DatItems/Formats/SourceDetails.cs
index 7c0813f8..dcf47068 100644
--- a/SabreTools.Metadata.DatItems/Formats/SourceDetails.cs
+++ b/SabreTools.Metadata.DatItems/Formats/SourceDetails.cs
@@ -1,151 +1,32 @@
using System.Xml.Serialization;
using Newtonsoft.Json;
+using SabreTools.Data.Extensions;
-// TODO: Add item mappings for all fields
namespace SabreTools.Metadata.DatItems.Formats
{
///
/// Represents a single source details item
///
[JsonObject("source_details"), XmlRoot("source_details")]
- public sealed class SourceDetails : DatItem
+ public sealed class SourceDetails : DatItem
{
#region Fields
/// />
protected override ItemType ItemType => ItemType.SourceDetails;
- ///
- /// Id value
- ///
- /// TODO: Is this required?
- [JsonProperty("id", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("id")]
- public string? Id { get; set; }
-
- ///
- /// Section value
- ///
- [JsonProperty("section", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("section")]
- public string? Section { get; set; }
-
- ///
- /// Rom info value
- ///
- [JsonProperty("rominfo", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("rominfo")]
- public string? RomInfo { get; set; }
-
- ///
- /// Dumping date value
- ///
- [JsonProperty("d_date", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("d_date")]
- public string? DDate { get; set; }
-
- ///
- /// Dumping date info value
- ///
- [JsonProperty("d_date_info", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("d_date_info")]
- public string? DDateInfo { get; set; }
-
- ///
- /// Release date value
- ///
- [JsonProperty("r_date", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("r_date")]
- public string? RDate { get; set; }
-
- ///
- /// Release date info value
- ///
- [JsonProperty("r_date_info", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("r_date_info")]
- public string? RDateInfo { get; set; }
-
- ///
- /// Origin value
- ///
- [JsonProperty("origin", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("origin")]
- public string? Origin { get; set; }
-
- ///
- /// Region value
- ///
- [JsonProperty("region", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("region")]
- public string? Region { get; set; }
-
- ///
- /// Media title value
- ///
- [JsonProperty("media_title", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("media_title")]
- public string? MediaTitle { get; set; }
-
- ///
- /// Dumper value
- ///
- [JsonProperty("dumper", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("dumper")]
- public string? Dumper { get; set; }
-
- ///
- /// Project value
- ///
- [JsonProperty("project", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("project")]
- public string? Project { get; set; }
-
- ///
- /// Original format value
- ///
- [JsonProperty("originalformat", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("originalformat")]
- public string? OriginalFormat { get; set; }
-
- ///
- /// Nodump value
- ///
- [JsonProperty("nodump", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("nodump")]
- public string? Nodump { get; set; }
-
- ///
- /// Tool value
- ///
- [JsonProperty("tool", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("tool")]
- public string? Tool { get; set; }
-
- ///
- /// Comment 1 value
- ///
- [JsonProperty("comment1", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("comment1")]
- public string? Comment1 { get; set; }
-
- ///
- /// Link 2 value
- ///
- [JsonProperty("comment2", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("comment2")]
- public string? Comment2 { get; set; }
-
- ///
- /// Link 1 value
- ///
- [JsonProperty("link1", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("link1")]
- public string? Link1 { get; set; }
-
- ///
- /// Link 2 value
- ///
- [JsonProperty("link2", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("link2")]
- public string? Link2 { get; set; }
-
- ///
- /// Link 3 value
- ///
- [JsonProperty("link3", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("link3")]
- public string? Link3 { get; set; }
-
#endregion
#region Constructors
- ///
- /// Create a default, empty SourceDetails object
- ///
- public SourceDetails()
+ public SourceDetails() : base() { }
+
+ public SourceDetails(Data.Models.Metadata.SourceDetails item) : base(item) { }
+
+ public SourceDetails(Data.Models.Metadata.SourceDetails item, Machine machine, Source source) : this(item)
{
- Write(Data.Models.Metadata.DatItem.TypeKey, ItemType.SourceDetails);
+ Write(SourceKey, source);
+ CopyMachineInformation(machine);
}
#endregion
@@ -153,77 +34,7 @@ namespace SabreTools.Metadata.DatItems.Formats
#region Cloning Methods
///
- public override object Clone()
- {
- var sourceDetails = new SourceDetails()
- {
- Id = this.Id,
- Section = this.Section,
- RomInfo = this.RomInfo,
- DDate = this.DDate,
- DDateInfo = this.DDateInfo,
- RDate = this.RDate,
- RDateInfo = this.RDateInfo,
- Origin = this.Origin,
- Region = this.Region,
- MediaTitle = this.MediaTitle,
- Dumper = this.Dumper,
- Project = this.Project,
- OriginalFormat = this.OriginalFormat,
- Nodump = this.Nodump,
- Tool = this.Tool,
- Comment1 = this.Comment1,
- Comment2 = this.Comment2,
- Link1 = this.Link1,
- Link2 = this.Link2,
- Link3 = this.Link3,
- };
- sourceDetails.Write(DupeTypeKey, Read(DupeTypeKey));
- sourceDetails.Write(MachineKey, GetMachine());
- sourceDetails.Write(RemoveKey, ReadBool(RemoveKey));
- sourceDetails.Write(SourceKey, Read(SourceKey));
- sourceDetails.Write(Data.Models.Metadata.DatItem.TypeKey, ReadString(Data.Models.Metadata.DatItem.TypeKey).AsItemType().AsStringValue());
-
- return sourceDetails;
- }
-
- #endregion
-
- #region Comparision Methods
-
- ///
- public override bool Equals(DatItem? other)
- {
- // If we don't have a SourceDetails, return false
- if (ReadString(Data.Models.Metadata.DatItem.TypeKey) != other?.ReadString(Data.Models.Metadata.DatItem.TypeKey))
- return false;
-
- // Otherwise, treat it as a SourceDetails
- SourceDetails? newOther = other as SourceDetails;
-
- // If the Details information matches
- return Id == newOther!.Id
- && Section == newOther.Section
- && RomInfo == newOther.RomInfo
- && DDate == newOther.DDate
- && DDateInfo == newOther.DDateInfo
- && RomInfo == newOther.RomInfo
- && RDate == newOther.RDate
- && RDateInfo == newOther.RDateInfo
- && Origin == newOther.Origin
- && Region == newOther.Region
- && MediaTitle == newOther.MediaTitle
- && Dumper == newOther.Dumper
- && Project == newOther.Project
- && OriginalFormat == newOther.OriginalFormat
- && Nodump == newOther.Nodump
- && Tool == newOther.Tool
- && Comment1 == newOther.Comment1
- && Comment2 == newOther.Comment2
- && Link1 == newOther.Link1
- && Link2 == newOther.Link2
- && Link3 == newOther.Link3;
- }
+ public override object Clone() => new SourceDetails(_internal.Clone() as Data.Models.Metadata.SourceDetails ?? []);
#endregion
}