mirror of
https://github.com/SabreTools/MPF.git
synced 2026-02-04 05:35:52 +00:00
Fill out DetermineMediaType for Aaru
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
- Reduce media-specific checks where unnecessary
|
||||
- Add DetermineMediaType scaffolding and tests
|
||||
- Fill out DetermineMediaType for Redumper
|
||||
- Fill out DetermineMediaType for Aaru
|
||||
|
||||
### 3.3.2 (2025-06-12)
|
||||
|
||||
|
||||
@@ -11,30 +11,34 @@ namespace MPF.Processors.Test
|
||||
// TODO: Add tests around remaining helper methods
|
||||
public class AaruTests
|
||||
{
|
||||
// TODO: Create minimal sidecars for all other supported types
|
||||
#region DetermineMediaType
|
||||
|
||||
[Fact]
|
||||
public void DetermineMediaType_Null_Throws()
|
||||
public void DetermineMediaType_Null_Null()
|
||||
{
|
||||
string? basePath = null;
|
||||
var processor = new Aaru(RedumpSystem.IBMPCcompatible, MediaType.CDROM);
|
||||
Assert.Throws<NotImplementedException>(() => processor.DetermineMediaType(basePath));
|
||||
var actual = processor.DetermineMediaType(basePath);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DetermineMediaType_Invalid_Throws()
|
||||
public void DetermineMediaType_Invalid_Null()
|
||||
{
|
||||
string? basePath = "INVALID";
|
||||
var processor = new Aaru(RedumpSystem.IBMPCcompatible, MediaType.CDROM);
|
||||
Assert.Throws<NotImplementedException>(() => processor.DetermineMediaType(basePath));
|
||||
var actual = processor.DetermineMediaType(basePath);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DetermineMediaType_Valid_Throws()
|
||||
public void DetermineMediaType_CD_Valid_CD()
|
||||
{
|
||||
string? basePath = Path.Combine(Environment.CurrentDirectory, "TestData", "Aaru", "CDROM", "test");
|
||||
var processor = new Aaru(RedumpSystem.IBMPCcompatible, MediaType.CDROM);
|
||||
Assert.Throws<NotImplementedException>(() => processor.DetermineMediaType(basePath));
|
||||
var actual = processor.DetermineMediaType(basePath);
|
||||
Assert.Equal(MediaType.CDROM, actual);
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -413,5 +417,149 @@ namespace MPF.Processors.Test
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region GetDiscTypeFromStrings
|
||||
|
||||
[Theory]
|
||||
[InlineData(null, "ANY", null)]
|
||||
[InlineData("", "ANY", null)]
|
||||
[InlineData("INVALID", "ANY", null)]
|
||||
[InlineData("3\" floppy", "ANY", MediaType.FloppyDisk)]
|
||||
[InlineData("3.5\" floppy", "ANY", MediaType.FloppyDisk)]
|
||||
[InlineData("3.5\" magneto-optical", "ANY", MediaType.Floptical)]
|
||||
[InlineData("3.5\" SyQuest cartridge", "ANY", null)]
|
||||
[InlineData("3.9\" SyQuest cartridge", "ANY", null)]
|
||||
[InlineData("5.25\" floppy", "ANY", MediaType.FloppyDisk)]
|
||||
[InlineData("5.25\" magneto-optical", "ANY", MediaType.Floptical)]
|
||||
[InlineData("5.25\" SyQuest cartridge", "ANY", null)]
|
||||
[InlineData("8\" floppy", "ANY", MediaType.FloppyDisk)]
|
||||
[InlineData("300mm magneto optical", "ANY", MediaType.Floptical)]
|
||||
[InlineData("356mm magneto-optical", "ANY", MediaType.Floptical)]
|
||||
[InlineData("Advanced Digital Recording", "ANY", null)]
|
||||
[InlineData("Advanced Intelligent Tape", "ANY", null)]
|
||||
[InlineData("Archival Disc", "ANY", null)]
|
||||
[InlineData("BeeCard", "ANY", null)]
|
||||
[InlineData("Blu-ray", "Wii U Optical Disc", MediaType.NintendoWiiUOpticalDisc)]
|
||||
[InlineData("Blu-ray", "ANY", MediaType.BluRay)]
|
||||
[InlineData("Borsu", "ANY", null)]
|
||||
[InlineData("Compact Cassette", "ANY", MediaType.Cassette)]
|
||||
[InlineData("Compact Disc", "ANY", MediaType.CDROM)]
|
||||
[InlineData("Compact Flash", "ANY", MediaType.CompactFlash)]
|
||||
[InlineData("CompacTape", "ANY", null)]
|
||||
[InlineData("CRVdisc", "ANY", null)]
|
||||
[InlineData("Data8", "ANY", null)]
|
||||
[InlineData("DataPlay", "ANY", null)]
|
||||
[InlineData("DataStore", "ANY", null)]
|
||||
[InlineData("DDCD", "ANY", MediaType.CDROM)]
|
||||
[InlineData("DECtape", "ANY", null)]
|
||||
[InlineData("DemiDiskette", "ANY", null)]
|
||||
[InlineData("Digital Audio Tape", "ANY", null)]
|
||||
[InlineData("Digital Data Storage", "ANY", MediaType.DataCartridge)]
|
||||
[InlineData("Digital Linear Tape", "ANY", null)]
|
||||
[InlineData("DIR", "ANY", null)]
|
||||
[InlineData("DST", "ANY", null)]
|
||||
[InlineData("DTF", "ANY", null)]
|
||||
[InlineData("DTF2", "ANY", null)]
|
||||
[InlineData("DV tape", "ANY", null)]
|
||||
[InlineData("DVD", "GameCube Game Disc", MediaType.NintendoGameCubeGameDisc)]
|
||||
[InlineData("DVD", "Wii Optical Disc", MediaType.NintendoWiiOpticalDisc)]
|
||||
[InlineData("DVD", "ANY", MediaType.DVD)]
|
||||
[InlineData("EVD", "ANY", null)]
|
||||
[InlineData("Exatape", "ANY", null)]
|
||||
[InlineData("Express Card", "ANY", null)]
|
||||
[InlineData("FDDVD", "ANY", null)]
|
||||
[InlineData("Flextra", "ANY", null)]
|
||||
[InlineData("Floptical", "ANY", MediaType.Floptical)]
|
||||
[InlineData("FVD", "ANY", null)]
|
||||
[InlineData("GD", "ANY", MediaType.GDROM)]
|
||||
[InlineData("Hard Disk Drive", "ANY", MediaType.HardDisk)]
|
||||
[InlineData("HD DVD", "ANY", MediaType.HDDVD)]
|
||||
[InlineData("HD VMD", "ANY", null)]
|
||||
[InlineData("HiFD", "ANY", MediaType.FloppyDisk)]
|
||||
[InlineData("HiTC", "ANY", null)]
|
||||
[InlineData("HuCard", "ANY", MediaType.Cartridge)]
|
||||
[InlineData("HVD", "ANY", null)]
|
||||
[InlineData("HyperFlex", "ANY", null)]
|
||||
[InlineData("IBM 3470", "ANY", null)]
|
||||
[InlineData("IBM 3480", "ANY", null)]
|
||||
[InlineData("IBM 3490", "ANY", null)]
|
||||
[InlineData("IBM 3490E", "ANY", null)]
|
||||
[InlineData("IBM 3592", "ANY", null)]
|
||||
[InlineData("Iomega Bernoulli Box", "ANY", MediaType.IomegaBernoulliDisk)]
|
||||
[InlineData("Iomega Bernoulli Box II", "ANY", MediaType.IomegaBernoulliDisk)]
|
||||
[InlineData("Iomega Ditto", "ANY", null)]
|
||||
[InlineData("Iomega Jaz", "ANY", MediaType.IomegaJaz)]
|
||||
[InlineData("Iomega PocketZip", "ANY", MediaType.IomegaZip)]
|
||||
[InlineData("Iomega REV", "ANY", null)]
|
||||
[InlineData("Iomega ZIP", "ANY", MediaType.IomegaZip)]
|
||||
[InlineData("Kodak Verbatim", "ANY", null)]
|
||||
[InlineData("LaserDisc", "ANY", MediaType.LaserDisc)]
|
||||
[InlineData("Linear Tape-Open", "ANY", null)]
|
||||
[InlineData("LT1", "ANY", null)]
|
||||
[InlineData("Magneto-optical", "ANY", MediaType.Floptical)]
|
||||
[InlineData("Memory Stick", "ANY", MediaType.SDCard)]
|
||||
[InlineData("MiniCard", "ANY", null)]
|
||||
[InlineData("MiniDisc", "ANY", null)]
|
||||
[InlineData("MultiMediaCard", "ANY", MediaType.SDCard)]
|
||||
[InlineData("Nintendo 3DS Game Card", "ANY", MediaType.Cartridge)]
|
||||
[InlineData("Nintendo 64 Disk", "ANY", MediaType.Nintendo64DD)]
|
||||
[InlineData("Nintendo 64 Game Pak", "ANY", MediaType.Cartridge)]
|
||||
[InlineData("Nintendo Disk Card", "ANY", MediaType.NintendoFamicomDiskSystem)]
|
||||
[InlineData("Nintendo DS Game Card", "ANY", MediaType.Cartridge)]
|
||||
[InlineData("Nintendo DSi Game Card", "ANY", MediaType.Cartridge)]
|
||||
[InlineData("Nintendo Entertainment System Game Pak", "ANY", MediaType.Cartridge)]
|
||||
[InlineData("Nintendo Famicom Game Pak", "ANY", MediaType.Cartridge)]
|
||||
[InlineData("Nintendo Game Boy Advance Game Pak", "ANY", MediaType.Cartridge)]
|
||||
[InlineData("Nintendo Game Boy Game Pak", "ANY", MediaType.Cartridge)]
|
||||
[InlineData("Nintendo Switch Game Card", "ANY", MediaType.Cartridge)]
|
||||
[InlineData("Optical Disc Archive", "ANY", null)]
|
||||
[InlineData("Orb", "ANY", null)]
|
||||
[InlineData("PCMCIA Card", "ANY", null)]
|
||||
[InlineData("PD650", "ANY", null)]
|
||||
[InlineData("PlayStation Memory Card", "ANY", null)]
|
||||
[InlineData("Quarter-inch cartridge", "ANY", MediaType.DataCartridge)]
|
||||
[InlineData("Quarter-inch mini cartridge", "ANY", MediaType.DataCartridge)]
|
||||
[InlineData("QuickDisk", "ANY", null)]
|
||||
[InlineData("RDX", "ANY", null)]
|
||||
[InlineData("SACD", "ANY", MediaType.DVD)]
|
||||
[InlineData("Scalable Linear Recording", "ANY", null)]
|
||||
[InlineData("Secure Digital", "ANY", MediaType.SDCard)]
|
||||
[InlineData("SmartMedia", "ANY", MediaType.SDCard)]
|
||||
[InlineData("Sony Professional Disc", "ANY", null)]
|
||||
[InlineData("Sony Professional Disc for DATA", "ANY", null)]
|
||||
[InlineData("STK 4480", "ANY", null)]
|
||||
[InlineData("STK 4490", "ANY", null)]
|
||||
[InlineData("STK 9490", "ANY", null)]
|
||||
[InlineData("STK T-9840", "ANY", null)]
|
||||
[InlineData("STK T-9940", "ANY", null)]
|
||||
[InlineData("STK T-10000", "ANY", null)]
|
||||
[InlineData("Super Advanced Intelligent Tape", "ANY", null)]
|
||||
[InlineData("Super Digital Linear Tape", "ANY", null)]
|
||||
[InlineData("Super Nintendo Game Pak", "ANY", MediaType.Cartridge)]
|
||||
[InlineData("Super Nintendo Game Pak (US)", "ANY", MediaType.Cartridge)]
|
||||
[InlineData("SuperDisk", "ANY", MediaType.FloppyDisk)]
|
||||
[InlineData("SVOD", "ANY", null)]
|
||||
[InlineData("Travan", "ANY", null)]
|
||||
[InlineData("UDO", "ANY", null)]
|
||||
[InlineData("UHD144", "ANY", null)]
|
||||
[InlineData("UMD", "ANY", MediaType.UMD)]
|
||||
[InlineData("Unknown", "ANY", null)]
|
||||
[InlineData("USB flash drive", "ANY", MediaType.FlashDrive)]
|
||||
[InlineData("VCDHD", "ANY", null)]
|
||||
[InlineData("VideoFloppy", "ANY", null)]
|
||||
[InlineData("VideoNow", "ANY", MediaType.CDROM)]
|
||||
[InlineData("VXA", "ANY", MediaType.FlashDrive)]
|
||||
[InlineData("Wafer", "ANY", null)]
|
||||
[InlineData("xD", "ANY", null)]
|
||||
[InlineData("XQD", "ANY", null)]
|
||||
[InlineData("Zoned Hard Disk Drive", "ANY", MediaType.HardDisk)]
|
||||
[InlineData("ZX Microdrive", "ANY", null)]
|
||||
public void GetDiscTypeFromStringsTest(string? discType, string? discSubType, MediaType? expected)
|
||||
{
|
||||
var actual = Aaru.GetDiscTypeFromStrings(discType, discSubType);
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1 +1,6 @@
|
||||
TEST DATA
|
||||
<CICMMetadata>
|
||||
<OpticalDisc>
|
||||
<DiscType>Compact Disc</DiscType>
|
||||
<DiscSubType>CD-ROM</DiscSubType>
|
||||
</OpticalDisc>
|
||||
</CICMMetadata>
|
||||
@@ -29,7 +29,19 @@ namespace MPF.Processors
|
||||
/// <inheritdoc/>
|
||||
public override MediaType? DetermineMediaType(string? basePath)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
// If the base path is invalid
|
||||
if (string.IsNullOrEmpty(basePath))
|
||||
return null;
|
||||
|
||||
// Deserialize the sidecar, if possible
|
||||
var sidecar = GenerateSidecar($"{basePath}.cicm.xml");
|
||||
|
||||
// Extract the disc type strings, if possible
|
||||
if (GetDiscType(sidecar, out string? discType, out string? discSubType))
|
||||
return GetDiscTypeFromStrings(discType, discSubType);
|
||||
|
||||
// The type could not be determined
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
@@ -890,6 +902,156 @@ namespace MPF.Processors
|
||||
return !string.IsNullOrEmpty(discType) || !string.IsNullOrEmpty(discSubType);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert the type and subtype to a media type, if possible
|
||||
/// </summary>
|
||||
/// <param name="discType">Disc type string to check</param>
|
||||
/// <param name="discSubType">Disc subtype string to check</param>
|
||||
/// <returns>Media type on success, null otherwise</returns>
|
||||
internal static MediaType? GetDiscTypeFromStrings(string? discType, string? discSubType)
|
||||
{
|
||||
return discType switch
|
||||
{
|
||||
"3\" floppy" => MediaType.FloppyDisk,
|
||||
"3.5\" floppy" => MediaType.FloppyDisk,
|
||||
"3.5\" magneto-optical" => MediaType.Floptical,
|
||||
"3.5\" SyQuest cartridge" => null,
|
||||
"3.9\" SyQuest cartridge" => null,
|
||||
"5.25\" floppy" => MediaType.FloppyDisk,
|
||||
"5.25\" magneto-optical" => MediaType.Floptical,
|
||||
"5.25\" SyQuest cartridge" => null,
|
||||
"8\" floppy" => MediaType.FloppyDisk,
|
||||
"300mm magneto optical" => MediaType.Floptical,
|
||||
"356mm magneto-optical" => MediaType.Floptical,
|
||||
"Advanced Digital Recording" => null,
|
||||
"Advanced Intelligent Tape" => null,
|
||||
"Archival Disc" => null,
|
||||
"BeeCard" => null,
|
||||
"Blu-ray" => discSubType switch
|
||||
{
|
||||
"Wii U Optical Disc" => MediaType.NintendoWiiUOpticalDisc,
|
||||
_ => MediaType.BluRay,
|
||||
},
|
||||
"Borsu" => null,
|
||||
"Compact Cassette" => MediaType.Cassette,
|
||||
"Compact Disc" => MediaType.CDROM,
|
||||
"Compact Flash" => MediaType.CompactFlash,
|
||||
"CompacTape" => null,
|
||||
"CRVdisc" => null,
|
||||
"Data8" => null,
|
||||
"DataPlay" => null,
|
||||
"DataStore" => null,
|
||||
"DDCD" => MediaType.CDROM,
|
||||
"DECtape" => null,
|
||||
"DemiDiskette" => null,
|
||||
"Digital Audio Tape" => null,
|
||||
"Digital Data Storage" => MediaType.DataCartridge,
|
||||
"Digital Linear Tape" => null,
|
||||
"DIR" => null,
|
||||
"DST" => null,
|
||||
"DTF" => null,
|
||||
"DTF2" => null,
|
||||
"DV tape" => null,
|
||||
"DVD" => discSubType switch
|
||||
{
|
||||
"GameCube Game Disc" => MediaType.NintendoGameCubeGameDisc,
|
||||
"Wii Optical Disc" => MediaType.NintendoWiiOpticalDisc,
|
||||
_ => MediaType.DVD,
|
||||
},
|
||||
"EVD" => null,
|
||||
"Exatape" => null,
|
||||
"Express Card" => null,
|
||||
"FDDVD" => null,
|
||||
"Flextra" => null,
|
||||
"Floptical" => MediaType.Floptical,
|
||||
"FVD" => null,
|
||||
"GD" => MediaType.GDROM,
|
||||
"Hard Disk Drive" => MediaType.HardDisk,
|
||||
"HD DVD" => MediaType.HDDVD,
|
||||
"HD VMD" => null,
|
||||
"HiFD" => MediaType.FloppyDisk,
|
||||
"HiTC" => null,
|
||||
"HuCard" => MediaType.Cartridge,
|
||||
"HVD" => null,
|
||||
"HyperFlex" => null,
|
||||
"IBM 3470" => null,
|
||||
"IBM 3480" => null,
|
||||
"IBM 3490" => null,
|
||||
"IBM 3490E" => null,
|
||||
"IBM 3592" => null,
|
||||
"Iomega Bernoulli Box" => MediaType.IomegaBernoulliDisk,
|
||||
"Iomega Bernoulli Box II" => MediaType.IomegaBernoulliDisk,
|
||||
"Iomega Ditto" => null,
|
||||
"Iomega Jaz" => MediaType.IomegaJaz,
|
||||
"Iomega PocketZip" => MediaType.IomegaZip,
|
||||
"Iomega REV" => null,
|
||||
"Iomega ZIP" => MediaType.IomegaZip,
|
||||
"Kodak Verbatim" => null,
|
||||
"LaserDisc" => MediaType.LaserDisc,
|
||||
"Linear Tape-Open" => null,
|
||||
"LT1" => null,
|
||||
"Magneto-optical" => MediaType.Floptical,
|
||||
"Memory Stick" => MediaType.SDCard,
|
||||
"MiniCard" => null,
|
||||
"MiniDisc" => null,
|
||||
"MultiMediaCard" => MediaType.SDCard,
|
||||
"Nintendo 3DS Game Card" => MediaType.Cartridge,
|
||||
"Nintendo 64 Disk" => MediaType.Nintendo64DD,
|
||||
"Nintendo 64 Game Pak" => MediaType.Cartridge,
|
||||
"Nintendo Disk Card" => MediaType.NintendoFamicomDiskSystem,
|
||||
"Nintendo DS Game Card" => MediaType.Cartridge,
|
||||
"Nintendo DSi Game Card" => MediaType.Cartridge,
|
||||
"Nintendo Entertainment System Game Pak" => MediaType.Cartridge,
|
||||
"Nintendo Famicom Game Pak" => MediaType.Cartridge,
|
||||
"Nintendo Game Boy Advance Game Pak" => MediaType.Cartridge,
|
||||
"Nintendo Game Boy Game Pak" => MediaType.Cartridge,
|
||||
"Nintendo Switch Game Card" => MediaType.Cartridge,
|
||||
"Optical Disc Archive" => null,
|
||||
"Orb" => null,
|
||||
"PCMCIA Card" => null,
|
||||
"PD650" => null,
|
||||
"PlayStation Memory Card" => null,
|
||||
"Quarter-inch cartridge" => MediaType.DataCartridge,
|
||||
"Quarter-inch mini cartridge" => MediaType.DataCartridge,
|
||||
"QuickDisk" => null,
|
||||
"RDX" => null,
|
||||
"SACD" => MediaType.DVD,
|
||||
"Scalable Linear Recording" => null,
|
||||
"Secure Digital" => MediaType.SDCard,
|
||||
"SmartMedia" => MediaType.SDCard,
|
||||
"Sony Professional Disc" => null,
|
||||
"Sony Professional Disc for DATA" => null,
|
||||
"STK 4480" => null,
|
||||
"STK 4490" => null,
|
||||
"STK 9490" => null,
|
||||
"STK T-9840" => null,
|
||||
"STK T-9940" => null,
|
||||
"STK T-10000" => null,
|
||||
"Super Advanced Intelligent Tape" => null,
|
||||
"Super Digital Linear Tape" => null,
|
||||
"Super Nintendo Game Pak" => MediaType.Cartridge,
|
||||
"Super Nintendo Game Pak (US)" => MediaType.Cartridge,
|
||||
"SuperDisk" => MediaType.FloppyDisk,
|
||||
"SVOD" => null,
|
||||
"Travan" => null,
|
||||
"UDO" => null,
|
||||
"UHD144" => null,
|
||||
"UMD" => MediaType.UMD,
|
||||
"Unknown" => null,
|
||||
"USB flash drive" => MediaType.FlashDrive,
|
||||
"VCDHD" => null,
|
||||
"VideoFloppy" => null,
|
||||
"VideoNow" => MediaType.CDROM,
|
||||
"VXA" => MediaType.FlashDrive,
|
||||
"Wafer" => null,
|
||||
"xD" => null,
|
||||
"XQD" => null,
|
||||
"Zoned Hard Disk Drive" => MediaType.HardDisk,
|
||||
"ZX Microdrive" => null,
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the DVD protection information, if possible
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user