diff --git a/SabreTools.RedumpLib.Test/Data/SubmissionInfoTests.cs b/SabreTools.RedumpLib.Test/Data/SubmissionInfoTests.cs index f6532bf..1f578f1 100644 --- a/SabreTools.RedumpLib.Test/Data/SubmissionInfoTests.cs +++ b/SabreTools.RedumpLib.Test/Data/SubmissionInfoTests.cs @@ -109,6 +109,7 @@ namespace SabreTools.RedumpLib.Test.Data BCA = "BCA", PIC = "PIC", PICIdentifier = "XB4", + DMI = "DMI", Cuesheet = "Cuesheet", Dat = "Datfile", }, diff --git a/SabreTools.RedumpLib.Test/Endpoints/DiscTests.cs b/SabreTools.RedumpLib.Test/Endpoints/DiscTests.cs index 9f684c6..efa1aed 100644 --- a/SabreTools.RedumpLib.Test/Endpoints/DiscTests.cs +++ b/SabreTools.RedumpLib.Test/Endpoints/DiscTests.cs @@ -23,6 +23,7 @@ namespace SabreTools.RedumpLib.Test.Endpoints [InlineData(DiscSubpath.Edit, "https://redump.info/disc/1/edit")] [InlineData(DiscSubpath.SBI, "https://redump.info/disc/1/sbi")] [InlineData(DiscSubpath.LSD, "https://redump.info/disc/1/lsd")] + [InlineData(DiscSubpath.DMI, "https://redump.info/disc/1/dmi")] public void BuildUrl_Subpath_Builds(DiscSubpath? subpath, string expected) { var endpoint = new RedumpLib.Endpoints.Disc diff --git a/SabreTools.RedumpLib.Test/Tools/FormatterTests.cs b/SabreTools.RedumpLib.Test/Tools/FormatterTests.cs index c8a53f4..9a5bce5 100644 --- a/SabreTools.RedumpLib.Test/Tools/FormatterTests.cs +++ b/SabreTools.RedumpLib.Test/Tools/FormatterTests.cs @@ -105,6 +105,7 @@ namespace SabreTools.RedumpLib.Test.Tools BCA = "BCA", PIC = "PIC", PICIdentifier = "XB4", + DMI = "DMI", Cuesheet = "Cuesheet", Dat = "Datfile", }, @@ -554,7 +555,7 @@ namespace SabreTools.RedumpLib.Test.Tools [Fact] public void FormatOutputData_DumpMetadataSection_Formatted() { - string expected = "Dump Metadata:\n\tComments: XXXXXX\n\tContents: XXXXXX\n\tProtection: XXXXXX\n\tSector Ranges: XXXXXX\n\tSBI: XXXXXX\n\tPrimary Volume Descriptor (PVD): XXXXXX\n\tHeader: XXXXXX\n\tBurst Cutting Area (BCA): XXXXXX\n\tPermanent Information & Control (PIC): XXXXXX\n\tCuesheet: XXXXXX\n\tDat:\n\nXXXXXX\n\n\n"; + string expected = "Dump Metadata:\n\tComments: XXXXXX\n\tContents: XXXXXX\n\tProtection: XXXXXX\n\tSector Ranges: XXXXXX\n\tSBI: XXXXXX\n\tPrimary Volume Descriptor (PVD): XXXXXX\n\tHeader: XXXXXX\n\tBurst Cutting Area (BCA): XXXXXX\n\tPermanent Information & Control (PIC): XXXXXX\n\tDMI: XXXXXX\n\tCuesheet: XXXXXX\n\tDat:\n\nXXXXXX\n\n\n"; var builder = new StringBuilder(); DumpMetadataSection? section = new() @@ -568,6 +569,7 @@ namespace SabreTools.RedumpLib.Test.Tools Header = "XXXXXX", BCA = "XXXXXX", PIC = "XXXXXX", + DMI = "XXXXXX", Cuesheet = "XXXXXX", Dat = "XXXXXX", }; diff --git a/SabreTools.RedumpLib/Data/Constants.cs b/SabreTools.RedumpLib/Data/Constants.cs index 7f0f26c..22e83a9 100644 --- a/SabreTools.RedumpLib/Data/Constants.cs +++ b/SabreTools.RedumpLib/Data/Constants.cs @@ -143,6 +143,7 @@ namespace SabreTools.RedumpLib.Data DiscSubpath.History, DiscSubpath.SBI, DiscSubpath.LSD, + DiscSubpath.DMI, ]; #endregion diff --git a/SabreTools.RedumpLib/Data/Enumerations.cs b/SabreTools.RedumpLib/Data/Enumerations.cs index dbff0a8..50a8e8e 100644 --- a/SabreTools.RedumpLib/Data/Enumerations.cs +++ b/SabreTools.RedumpLib/Data/Enumerations.cs @@ -61,6 +61,9 @@ namespace SabreTools.RedumpLib.Data [HumanReadable(LongName = "LSD", ShortName = "lsd")] LSD = 5, + + [HumanReadable(LongName = "DMI", ShortName = "dmi")] + DMI = 6, } /// diff --git a/SabreTools.RedumpLib/Data/Sections/DumpMetadataSection.cs b/SabreTools.RedumpLib/Data/Sections/DumpMetadataSection.cs index 7758bd7..50c3034 100644 --- a/SabreTools.RedumpLib/Data/Sections/DumpMetadataSection.cs +++ b/SabreTools.RedumpLib/Data/Sections/DumpMetadataSection.cs @@ -56,6 +56,9 @@ namespace SabreTools.RedumpLib.Data.Sections [JsonProperty(PropertyName = "pic_identifier", NullValueHandling = NullValueHandling.Ignore)] public string? PICIdentifier { get; set; } + [JsonProperty(PropertyName = "dmi", NullValueHandling = NullValueHandling.Ignore)] + public string? DMI { get; set; } + [JsonProperty(PropertyName = "cue", NullValueHandling = NullValueHandling.Ignore)] public string? Cuesheet { get; set; } @@ -102,6 +105,7 @@ namespace SabreTools.RedumpLib.Data.Sections BCA = this.BCA, PIC = this.PIC, PICIdentifier = this.PICIdentifier, + DMI = this.DMI, Cuesheet = this.Cuesheet, Dat = this.Dat, }; diff --git a/SabreTools.RedumpLib/Data/Template.cs b/SabreTools.RedumpLib/Data/Template.cs index d1caf06..af22683 100644 --- a/SabreTools.RedumpLib/Data/Template.cs +++ b/SabreTools.RedumpLib/Data/Template.cs @@ -72,6 +72,7 @@ public const string HeaderField = "Header"; public const string BCAField = "Burst Cutting Area (BCA)"; public const string PICField = "Permanent Information & Control (PIC)"; + public const string DMIField = "DMI"; public const string CuesheetField = "Cuesheet"; public const string DatField = "Dat"; diff --git a/SabreTools.RedumpLib/Endpoints/Disc.cs b/SabreTools.RedumpLib/Endpoints/Disc.cs index 34fe767..88f1269 100644 --- a/SabreTools.RedumpLib/Endpoints/Disc.cs +++ b/SabreTools.RedumpLib/Endpoints/Disc.cs @@ -32,6 +32,7 @@ namespace SabreTools.RedumpLib.Endpoints case DiscSubpath.Edit: case DiscSubpath.SBI: case DiscSubpath.LSD: + case DiscSubpath.DMI: ub.Path += $"/{Subpath.ShortName()}"; break; diff --git a/SabreTools.RedumpLib/Tools/Formatter.cs b/SabreTools.RedumpLib/Tools/Formatter.cs index 5c8b20c..bc277d0 100644 --- a/SabreTools.RedumpLib/Tools/Formatter.cs +++ b/SabreTools.RedumpLib/Tools/Formatter.cs @@ -424,6 +424,7 @@ namespace SabreTools.RedumpLib.Tools AddIfExists(output, Template.HeaderField, section.Header, 1); AddIfExists(output, Template.BCAField, section.BCA, 1); AddIfExists(output, Template.PICField, section.PIC, 1); + AddIfExists(output, Template.DMIField, section.DMI, 1); AddIfExists(output, Template.CuesheetField, section.Cuesheet, 1); AddIfExists(output, Template.DatField, section.Dat + "\n", 1); } diff --git a/SabreTools.RedumpLib/Web/Client.cs b/SabreTools.RedumpLib/Web/Client.cs index 2b943a3..8ccf188 100644 --- a/SabreTools.RedumpLib/Web/Client.cs +++ b/SabreTools.RedumpLib/Web/Client.cs @@ -1184,6 +1184,23 @@ namespace SabreTools.RedumpLib.Web } } + // DMI + if ((discSubpaths is null || Array.Exists(discSubpaths, s => s is DiscSubpath.DMI)) && discPage.Contains($" s is DiscSubpath.LSD)) && discPage.Contains($"