Increase JSON accuracy for disc types (fixes #381)

This commit is contained in:
Matt Nadareski
2022-04-04 21:46:13 -07:00
parent 0efd82bd59
commit c7dfb9dca7
8 changed files with 123 additions and 6 deletions

View File

@@ -35,6 +35,7 @@
- Refine copy protection section showing
- Update Nuget packages
- Normalize newlines in comments and contents
- Increase JSON accuracy for disc types
### 2.3 (2022-02-05)
- Start overhauling Redump information pulling, again

View File

@@ -406,6 +406,9 @@ namespace MPF.Library
if (string.IsNullOrEmpty(info.CommonDiscInfo.Contents))
info.CommonDiscInfo.Contents = options.AddPlaceholders ? Template.OptionalValue : string.Empty;
// Normalize the disc type with all current information
NormalizeDiscType(info);
return info;
}
@@ -836,7 +839,7 @@ namespace MPF.Library
/// <param name="size">Size of the current media</param>
/// <param name="layerbreak">First layerbreak value, as applicable</param>
/// <param name="layerbreak2">Second layerbreak value, as applicable</param>
/// <param name="layerbreak3">Third ayerbreak value, as applicable</param>
/// <param name="layerbreak3">Third layerbreak value, as applicable</param>
/// <returns>String representation of the media, including layer specification</returns>
public static string GetFixedMediaType(MediaType? mediaType, long size, long layerbreak, long layerbreak2, long layerbreak3)
{
@@ -1068,6 +1071,69 @@ namespace MPF.Library
#region Normalization
/// <summary>
/// Adjust the disc type based on size and layerbreak information
/// </summary>
/// <param name="info">Existing SubmissionInfo object to fill</param>
/// <returns>Corrected disc type, if possible</returns>
public static void NormalizeDiscType(SubmissionInfo info)
{
// If we have nothing valid, do nothing
if (info?.CommonDiscInfo?.Media == null)
return;
switch (info.CommonDiscInfo.Media)
{
case DiscType.BD25:
case DiscType.BD33:
case DiscType.BD50:
case DiscType.BD66:
case DiscType.BD100:
case DiscType.BD128:
if (info.SizeAndChecksums.Layerbreak3 != default)
info.CommonDiscInfo.Media = DiscType.BD128;
else if (info.SizeAndChecksums.Layerbreak2 != default)
info.CommonDiscInfo.Media = DiscType.BD100;
else if (info.SizeAndChecksums.Layerbreak != default && info.SizeAndChecksums.Size > 53_687_063_712)
info.CommonDiscInfo.Media = DiscType.BD66;
else if (info.SizeAndChecksums.Layerbreak != default)
info.CommonDiscInfo.Media = DiscType.BD50;
else if (info.SizeAndChecksums.Size > 26_843_531_856)
info.CommonDiscInfo.Media = DiscType.BD33;
else
info.CommonDiscInfo.Media = DiscType.BD25;
break;
case DiscType.DVD5:
case DiscType.DVD9:
if (info.SizeAndChecksums.Layerbreak != default)
info.CommonDiscInfo.Media = DiscType.DVD9;
else
info.CommonDiscInfo.Media = DiscType.DVD5;
break;
case DiscType.HDDVDSL:
case DiscType.HDDVDDL:
if (info.SizeAndChecksums.Layerbreak != default)
info.CommonDiscInfo.Media = DiscType.HDDVDDL;
else
info.CommonDiscInfo.Media = DiscType.HDDVDSL;
break;
case DiscType.UMDSL:
case DiscType.UMDDL:
if (info.SizeAndChecksums.Layerbreak != default)
info.CommonDiscInfo.Media = DiscType.UMDDL;
else
info.CommonDiscInfo.Media = DiscType.UMDSL;
break;
// All other disc types are not processed
default:
break;
}
}
/// <summary>
/// Normalize a split set of paths
/// </summary>

View File

@@ -18,12 +18,17 @@ namespace MPF.Test.RedumpLib
private static readonly DiscType?[] _mappableDiscTypes = new DiscType?[]
{
DiscType.BD25,
DiscType.BD33,
DiscType.BD50,
DiscType.BD66,
DiscType.BD100,
DiscType.BD128,
DiscType.CD,
DiscType.DVD5,
DiscType.DVD9,
DiscType.GDROM,
DiscType.HDDVDSL,
DiscType.HDDVDDL,
DiscType.NintendoGameCubeGameDisc,
DiscType.NintendoWiiOpticalDiscSL,
DiscType.NintendoWiiOpticalDiscDL,

View File

@@ -133,7 +133,7 @@ namespace MPF.Test.RedumpLib
DumpersAndStatus = new DumpersAndStatusSection()
{
Status = DumpStatus.TwoOrMoHumanReadablesGreen,
Status = DumpStatus.TwoOrMoreGreen,
Dumpers = new string[] { "Dumper1", "Dumper2" },
OtherDumpers = "Dumper3",
},

View File

@@ -638,8 +638,13 @@ namespace MPF.GUI.ViewModels
case DiscType.DVD5:
case DiscType.DVD9:
case DiscType.HDDVDSL:
case DiscType.HDDVDDL:
case DiscType.BD25:
case DiscType.BD33:
case DiscType.BD50:
case DiscType.BD66:
case DiscType.BD100:
case DiscType.BD128:
case DiscType.NintendoGameCubeGameDisc:
case DiscType.NintendoWiiOpticalDiscSL:
case DiscType.NintendoWiiOpticalDiscDL:

View File

@@ -290,7 +290,7 @@ namespace MPF.GUI.ViewModels
CommonDiscInfo = new CommonDiscInfoSection()
{
System = RedumpSystem.IBMPCcompatible,
Media = DiscType.BD50,
Media = DiscType.BD128,
Title = "Game Title",
ForeignTitleNonLatin = "Foreign Game Title",
DiscNumberLetter = "1",
@@ -373,7 +373,7 @@ namespace MPF.GUI.ViewModels
DumpersAndStatus = new DumpersAndStatusSection()
{
Status = DumpStatus.TwoOrMoHumanReadablesGreen,
Status = DumpStatus.TwoOrMoreGreen,
Dumpers = new string[] { "Dumper1", "Dumper2" },
OtherDumpers = "Dumper3",
},

View File

@@ -44,6 +44,11 @@ namespace RedumpLib.Data
/// <summary>
/// List of all disc types
/// </summary>
/// <remarks>
/// All names here match Redump names for the types, not official
/// naming. Some names had to be extrapolated due to no current support
/// in the Redump site.
/// </remarks>
public enum DiscType
{
NONE = 0,
@@ -51,9 +56,21 @@ namespace RedumpLib.Data
[HumanReadable(LongName = "BD-25")]
BD25,
[HumanReadable(LongName = "BD-33")]
BD33,
[HumanReadable(LongName = "BD-50")]
BD50,
[HumanReadable(LongName = "BD-66")]
BD66,
[HumanReadable(LongName = "BD-100")]
BD100,
[HumanReadable(LongName = "BD-128")]
BD128,
[HumanReadable(LongName = "CD")]
CD,
@@ -68,7 +85,10 @@ namespace RedumpLib.Data
[HumanReadable(LongName = "HD-DVD SL")]
HDDVDSL,
[HumanReadable(LongName = "HD-DVD DL")]
HDDVDDL,
[HumanReadable(LongName = "MIL-CD")]
MILCD,
@@ -99,7 +119,7 @@ namespace RedumpLib.Data
BadDumpRed = 2,
PossibleBadDumpYellow = 3,
OriginalMediaBlue = 4,
TwoOrMoHumanReadablesGreen = 5,
TwoOrMoreGreen = 5,
}
/// <summary>

View File

@@ -747,7 +747,11 @@ namespace RedumpLib.Data
switch (discType)
{
case DiscType.BD25:
case DiscType.BD33:
case DiscType.BD50:
case DiscType.BD66:
case DiscType.BD100:
case DiscType.BD128:
return MediaType.BluRay;
case DiscType.CD:
return MediaType.CDROM;
@@ -757,6 +761,7 @@ namespace RedumpLib.Data
case DiscType.GDROM:
return MediaType.GDROM;
case DiscType.HDDVDSL:
case DiscType.HDDVDDL:
return MediaType.HDDVD;
// case DiscType.MILCD: // TODO: Support this?
// return MediaType.MILCD;
@@ -847,9 +852,21 @@ namespace RedumpLib.Data
case "bd25":
case "bd-25":
return DiscType.BD25;
case "bd33":
case "bd-33":
return DiscType.BD33;
case "bd50":
case "bd-50":
return DiscType.BD50;
case "bd66":
case "bd-66":
return DiscType.BD66;
case "bd100":
case "bd-100":
return DiscType.BD100;
case "bd128":
case "bd-128":
return DiscType.BD128;
case "cd":
case "cdrom":
case "cd-rom":
@@ -868,6 +885,9 @@ namespace RedumpLib.Data
case "hddvdsl":
case "hd-dvd sl":
return DiscType.HDDVDSL;
case "hddvddl":
case "hd-dvd dl":
return DiscType.HDDVDDL;
case "milcd":
case "mil-cd":
return DiscType.MILCD;