diff --git a/SabreTools.RedumpLib/Data/Extensions.cs b/SabreTools.RedumpLib/Data/Extensions.cs
index 8a3da07..5769313 100644
--- a/SabreTools.RedumpLib/Data/Extensions.cs
+++ b/SabreTools.RedumpLib/Data/Extensions.cs
@@ -155,34 +155,11 @@ namespace SabreTools.RedumpLib.Data
/// MediaType if possible, null on error
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
diff --git a/SabreTools.RedumpLib/Data/PhysicalMediaType.cs b/SabreTools.RedumpLib/Data/PhysicalMediaType.cs
index 673962b..49c0e40 100644
--- a/SabreTools.RedumpLib/Data/PhysicalMediaType.cs
+++ b/SabreTools.RedumpLib/Data/PhysicalMediaType.cs
@@ -25,8 +25,15 @@ namespace SabreTools.RedumpLib.Data
///
/// Default media type mapping
///
+ /// This is used when converting from to
public readonly MediaType? DefaultMediaType;
+ ///
+ /// Media types that map to this
+ ///
+ /// This is used when converting from to
+ 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