Add some common Metadata objects for NIDB

This commit is contained in:
Matt Nadareski
2026-04-01 10:37:25 -04:00
parent 1cec6fa918
commit 4035d9db86
12 changed files with 555 additions and 508 deletions

View File

@@ -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;
}

View File

@@ -8,9 +8,105 @@ namespace SabreTools.Data.Models.Metadata
{
#region Keys
/// <remarks>string, No-Intro DB extension</remarks>
public const string NumberKey = "number";
/// <remarks>string, No-Intro DB extension</remarks>
public const string CloneKey = "clone";
/// <remarks>string, No-Intro DB extension</remarks>
public const string RegParentKey = "regparent";
/// <remarks>string, No-Intro DB extension</remarks>
public const string MergeOfKey = "mergeof";
/// <remarks>string, No-Intro DB extension</remarks>
public const string MergeNameKey = "mergename";
/// <remarks>string</remarks>
public const string NameKey = "name";
/// <remarks>string, No-Intro DB extension</remarks>
public const string NameAltKey = "name_alt";
/// <remarks>string, No-Intro DB extension</remarks>
public const string RegionKey = "region";
/// <remarks>string, No-Intro DB extension</remarks>
public const string LanguagesKey = "languages";
/// <remarks>byte, No-Intro DB extension</remarks>
public const string ShowLangKey = "showlang";
/// <remarks>string, No-Intro DB extension</remarks>
public const string LangCheckedKey = "langchecked";
/// <remarks>string, No-Intro DB extension</remarks>
public const string Version1Key = "version1";
/// <remarks>string, No-Intro DB extension</remarks>
public const string Version2Key = "version2";
/// <remarks>string, No-Intro DB extension</remarks>
public const string DevStatusKey = "devstatus";
/// <remarks>string, No-Intro DB extension</remarks>
public const string AdditionalKey = "additional";
/// <remarks>string, No-Intro DB extension</remarks>
public const string Special1Key = "special1";
/// <remarks>string, No-Intro DB extension</remarks>
public const string Special2Key = "special2";
/// <remarks>byte, No-Intro DB extension</remarks>
public const string AltKey = "alt";
/// <remarks>string, No-Intro DB extension</remarks>
public const string GameId1Key = "gameid1";
/// <remarks>string, No-Intro DB extension</remarks>
public const string GameId2Key = "gameid2";
/// <remarks>string, No-Intro DB extension</remarks>
public const string DescriptionKey = "description";
/// <remarks>byte, No-Intro DB extension</remarks>
public const string BiosKey = "bios";
/// <remarks>byte, No-Intro DB extension</remarks>
public const string LicensedKey = "licensed";
/// <remarks>byte, No-Intro DB extension</remarks>
public const string PirateKey = "pirate";
/// <remarks>byte, No-Intro DB extension</remarks>
public const string PhysicalKey = "physical";
/// <remarks>byte, No-Intro DB extension</remarks>
public const string CompleteKey = "complete";
/// <remarks>byte, No-Intro DB extension</remarks>
public const string AdultKey = "adult";
/// <remarks>byte, No-Intro DB extension</remarks>
public const string DatKey = "dat";
/// <remarks>byte, No-Intro DB extension</remarks>
public const string ListedKey = "listed";
/// <remarks>byte, No-Intro DB extension</remarks>
public const string PrivateKey = "private";
/// <remarks>string, No-Intro DB extension</remarks>
public const string StickyNoteKey = "stickynote";
/// <remarks>string, No-Intro DB extension</remarks>
public const string DatterNoteKey = "datternote";
/// <remarks>string, No-Intro DB extension</remarks>
public const string CategoriesKey = "categories";
#endregion
public Archive() => Type = ItemType.Archive;

View File

@@ -288,14 +288,17 @@ namespace SabreTools.Data.Models.Metadata
Port,
RamOption,
Release,
ReleaseDetails,
Rom,
Sample,
Serials,
SharedFeat,
Slot,
SlotOption,
Software,
SoftwareList,
Sound,
SourceDetails,
Video,
/// <summary>

View File

@@ -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
/// <remarks>string</remarks>
public const string IdKey = "id";
/// <remarks>string</remarks>
public const string AppendToNumberKey = "appendtonumber";
/// <remarks>string</remarks>
public const string DateKey = "date";
/// <remarks>string</remarks>
public const string OriginalFormatKey = "originalformat";
/// <remarks>string</remarks>
public const string GroupKey = "group";
/// <remarks>string</remarks>
public const string DirNameKey = "dirname";
/// <remarks>string</remarks>
public const string NfoNameKey = "nfoname";
/// <remarks>string</remarks>
public const string NfoSizeKey = "nfosize";
/// <remarks>string</remarks>
public const string NfoCRCKey = "nfocrc";
/// <remarks>string</remarks>
public const string ArchiveNameKey = "archivename";
/// <remarks>string</remarks>
public const string RomInfoKey = "rominfo";
/// <remarks>string</remarks>
public const string CategoryKey = "category";
/// <remarks>string</remarks>
public const string CommentKey = "comment";
/// <remarks>string</remarks>
public const string ToolKey = "tool";
/// <remarks>string</remarks>
public const string RegionKey = "region";
/// <remarks>string</remarks>
public const string OriginKey = "origin";
#endregion
public ReleaseDetails() => Type = ItemType.ReleaseDetails;
}
}

