Offload mapped media types to the definition

This commit is contained in:
Matt Nadareski
2026-10-18 15:43:40 -04:00
parent d471ff4477
commit 1dbbab3f63
2 changed files with 34 additions and 38 deletions

View File

@@ -155,34 +155,11 @@ namespace SabreTools.RedumpLib.Data
/// <returns>MediaType if possible, null on error</returns>
public static PhysicalMediaType? ToPhysicalMediaType(this MediaType? discType)
{
return discType switch
{
MediaType.NONE => null,
MediaType.BD25
or MediaType.BD33
or MediaType.BD50
or MediaType.BD66
or MediaType.BD100
or MediaType.BD128 => PhysicalMediaType.BluRay,
MediaType.CD => PhysicalMediaType.CDROM,
MediaType.DVD5
or MediaType.DVD9 => PhysicalMediaType.DVD,
MediaType.GDROM => PhysicalMediaType.GDROM,
MediaType.HDDVDSL
or MediaType.HDDVDDL => PhysicalMediaType.HDDVD,
MediaType.NintendoGameCubeGameDisc => PhysicalMediaType.NintendoGameCubeGameDisc,
MediaType.NintendoWiiOpticalDiscSL
or MediaType.NintendoWiiOpticalDiscDL => PhysicalMediaType.NintendoWiiOpticalDisc,
MediaType.NintendoWiiUOpticalDiscSL => PhysicalMediaType.NintendoWiiUOpticalDisc,
MediaType.UMDSL
or MediaType.UMDDL => PhysicalMediaType.UMD,
MediaType.XGD => PhysicalMediaType.XGD,
if (discType == MediaType.NONE)
return null;
// Invalid cases for conversion
MediaType.MILCD => null,
null => null,
_ => null,
};
return Array.Find(PhysicalMediaType.AllMediaTypes,
m => Array.Exists(m.MappedMediaTypes, t => t == discType));
}
#endregion

View File

@@ -25,8 +25,15 @@ namespace SabreTools.RedumpLib.Data
/// <summary>
/// Default media type mapping
/// </summary>
/// <remarks>This is used when converting from <see cref="PhysicalMediaType"/> to <see cref="MediaType"/></remarks>
public readonly MediaType? DefaultMediaType;
/// <summary>
/// Media types that map to this <see cref="PhysicalMediaType"/>
/// </summary>
/// <remarks>This is used when converting from <see cref="MediaType"/> to <see cref="PhysicalMediaType"/></remarks>
public readonly MediaType[] MappedMediaTypes;
#endregion
#region Constructors
@@ -37,13 +44,15 @@ namespace SabreTools.RedumpLib.Data
private PhysicalMediaType(string name,
bool available = true,
string? code = null,
MediaType? defaultMediaType = null)
MediaType? defaultMediaType = null,
MediaType[]? mappedMediaTypes = null)
{
Name = name;
Available = available;
Code = code;
DefaultMediaType = defaultMediaType;
MappedMediaTypes = mappedMediaTypes ?? [];
}
#endregion
@@ -98,15 +107,18 @@ namespace SabreTools.RedumpLib.Data
public static readonly PhysicalMediaType BluRay = new("BD-ROM",
code: "bdrom",
defaultMediaType: MediaType.BD50);
defaultMediaType: MediaType.BD50,
mappedMediaTypes: [MediaType.BD25, MediaType.BD33, MediaType.BD50, MediaType.BD66, MediaType.BD100, MediaType.BD128]);
public static readonly PhysicalMediaType CDROM = new("CD-ROM",
code: "cdrom",
defaultMediaType: MediaType.CD);
defaultMediaType: MediaType.CD,
mappedMediaTypes: [MediaType.CD]);
public static readonly PhysicalMediaType DVD = new("DVD-ROM",
code: "dvd",
defaultMediaType: MediaType.DVD9);
defaultMediaType: MediaType.DVD9,
mappedMediaTypes: [MediaType.DVD5, MediaType.DVD9]);
public static readonly PhysicalMediaType FloppyDisk = new("Floppy Disk",
code: "fd");
@@ -117,11 +129,13 @@ namespace SabreTools.RedumpLib.Data
public static readonly PhysicalMediaType GDROM = new("GD-ROM",
code: "gdrom",
defaultMediaType: MediaType.GDROM);
defaultMediaType: MediaType.GDROM,
mappedMediaTypes: [MediaType.GDROM]);
public static readonly PhysicalMediaType HDDVD = new("HD-DVD-ROM",
code: "hddvd",
defaultMediaType: MediaType.HDDVDSL);
defaultMediaType: MediaType.HDDVDSL,
mappedMediaTypes: [MediaType.HDDVDSL, MediaType.HDDVDDL]);
public static readonly PhysicalMediaType HardDisk = new("Hard Disk",
code: "hdd");
@@ -152,23 +166,28 @@ namespace SabreTools.RedumpLib.Data
public static readonly PhysicalMediaType NintendoGameCubeGameDisc = new("GameCube Game Disc",
code: "gc",
defaultMediaType: MediaType.NintendoGameCubeGameDisc);
defaultMediaType: MediaType.NintendoGameCubeGameDisc,
mappedMediaTypes: [MediaType.NintendoGameCubeGameDisc]);
public static readonly PhysicalMediaType NintendoWiiOpticalDisc = new("Wii Optical Disc",
code: "wii",
defaultMediaType: MediaType.NintendoWiiOpticalDiscDL);
defaultMediaType: MediaType.NintendoWiiOpticalDiscDL,
mappedMediaTypes: [MediaType.NintendoWiiOpticalDiscSL, MediaType.NintendoWiiOpticalDiscDL]);
public static readonly PhysicalMediaType NintendoWiiUOpticalDisc = new("Wii U Optical Disc",
code: "wiiu",
defaultMediaType: MediaType.NintendoWiiUOpticalDiscSL);
defaultMediaType: MediaType.NintendoWiiUOpticalDiscSL,
mappedMediaTypes: [MediaType.NintendoWiiUOpticalDiscSL]);
public static readonly PhysicalMediaType UMD = new("UMD",
code: "umd",
defaultMediaType: MediaType.UMDDL);
defaultMediaType: MediaType.UMDDL,
mappedMediaTypes: [MediaType.UMDSL, MediaType.UMDDL]);
public static readonly PhysicalMediaType XGD = new("Xbox Game Disc",
code: "xgd",
defaultMediaType: MediaType.XGD);
defaultMediaType: MediaType.XGD,
mappedMediaTypes: [MediaType.XGD]);
#endregion