View File

@@ -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
/// <remarks>string</remarks>
public const string MediaSerial1Key = "mediaserial1";
/// <remarks>string</remarks>
public const string MediaSerial2Key = "mediaserial2";
/// <remarks>string</remarks>
public const string MediaSerial3Key = "mediaserial3";
/// <remarks>string</remarks>
public const string PCBSerialKey = "pcbserial";
/// <remarks>string</remarks>
public const string RomChipSerial1Key = "romchipserial1";
/// <remarks>string</remarks>
public const string RomChipSerial2Key = "romchipserial2";
/// <remarks>string</remarks>
public const string LockoutSerialKey = "lockoutserial";
/// <remarks>string</remarks>
public const string SaveChipSerialKey = "savechipserial";
/// <remarks>string</remarks>
public const string ChipSerialKey = "chipserial";
/// <remarks>string</remarks>
public const string BoxSerialKey = "boxserial";
/// <remarks>string</remarks>
public const string MediaStampKey = "mediastamp";
/// <remarks>string</remarks>
public const string BoxBarcodeKey = "boxbarcode";
/// <remarks>string</remarks>
public const string DigitalSerial1Key = "digitalserial1";
/// <remarks>string</remarks>
public const string DigitalSerial2Key = "digitalserial2";
#endregion
public Serials() => Type = ItemType.Serials;
}
}

View File

@@ -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
/// <remarks>string</remarks>
public const string IdKey = "id";
/// <remarks>string</remarks>
public const string AppendToNumberKey = "appendtonumber";
/// <remarks>string</remarks>
public const string SectionKey = "section";
/// <remarks>string</remarks>
public const string RomInfoKey = "rominfo";
/// <remarks>string</remarks>
public const string DumpDateKey = "dumpdate";
/// <remarks>byte</remarks>
public const string DumpDateInfoKey = "dumpdateinfo";
/// <remarks>string</remarks>
public const string ReleaseDateKey = "releasedate";
/// <remarks>byte</remarks>
public const string ReleaseDateInfoKey = "releasedateinfo";
/// <remarks>string</remarks>
public const string DumperKey = "dumper";
/// <remarks>string</remarks>
public const string ProjectKey = "project";
/// <remarks>string</remarks>
public const string OriginalFormatKey = "originalformat";
/// <remarks>byte</remarks>
public const string NodumpKey = "nodump";
/// <remarks>string</remarks>
public const string ToolKey = "tool";
/// <remarks>string</remarks>
public const string OriginKey = "origin";
/// <remarks>string</remarks>
public const string Comment1Key = "comment1";
/// <remarks>string</remarks>
public const string Comment2Key = "comment2";
/// <remarks>string</remarks>
public const string Link1Key = "link1";
/// <remarks>byte</remarks>
public const string Link1PublicKey = "link1public";
/// <remarks>string</remarks>
public const string Link2Key = "link2";
/// <remarks>byte</remarks>
public const string Link2PublicKey = "link2public";
/// <remarks>string</remarks>
public const string Link3Key = "link3";
/// <remarks>byte</remarks>
public const string Link3PublicKey = "link3public";
/// <remarks>string</remarks>
public const string RegionKey = "region";
/// <remarks>string</remarks>
public const string MediaTitleKey = "mediatitle";
#endregion
public SourceDetails() => Type = ItemType.SourceDetails;
}
}

View File

@@ -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

View File

@@ -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);

View File

@@ -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<Data.Models.Metadata.DatItem>, IEquatable<DatItem>, IComparable<DatItem>, ICloneable
{
#region Constants

View File

@@ -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
{
/// <summary>
/// Represents a single release details item
/// </summary>
[JsonObject("release_details"), XmlRoot("release_details")]
public sealed class ReleaseDetails : DatItem
public sealed class ReleaseDetails : DatItem<Data.Models.Metadata.ReleaseDetails>
{
#region Fields
/// <inheritdoc>/>
protected override ItemType ItemType => ItemType.ReleaseDetails;
/// <summary>
/// Id value
/// </summary>
/// <remarks>TODO: Is this required?</remarks>
[JsonProperty("id", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("id")]
public string? Id { get; set; }
/// <summary>
/// Directory name value
/// </summary>
[JsonProperty("dirname", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("dirname")]
public string? DirName { get; set; }
/// <summary>
/// Rom info value
/// </summary>
[JsonProperty("rominfo", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("rominfo")]
public string? RomInfo { get; set; }
/// <summary>
/// Category value
/// </summary>
[JsonProperty("category", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("category")]
public string? Category { get; set; }
/// <summary>
/// NFO name value
/// </summary>
[JsonProperty("nfoname", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("nfoname")]
public string? NfoName { get; set; }
/// <summary>
/// NFO size value
/// </summary>
[JsonProperty("nfosize", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("nfosize")]
public long? NfoSize { get; set; }
/// <summary>
/// NFO CRC value
/// </summary>
[JsonProperty("nfocrc", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("nfocrc")]
public string? NfoCrc { get; set; }
/// <summary>
/// Archive name value
/// </summary>
[JsonProperty("archivename", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("archivename")]
public string? ArchiveName { get; set; }
/// <summary>
/// Original format value
/// </summary>
[JsonProperty("originalformat", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("originalformat")]
public string? OriginalFormat { get; set; }
/// <summary>
/// Date value
/// </summary>
[JsonProperty("date", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("date")]
public string? Date { get; set; }
/// <summary>
/// Grpup value
/// </summary>
[JsonProperty("group", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("group")]
public string? Group { get; set; }
/// <summary>
/// Comment value
/// </summary>
[JsonProperty("comment", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("comment")]
public string? Comment { get; set; }
/// <summary>
/// Tool value
/// </summary>
[JsonProperty("tool", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("tool")]
public string? Tool { get; set; }
/// <summary>
/// Region value
/// </summary>
[JsonProperty("region", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("region")]
public string? Region { get; set; }
/// <summary>
/// Origin value
/// </summary>
[JsonProperty("origin", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("origin")]
public string? Origin { get; set; }
#endregion
#region Constructors
/// <summary>
/// Create a default, empty ReleaseDetails object
/// </summary>
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<Source?>(SourceKey, source);
CopyMachineInformation(machine);
}
#endregion
#region Cloning Methods
/// <inheritdoc/>
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<DupeType>(DupeTypeKey));
releaseDetails.Write(MachineKey, GetMachine());
releaseDetails.Write(RemoveKey, ReadBool(RemoveKey));
releaseDetails.Write<Source?>(SourceKey, Read<Source?>(SourceKey));
releaseDetails.Write<string?>(Data.Models.Metadata.DatItem.TypeKey, ReadString(Data.Models.Metadata.DatItem.TypeKey).AsItemType().AsStringValue());
return releaseDetails;
}
#endregion
#region Comparision Methods
/// <inheritdoc/>
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
}

View File

@@ -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
{
/// <summary>
/// Represents a single serials item
/// </summary>
[JsonObject("serials"), XmlRoot("serials")]
public sealed class Serials : DatItem
public sealed class Serials : DatItem<Data.Models.Metadata.Serials>
{
#region Fields
/// <inheritdoc>/>
protected override ItemType ItemType => ItemType.Serials;
/// <summary>
/// Digital serial 1 value
/// </summary>
[JsonProperty("digital_serial1", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("digital_serial1")]
public string? DigitalSerial1 { get; set; }
/// <summary>
/// Digital serial 2 value
/// </summary>
[JsonProperty("digital_serial2", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("digital_serial2")]
public string? DigitalSerial2 { get; set; }
/// <summary>
/// Media serial 1 value
/// </summary>
[JsonProperty("media_serial1", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("media_serial1")]
public string? MediaSerial1 { get; set; }
/// <summary>
/// Media serial 2 value
/// </summary>
[JsonProperty("media_serial2", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("media_serial2")]
public string? MediaSerial2 { get; set; }
/// <summary>
/// Media serial 3 value
/// </summary>
[JsonProperty("media_serial3", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("media_serial3")]
public string? MediaSerial3 { get; set; }
/// <summary>
/// PCB serial value
/// </summary>
[JsonProperty("pcb_serial", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("pcb_serial")]
public string? PcbSerial { get; set; }
/// <summary>
/// Rom chip serial 1 value
/// </summary>
[JsonProperty("romchip_serial1", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("romchip_serial1")]
public string? RomChipSerial1 { get; set; }
/// <summary>
/// Rom chip serial 2 value
/// </summary>
[JsonProperty("romchip_serial2", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("romchip_serial2")]
public string? RomChipSerial2 { get; set; }
/// <summary>
/// Lockout serial value
/// </summary>
[JsonProperty("lockout_serial", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("lockout_serial")]
public string? LockoutSerial { get; set; }
/// <summary>
/// Save chip serial value
/// </summary>
[JsonProperty("savechip_serial", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("savechip_serial")]
public string? SaveChipSerial { get; set; }
/// <summary>
/// Chip serial value
/// </summary>
[JsonProperty("chip_serial", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("chip_serial")]
public string? ChipSerial { get; set; }
/// <summary>
/// Box serial value
/// </summary>
[JsonProperty("box_serial", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("box_serial")]
public string? BoxSerial { get; set; }
/// <summary>
/// Media stamp value
/// </summary>
[JsonProperty("mediastamp", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("mediastamp")]
public string? MediaStamp { get; set; }
/// <summary>
/// Box barcode value
/// </summary>
[JsonProperty("box_barcode", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("box_barcode")]
public string? BoxBarcode { get; set; }
#endregion
#region Constructors
/// <summary>
/// Create a default, empty Serials object
/// </summary>
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<Source?>(SourceKey, source);
CopyMachineInformation(machine);
}
#endregion
@@ -116,64 +34,7 @@ namespace SabreTools.Metadata.DatItems.Formats
#region Cloning Methods
/// <inheritdoc/>
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<DupeType>(DupeTypeKey));
serials.Write(MachineKey, GetMachine());
serials.Write(RemoveKey, ReadBool(RemoveKey));
serials.Write<Source?>(SourceKey, Read<Source?>(SourceKey));
serials.Write<string?>(Data.Models.Metadata.DatItem.TypeKey, ReadString(Data.Models.Metadata.DatItem.TypeKey).AsItemType().AsStringValue());
return serials;
}
#endregion
#region Comparision Methods
/// <inheritdoc/>
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
}

View File

@@ -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
{
/// <summary>
/// Represents a single source details item
/// </summary>
[JsonObject("source_details"), XmlRoot("source_details")]
public sealed class SourceDetails : DatItem
public sealed class SourceDetails : DatItem<Data.Models.Metadata.SourceDetails>
{
#region Fields
/// <inheritdoc>/>
protected override ItemType ItemType => ItemType.SourceDetails;
/// <summary>
/// Id value
/// </summary>
/// <remarks>TODO: Is this required?</remarks>
[JsonProperty("id", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("id")]
public string? Id { get; set; }
/// <summary>
/// Section value
/// </summary>
[JsonProperty("section", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("section")]
public string? Section { get; set; }
/// <summary>
/// Rom info value
/// </summary>
[JsonProperty("rominfo", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("rominfo")]
public string? RomInfo { get; set; }
/// <summary>
/// Dumping date value
/// </summary>
[JsonProperty("d_date", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("d_date")]
public string? DDate { get; set; }
/// <summary>
/// Dumping date info value
/// </summary>
[JsonProperty("d_date_info", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("d_date_info")]
public string? DDateInfo { get; set; }
/// <summary>
/// Release date value
/// </summary>
[JsonProperty("r_date", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("r_date")]
public string? RDate { get; set; }
/// <summary>
/// Release date info value
/// </summary>
[JsonProperty("r_date_info", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("r_date_info")]
public string? RDateInfo { get; set; }
/// <summary>
/// Origin value
/// </summary>
[JsonProperty("origin", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("origin")]
public string? Origin { get; set; }
/// <summary>
/// Region value
/// </summary>
[JsonProperty("region", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("region")]
public string? Region { get; set; }
/// <summary>
/// Media title value
/// </summary>
[JsonProperty("media_title", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("media_title")]
public string? MediaTitle { get; set; }
/// <summary>
/// Dumper value
/// </summary>
[JsonProperty("dumper", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("dumper")]
public string? Dumper { get; set; }
/// <summary>
/// Project value
/// </summary>
[JsonProperty("project", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("project")]
public string? Project { get; set; }
/// <summary>
/// Original format value
/// </summary>
[JsonProperty("originalformat", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("originalformat")]
public string? OriginalFormat { get; set; }
/// <summary>
/// Nodump value
/// </summary>
[JsonProperty("nodump", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("nodump")]
public string? Nodump { get; set; }
/// <summary>
/// Tool value
/// </summary>
[JsonProperty("tool", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("tool")]
public string? Tool { get; set; }
/// <summary>
/// Comment 1 value
/// </summary>
[JsonProperty("comment1", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("comment1")]
public string? Comment1 { get; set; }
/// <summary>
/// Link 2 value
/// </summary>
[JsonProperty("comment2", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("comment2")]
public string? Comment2 { get; set; }
/// <summary>
/// Link 1 value
/// </summary>
[JsonProperty("link1", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("link1")]
public string? Link1 { get; set; }
/// <summary>
/// Link 2 value
/// </summary>
[JsonProperty("link2", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("link2")]
public string? Link2 { get; set; }
/// <summary>
/// Link 3 value
/// </summary>
[JsonProperty("link3", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("link3")]
public string? Link3 { get; set; }
#endregion
#region Constructors
/// <summary>
/// Create a default, empty SourceDetails object
/// </summary>
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<Source?>(SourceKey, source);
CopyMachineInformation(machine);
}
#endregion
@@ -153,77 +34,7 @@ namespace SabreTools.Metadata.DatItems.Formats
#region Cloning Methods
/// <inheritdoc/>
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<DupeType>(DupeTypeKey));
sourceDetails.Write(MachineKey, GetMachine());
sourceDetails.Write(RemoveKey, ReadBool(RemoveKey));
sourceDetails.Write<Source?>(SourceKey, Read<Source?>(SourceKey));
sourceDetails.Write<string?>(Data.Models.Metadata.DatItem.TypeKey, ReadString(Data.Models.Metadata.DatItem.TypeKey).AsItemType().AsStringValue());
return sourceDetails;
}
#endregion
#region Comparision Methods
/// <inheritdoc/>
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
}