diff --git a/RedumpTool/Features/BuildUrlFeature.cs b/RedumpTool/Features/BuildUrlFeature.cs index fb0d68f..cb1255e 100644 --- a/RedumpTool/Features/BuildUrlFeature.cs +++ b/RedumpTool/Features/BuildUrlFeature.cs @@ -144,7 +144,7 @@ namespace RedumpTool.Features string? statusString = StatusInput.Value; DumpStatus? status = statusString.ToDumpStatus(); string? systemString = SystemInput.Value; - RedumpSystem? system = systemString.ToRedumpSystem(); + PhysicalSystem? system = systemString.ToPhysicalSystem(); int? tracks = TracksInput.Value; // Get the downloads path values diff --git a/RedumpTool/Features/SiteFeature.cs b/RedumpTool/Features/SiteFeature.cs index 564cf40..994b443 100644 --- a/RedumpTool/Features/SiteFeature.cs +++ b/RedumpTool/Features/SiteFeature.cs @@ -143,7 +143,7 @@ namespace RedumpTool.Features string? statusString = StatusInput.Value; DumpStatus? status = statusString.ToDumpStatus(); string? systemString = SystemInput.Value; - RedumpSystem? system = systemString.ToRedumpSystem(); + PhysicalSystem? system = systemString.ToPhysicalSystem(); int? tracks = TracksInput.Value; // Get specific values diff --git a/SabreTools.RedumpLib.Test/Data/ExtensionsTests.cs b/SabreTools.RedumpLib.Test/Data/ExtensionsTests.cs index 512bc97..d45f4cd 100644 --- a/SabreTools.RedumpLib.Test/Data/ExtensionsTests.cs +++ b/SabreTools.RedumpLib.Test/Data/ExtensionsTests.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Data; using System.Linq; @@ -9,6 +9,37 @@ namespace SabreTools.RedumpLib.Test.Data { public class ExtensionsTests { + #region Cross-Enumeration + + /// + /// Check that every supported system has some set of MediaTypes supported + /// + /// PhysicalSystem value to check + [Theory] + [MemberData(nameof(GeneratePhysicalSystemMappingTestData))] + public void MediaTypesTest(PhysicalSystem? physicalSystem) + { + var actual = physicalSystem.MediaTypes(); + Assert.NotEmpty(actual); + } + + /// + /// Generate a test set of PhysicalSystem values + /// + /// MemberData-compatible list of PhysicalSystem values + public static TheoryData GeneratePhysicalSystemMappingTestData() + { + var testData = new TheoryData() { null }; + foreach (PhysicalSystem? physicalSystem in Enum.GetValues().Cast()) + { + testData.Add(physicalSystem); + } + + return testData; + } + + #endregion + #region Language /// @@ -238,6 +269,1260 @@ namespace SabreTools.RedumpLib.Test.Data #endregion + #region Physical System + + /// + /// PhysicalSystem values that are considered Audio + /// + private static readonly PhysicalSystem?[] _audioSystems = + [ + PhysicalSystem.AtariJaguarCDInteractiveMultimediaSystem, + PhysicalSystem.AudioCD, + PhysicalSystem.DVDAudio, + PhysicalSystem.HasbroiONEducationalGamingSystem, + PhysicalSystem.HasbroVideoNow, + PhysicalSystem.HasbroVideoNowColor, + PhysicalSystem.HasbroVideoNowJr, + PhysicalSystem.HasbroVideoNowXP, + PhysicalSystem.PlayStationGameSharkUpdates, + PhysicalSystem.PhilipsCDi, + PhysicalSystem.SuperAudioCD, + ]; + + /// + /// PhysicalSystem values that are available + /// + private static readonly PhysicalSystem?[] _availableSystems = + [ + // BIOS Sets + PhysicalSystem.MicrosoftXboxBIOS, + PhysicalSystem.NintendoGameCubeBIOS, + PhysicalSystem.SonyPlayStationBIOS, + PhysicalSystem.SonyPlayStation2BIOS, + + // Disc-Based Consoles + PhysicalSystem.AtariJaguarCDInteractiveMultimediaSystem, + PhysicalSystem.BandaiPlaydiaQuickInteractiveSystem, + PhysicalSystem.BandaiPippin, + PhysicalSystem.CommodoreAmigaCD32, + PhysicalSystem.CommodoreAmigaCDTV, + PhysicalSystem.HasbroVideoNow, + PhysicalSystem.HasbroVideoNowColor, + PhysicalSystem.HasbroVideoNowJr, + PhysicalSystem.HasbroVideoNowXP, + PhysicalSystem.MattelFisherPriceiXL, + PhysicalSystem.MattelHyperScan, + PhysicalSystem.MemorexVisualInformationSystem, + PhysicalSystem.MicrosoftXbox, + PhysicalSystem.MicrosoftXbox360, + PhysicalSystem.MicrosoftXboxOne, + PhysicalSystem.MicrosoftXboxSeriesXS, + PhysicalSystem.NECPCEngineCDTurboGrafxCD, + PhysicalSystem.NECPCFXPCFXGA, + PhysicalSystem.NintendoGameCube, + PhysicalSystem.NintendoWii, + PhysicalSystem.NintendoWiiU, + PhysicalSystem.Panasonic3DOInteractiveMultiplayer, + PhysicalSystem.PhilipsCDi, + PhysicalSystem.SegaDreamcast, + PhysicalSystem.SegaMegaCDSegaCD, + PhysicalSystem.SegaSaturn, + PhysicalSystem.SNKNeoGeoCD, + PhysicalSystem.SonyPlayStation, + PhysicalSystem.SonyPlayStation2, + PhysicalSystem.SonyPlayStation3, + PhysicalSystem.SonyPlayStation4, + PhysicalSystem.SonyPlayStation5, + PhysicalSystem.SonyPlayStationPortable, + PhysicalSystem.VMLabsNUON, + PhysicalSystem.VTechVFlashVSmilePro, + PhysicalSystem.ZAPiTGamesGameWaveFamilyEntertainmentSystem, + + // Computers + PhysicalSystem.AcornArchimedes, + PhysicalSystem.AppleMacintosh, + PhysicalSystem.CommodoreAmigaCD, + PhysicalSystem.FujitsuFMTownsseries, + PhysicalSystem.IBMPCcompatible, + PhysicalSystem.NECPC88series, + PhysicalSystem.NECPC98series, + PhysicalSystem.SharpX68000, + + // Arcade + PhysicalSystem.funworldPhotoPlay, + PhysicalSystem.IncredibleTechnologiesEagle, + PhysicalSystem.KonamieAmusement, + PhysicalSystem.KonamiFireBeat, + PhysicalSystem.KonamiM2, + PhysicalSystem.KonamiSystem573, + PhysicalSystem.KonamiSystemGV, + PhysicalSystem.KonamiTwinkle, + PhysicalSystem.NamcoSegaNintendoTriforce, + PhysicalSystem.NamcoSystem12, + PhysicalSystem.NamcoSystem246256, + PhysicalSystem.PanasonicM2, + PhysicalSystem.SegaChihiro, + PhysicalSystem.SegaLindbergh, + PhysicalSystem.SegaNaomi, + PhysicalSystem.SegaNaomi2, + PhysicalSystem.SegaRingEdge, + PhysicalSystem.SegaRingEdge2, + PhysicalSystem.SegaTitanVideo, + PhysicalSystem.TABAustriaQuizard, + + // Other + PhysicalSystem.AudioCD, + PhysicalSystem.BDVideo, + PhysicalSystem.DVDVideo, + PhysicalSystem.EnhancedCD, + PhysicalSystem.HDDVDVideo, + PhysicalSystem.NavisoftNaviken21, + PhysicalSystem.PalmOS, + PhysicalSystem.PhotoCD, + PhysicalSystem.PlayStationGameSharkUpdates, + PhysicalSystem.PocketPC, + PhysicalSystem.SegaPrologue21MultimediaKaraokeSystem, + PhysicalSystem.TaoiKTV, + PhysicalSystem.TomyKissSite, + PhysicalSystem.VideoCD, + ]; + + /// + /// PhysicalSystem values that are dumper-only + /// + private static readonly PhysicalSystem?[] _bannedSystems = + [ + // Disc-Based Consoles + PhysicalSystem.HasbroVideoNow, + PhysicalSystem.HasbroVideoNowColor, + PhysicalSystem.HasbroVideoNowJr, + PhysicalSystem.HasbroVideoNowXP, + PhysicalSystem.MicrosoftXboxOne, + PhysicalSystem.MicrosoftXboxSeriesXS, + PhysicalSystem.NintendoWiiU, + PhysicalSystem.SonyPlayStation4, + PhysicalSystem.SonyPlayStation5, + + // Arcade + PhysicalSystem.KonamiM2, + PhysicalSystem.PanasonicM2, + + // Other + PhysicalSystem.AudioCD, + PhysicalSystem.BDVideo, + PhysicalSystem.DVDVideo, + PhysicalSystem.EnhancedCD, + PhysicalSystem.HDDVDVideo, + PhysicalSystem.NavisoftNaviken21, + PhysicalSystem.VideoCD, + ]; + + /// + /// PhysicalSystem values that are considered markers + /// + private static readonly PhysicalSystem?[] _markerSystems = + [ + PhysicalSystem.MarkerArcadeEnd, + PhysicalSystem.MarkerComputerEnd, + PhysicalSystem.MarkerDiscBasedConsoleEnd, + PhysicalSystem.MarkerOtherEnd, + ]; + + /// + /// PhysicalSystem values that are have reversed ringcodes + /// + private static readonly PhysicalSystem?[] _reverseRingcodeSystems = + [ + PhysicalSystem.SonyPlayStation2, + PhysicalSystem.SonyPlayStation3, + PhysicalSystem.SonyPlayStation4, + PhysicalSystem.SonyPlayStation5, + PhysicalSystem.SonyPlayStationPortable, + ]; + + /// + /// Map of PhysicalSystem values to their corresponding categories + /// + private static readonly Dictionary _systemCategoryMap = new() + { + // BIOS + [PhysicalSystem.MicrosoftXboxBIOS] = SystemCategory.NONE, + [PhysicalSystem.NintendoGameCubeBIOS] = SystemCategory.NONE, + [PhysicalSystem.SonyPlayStationBIOS] = SystemCategory.NONE, + [PhysicalSystem.SonyPlayStation2BIOS] = SystemCategory.NONE, + + // Disc-Based Consoles + [PhysicalSystem.AtariJaguarCDInteractiveMultimediaSystem] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.BandaiPlaydiaQuickInteractiveSystem] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.BandaiPippin] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.CommodoreAmigaCD32] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.CommodoreAmigaCDTV] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.EnvizionsEVOSmartConsole] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.FujitsuFMTownsMarty] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.HasbroiONEducationalGamingSystem] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.HasbroVideoNow] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.HasbroVideoNowColor] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.HasbroVideoNowJr] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.HasbroVideoNowXP] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.MattelFisherPriceiXL] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.MattelHyperScan] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.MemorexVisualInformationSystem] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.MicrosoftXbox] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.MicrosoftXbox360] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.MicrosoftXboxOne] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.MicrosoftXboxSeriesXS] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.NECPCEngineCDTurboGrafxCD] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.NECPCFXPCFXGA] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.NintendoGameCube] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.NintendoSonySuperNESCDROMSystem] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.NintendoWii] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.NintendoWiiU] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.Panasonic3DOInteractiveMultiplayer] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.PhilipsCDi] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.PlaymajiPolymega] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.PioneerLaserActive] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.SegaDreamcast] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.SegaMegaCDSegaCD] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.SegaSaturn] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.SNKNeoGeoCD] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.SonyPlayStation] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.SonyPlayStation2] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.SonyPlayStation3] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.SonyPlayStation4] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.SonyPlayStation5] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.SonyPlayStationPortable] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.VMLabsNUON] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.VTechVFlashVSmilePro] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.ZAPiTGamesGameWaveFamilyEntertainmentSystem] = SystemCategory.DiscBasedConsole, + [PhysicalSystem.MarkerDiscBasedConsoleEnd] = SystemCategory.NONE, + + // Computers + [PhysicalSystem.AcornArchimedes] = SystemCategory.Computer, + [PhysicalSystem.AppleMacintosh] = SystemCategory.Computer, + [PhysicalSystem.CommodoreAmigaCD] = SystemCategory.Computer, + [PhysicalSystem.FujitsuFMTownsseries] = SystemCategory.Computer, + [PhysicalSystem.IBMPCcompatible] = SystemCategory.Computer, + [PhysicalSystem.NECPC88series] = SystemCategory.Computer, + [PhysicalSystem.NECPC98series] = SystemCategory.Computer, + [PhysicalSystem.SharpX68000] = SystemCategory.Computer, + [PhysicalSystem.MarkerComputerEnd] = SystemCategory.NONE, + + // Arcade + [PhysicalSystem.AmigaCUBOCD32] = SystemCategory.Arcade, + [PhysicalSystem.AmericanLaserGames3DO] = SystemCategory.Arcade, + [PhysicalSystem.Atari3DO] = SystemCategory.Arcade, + [PhysicalSystem.Atronic] = SystemCategory.Arcade, + [PhysicalSystem.AUSCOMSystem1] = SystemCategory.Arcade, + [PhysicalSystem.BallyGameMagic] = SystemCategory.Arcade, + [PhysicalSystem.CapcomCPSystemIII] = SystemCategory.Arcade, + [PhysicalSystem.funworldPhotoPlay] = SystemCategory.Arcade, + [PhysicalSystem.FuRyuOmronPurikura] = SystemCategory.Arcade, + [PhysicalSystem.GlobalVRVarious] = SystemCategory.Arcade, + [PhysicalSystem.GlobalVRVortek] = SystemCategory.Arcade, + [PhysicalSystem.GlobalVRVortekV3] = SystemCategory.Arcade, + [PhysicalSystem.ICEPCHardware] = SystemCategory.Arcade, + [PhysicalSystem.IncredibleTechnologiesEagle] = SystemCategory.Arcade, + [PhysicalSystem.IncredibleTechnologiesVarious] = SystemCategory.Arcade, + [PhysicalSystem.JVLiTouch] = SystemCategory.Arcade, + [PhysicalSystem.KonamieAmusement] = SystemCategory.Arcade, + [PhysicalSystem.KonamiFireBeat] = SystemCategory.Arcade, + [PhysicalSystem.KonamiM2] = SystemCategory.Arcade, + [PhysicalSystem.KonamiPython] = SystemCategory.Arcade, + [PhysicalSystem.KonamiPython2] = SystemCategory.Arcade, + [PhysicalSystem.KonamiSystem573] = SystemCategory.Arcade, + [PhysicalSystem.KonamiSystemGV] = SystemCategory.Arcade, + [PhysicalSystem.KonamiTwinkle] = SystemCategory.Arcade, + [PhysicalSystem.KonamiVarious] = SystemCategory.Arcade, + [PhysicalSystem.MeritIndustriesBoardwalk] = SystemCategory.Arcade, + [PhysicalSystem.MeritIndustriesMegaTouchForce] = SystemCategory.Arcade, + [PhysicalSystem.MeritIndustriesMegaTouchION] = SystemCategory.Arcade, + [PhysicalSystem.MeritIndustriesMegaTouchMaxx] = SystemCategory.Arcade, + [PhysicalSystem.MeritIndustriesMegaTouchXL] = SystemCategory.Arcade, + [PhysicalSystem.NamcoPurikura] = SystemCategory.Arcade, + [PhysicalSystem.NamcoSegaNintendoTriforce] = SystemCategory.Arcade, + [PhysicalSystem.NamcoSystem12] = SystemCategory.Arcade, + [PhysicalSystem.NamcoSystem246256] = SystemCategory.Arcade, + [PhysicalSystem.NewJatreCDi] = SystemCategory.Arcade, + [PhysicalSystem.NichibutsuHighRateSystem] = SystemCategory.Arcade, + [PhysicalSystem.NichibutsuSuperCD] = SystemCategory.Arcade, + [PhysicalSystem.NichibutsuXRateSystem] = SystemCategory.Arcade, + [PhysicalSystem.PanasonicM2] = SystemCategory.Arcade, + [PhysicalSystem.PhotoPlayVarious] = SystemCategory.Arcade, + [PhysicalSystem.RawThrillsVarious] = SystemCategory.Arcade, + [PhysicalSystem.SegaALLS] = SystemCategory.Arcade, + [PhysicalSystem.SegaChihiro] = SystemCategory.Arcade, + [PhysicalSystem.SegaEuropaR] = SystemCategory.Arcade, + [PhysicalSystem.SegaLindbergh] = SystemCategory.Arcade, + [PhysicalSystem.SegaNaomi] = SystemCategory.Arcade, + [PhysicalSystem.SegaNaomi2] = SystemCategory.Arcade, + [PhysicalSystem.SegaNaomiSatelliteTerminalPC] = SystemCategory.Arcade, + [PhysicalSystem.SegaNu] = SystemCategory.Arcade, + [PhysicalSystem.SegaNu11] = SystemCategory.Arcade, + [PhysicalSystem.SegaNu2] = SystemCategory.Arcade, + [PhysicalSystem.SegaNuSX] = SystemCategory.Arcade, + [PhysicalSystem.SegaRingEdge] = SystemCategory.Arcade, + [PhysicalSystem.SegaRingEdge2] = SystemCategory.Arcade, + [PhysicalSystem.SegaRingWide] = SystemCategory.Arcade, + [PhysicalSystem.SegaSystem32] = SystemCategory.Arcade, + [PhysicalSystem.SegaTitanVideo] = SystemCategory.Arcade, + [PhysicalSystem.SeibuCATSSystem] = SystemCategory.Arcade, + [PhysicalSystem.TABAustriaQuizard] = SystemCategory.Arcade, + [PhysicalSystem.TsunamiTsuMoMultiGameMotionSystem] = SystemCategory.Arcade, + [PhysicalSystem.UltraCade] = SystemCategory.Arcade, + [PhysicalSystem.MarkerArcadeEnd] = SystemCategory.NONE, + + // Other + [PhysicalSystem.AudioCD] = SystemCategory.Other, + [PhysicalSystem.BDVideo] = SystemCategory.Other, + [PhysicalSystem.DVDAudio] = SystemCategory.Other, + [PhysicalSystem.DVDVideo] = SystemCategory.Other, + [PhysicalSystem.EnhancedCD] = SystemCategory.Other, + [PhysicalSystem.HDDVDVideo] = SystemCategory.Other, + [PhysicalSystem.NavisoftNaviken21] = SystemCategory.Other, + [PhysicalSystem.PalmOS] = SystemCategory.Other, + [PhysicalSystem.PhotoCD] = SystemCategory.Other, + [PhysicalSystem.PlayStationGameSharkUpdates] = SystemCategory.Other, + [PhysicalSystem.PocketPC] = SystemCategory.Other, + [PhysicalSystem.Psion] = SystemCategory.Other, + [PhysicalSystem.RainbowDisc] = SystemCategory.Other, + [PhysicalSystem.SegaPrologue21MultimediaKaraokeSystem] = SystemCategory.Other, + [PhysicalSystem.SharpZaurus] = SystemCategory.Other, + [PhysicalSystem.SonyElectronicBook] = SystemCategory.Other, + [PhysicalSystem.SuperAudioCD] = SystemCategory.Other, + [PhysicalSystem.TaoiKTV] = SystemCategory.Other, + [PhysicalSystem.TomyKissSite] = SystemCategory.Other, + [PhysicalSystem.VideoCD] = SystemCategory.Other, + [PhysicalSystem.MarkerOtherEnd] = SystemCategory.NONE, + }; + + /// + /// PhysicalSystem values that have cuesheet packs + /// + private static readonly PhysicalSystem?[] _systemsWithCues = + [ + // Disc-Based Consoles + PhysicalSystem.AtariJaguarCDInteractiveMultimediaSystem, + PhysicalSystem.BandaiPlaydiaQuickInteractiveSystem, + PhysicalSystem.BandaiPippin, + PhysicalSystem.CommodoreAmigaCD32, + PhysicalSystem.CommodoreAmigaCDTV, + PhysicalSystem.HasbroVideoNow, + PhysicalSystem.HasbroVideoNowColor, + PhysicalSystem.HasbroVideoNowJr, + PhysicalSystem.HasbroVideoNowXP, + PhysicalSystem.MattelFisherPriceiXL, + PhysicalSystem.MattelHyperScan, + PhysicalSystem.MemorexVisualInformationSystem, + PhysicalSystem.MicrosoftXbox, + PhysicalSystem.MicrosoftXbox360, + PhysicalSystem.NECPCEngineCDTurboGrafxCD, + PhysicalSystem.NECPCFXPCFXGA, + PhysicalSystem.Panasonic3DOInteractiveMultiplayer, + PhysicalSystem.PhilipsCDi, + PhysicalSystem.SegaDreamcast, + PhysicalSystem.SegaMegaCDSegaCD, + PhysicalSystem.SegaSaturn, + PhysicalSystem.SNKNeoGeoCD, + PhysicalSystem.SonyPlayStation, + PhysicalSystem.SonyPlayStation2, + PhysicalSystem.SonyPlayStation3, + PhysicalSystem.VTechVFlashVSmilePro, + + // Computers + PhysicalSystem.AcornArchimedes, + PhysicalSystem.AppleMacintosh, + PhysicalSystem.CommodoreAmigaCD, + PhysicalSystem.FujitsuFMTownsseries, + PhysicalSystem.IBMPCcompatible, + PhysicalSystem.NECPC88series, + PhysicalSystem.NECPC98series, + PhysicalSystem.SharpX68000, + + // Arcade + PhysicalSystem.funworldPhotoPlay, + PhysicalSystem.IncredibleTechnologiesEagle, + PhysicalSystem.KonamieAmusement, + PhysicalSystem.KonamiFireBeat, + PhysicalSystem.KonamiM2, + PhysicalSystem.KonamiSystem573, + PhysicalSystem.KonamiSystemGV, + PhysicalSystem.NamcoSegaNintendoTriforce, + PhysicalSystem.NamcoSystem246256, + PhysicalSystem.PanasonicM2, + PhysicalSystem.SegaChihiro, + PhysicalSystem.SegaNaomi, + PhysicalSystem.SegaNaomi2, + PhysicalSystem.TABAustriaQuizard, + + // Other + PhysicalSystem.AudioCD, + PhysicalSystem.NavisoftNaviken21, + PhysicalSystem.PalmOS, + PhysicalSystem.PhotoCD, + PhysicalSystem.PlayStationGameSharkUpdates, + PhysicalSystem.PocketPC, + PhysicalSystem.SegaPrologue21MultimediaKaraokeSystem, + PhysicalSystem.TomyKissSite, + PhysicalSystem.VideoCD, + ]; + + /// + /// PhysicalSystem values that have dats + /// + private static readonly PhysicalSystem?[] _systemsWithDats = + [ + // BIOS Sets + PhysicalSystem.MicrosoftXboxBIOS, + PhysicalSystem.NintendoGameCubeBIOS, + PhysicalSystem.SonyPlayStationBIOS, + PhysicalSystem.SonyPlayStation2BIOS, + + // Disc-Based Consoles + PhysicalSystem.AtariJaguarCDInteractiveMultimediaSystem, + PhysicalSystem.BandaiPlaydiaQuickInteractiveSystem, + PhysicalSystem.BandaiPippin, + PhysicalSystem.CommodoreAmigaCD32, + PhysicalSystem.CommodoreAmigaCDTV, + PhysicalSystem.HasbroVideoNow, + PhysicalSystem.HasbroVideoNowColor, + PhysicalSystem.HasbroVideoNowJr, + PhysicalSystem.HasbroVideoNowXP, + PhysicalSystem.MattelFisherPriceiXL, + PhysicalSystem.MattelHyperScan, + PhysicalSystem.MemorexVisualInformationSystem, + PhysicalSystem.MicrosoftXbox, + PhysicalSystem.MicrosoftXbox360, + PhysicalSystem.MicrosoftXboxOne, + PhysicalSystem.MicrosoftXboxSeriesXS, + PhysicalSystem.NECPCEngineCDTurboGrafxCD, + PhysicalSystem.NECPCFXPCFXGA, + PhysicalSystem.NintendoGameCube, + PhysicalSystem.NintendoWii, + PhysicalSystem.NintendoWiiU, + PhysicalSystem.Panasonic3DOInteractiveMultiplayer, + PhysicalSystem.PhilipsCDi, + PhysicalSystem.SegaDreamcast, + PhysicalSystem.SegaMegaCDSegaCD, + PhysicalSystem.SegaSaturn, + PhysicalSystem.SNKNeoGeoCD, + PhysicalSystem.SonyPlayStation, + PhysicalSystem.SonyPlayStation2, + PhysicalSystem.SonyPlayStation3, + PhysicalSystem.SonyPlayStation4, + PhysicalSystem.SonyPlayStation5, + PhysicalSystem.SonyPlayStationPortable, + PhysicalSystem.VMLabsNUON, + PhysicalSystem.VTechVFlashVSmilePro, + PhysicalSystem.ZAPiTGamesGameWaveFamilyEntertainmentSystem, + + // Computers + PhysicalSystem.AcornArchimedes, + PhysicalSystem.AppleMacintosh, + PhysicalSystem.CommodoreAmigaCD, + PhysicalSystem.FujitsuFMTownsseries, + PhysicalSystem.IBMPCcompatible, + PhysicalSystem.NECPC88series, + PhysicalSystem.NECPC98series, + PhysicalSystem.SharpX68000, + + // Arcade + PhysicalSystem.funworldPhotoPlay, + PhysicalSystem.IncredibleTechnologiesEagle, + PhysicalSystem.KonamieAmusement, + PhysicalSystem.KonamiFireBeat, + PhysicalSystem.KonamiM2, + PhysicalSystem.KonamiSystem573, + PhysicalSystem.KonamiSystemGV, + PhysicalSystem.NamcoSegaNintendoTriforce, + PhysicalSystem.NamcoSystem246256, + PhysicalSystem.PanasonicM2, + PhysicalSystem.SegaChihiro, + PhysicalSystem.SegaLindbergh, + PhysicalSystem.SegaNaomi, + PhysicalSystem.SegaNaomi2, + PhysicalSystem.SegaRingEdge, + PhysicalSystem.SegaRingEdge2, + PhysicalSystem.TABAustriaQuizard, + + // Other + PhysicalSystem.AudioCD, + PhysicalSystem.BDVideo, + PhysicalSystem.DVDVideo, + PhysicalSystem.HDDVDVideo, + PhysicalSystem.NavisoftNaviken21, + PhysicalSystem.PalmOS, + PhysicalSystem.PhotoCD, + PhysicalSystem.PlayStationGameSharkUpdates, + PhysicalSystem.PocketPC, + PhysicalSystem.SegaPrologue21MultimediaKaraokeSystem, + PhysicalSystem.TomyKissSite, + PhysicalSystem.VideoCD, + ]; + + /// + /// PhysicalSystem values that have decrypted keys + /// + private static readonly PhysicalSystem?[] _systemsWithDKeys = + [ + PhysicalSystem.SonyPlayStation3, + ]; + + /// + /// PhysicalSystem values that have GDI packs + /// + private static readonly PhysicalSystem?[] _systemsWithGdis = + [ + // Disc-Based Consoles + PhysicalSystem.SegaDreamcast, + + // Arcade + PhysicalSystem.NamcoSegaNintendoTriforce, + PhysicalSystem.SegaChihiro, + PhysicalSystem.SegaNaomi, + PhysicalSystem.SegaNaomi2, + ]; + + /// + /// PhysicalSystem values that have keys + /// + private static readonly PhysicalSystem?[] _systemsWithKeys = + [ + PhysicalSystem.NintendoWiiU, + PhysicalSystem.SonyPlayStation3, + ]; + + /// + /// PhysicalSystem values that have LSD packs + /// + private static readonly PhysicalSystem?[] _systemsWithLsds = + [ + // Disc-Based Consoles + PhysicalSystem.SonyPlayStation, + + // Computers + PhysicalSystem.AppleMacintosh, + PhysicalSystem.IBMPCcompatible, + ]; + + /// + /// PhysicalSystem values that have SBI packs + /// + private static readonly PhysicalSystem?[] _systemsWithSbis = + [ + // Disc-Based Consoles + PhysicalSystem.SonyPlayStation, + + // Computers + PhysicalSystem.AppleMacintosh, + PhysicalSystem.IBMPCcompatible, + ]; + + /// + /// PhysicalSystem values that are considered detected by Windows + /// + private static readonly PhysicalSystem?[] _windowsDetectedSystems = + [ + // Disc-Based Consoles + PhysicalSystem.CommodoreAmigaCD32, + PhysicalSystem.CommodoreAmigaCDTV, + PhysicalSystem.EnvizionsEVOSmartConsole, + PhysicalSystem.FujitsuFMTownsMarty, + PhysicalSystem.HasbroiONEducationalGamingSystem, + PhysicalSystem.MattelFisherPriceiXL, + PhysicalSystem.MattelHyperScan, + PhysicalSystem.MemorexVisualInformationSystem, + PhysicalSystem.MicrosoftXbox, + PhysicalSystem.MicrosoftXbox360, + PhysicalSystem.MicrosoftXboxOne, + PhysicalSystem.MicrosoftXboxSeriesXS, + PhysicalSystem.NECPCEngineCDTurboGrafxCD, + PhysicalSystem.NECPCFXPCFXGA, + PhysicalSystem.NintendoSonySuperNESCDROMSystem, + PhysicalSystem.PlaymajiPolymega, + PhysicalSystem.SegaDreamcast, + PhysicalSystem.SegaMegaCDSegaCD, + PhysicalSystem.SegaSaturn, + PhysicalSystem.SNKNeoGeoCD, + PhysicalSystem.SonyPlayStation, + PhysicalSystem.SonyPlayStation2, + PhysicalSystem.SonyPlayStation3, + PhysicalSystem.SonyPlayStation4, + PhysicalSystem.SonyPlayStation5, + PhysicalSystem.SonyPlayStationPortable, + PhysicalSystem.VMLabsNUON, + PhysicalSystem.VTechVFlashVSmilePro, + PhysicalSystem.ZAPiTGamesGameWaveFamilyEntertainmentSystem, + + // Computers + PhysicalSystem.AcornArchimedes, + PhysicalSystem.CommodoreAmigaCD, + PhysicalSystem.FujitsuFMTownsseries, + PhysicalSystem.IBMPCcompatible, + PhysicalSystem.NECPC88series, + PhysicalSystem.NECPC98series, + PhysicalSystem.SharpX68000, + + // Arcade + PhysicalSystem.AmigaCUBOCD32, + PhysicalSystem.Atronic, + PhysicalSystem.AUSCOMSystem1, + PhysicalSystem.BallyGameMagic, + PhysicalSystem.CapcomCPSystemIII, + PhysicalSystem.funworldPhotoPlay, + PhysicalSystem.FuRyuOmronPurikura, + PhysicalSystem.GlobalVRVarious, + PhysicalSystem.GlobalVRVortek, + PhysicalSystem.GlobalVRVortekV3, + PhysicalSystem.ICEPCHardware, + PhysicalSystem.IncredibleTechnologiesEagle, + PhysicalSystem.IncredibleTechnologiesVarious, + PhysicalSystem.JVLiTouch, + PhysicalSystem.KonamieAmusement, + PhysicalSystem.KonamiFireBeat, + PhysicalSystem.KonamiM2, + PhysicalSystem.KonamiPython, + PhysicalSystem.KonamiPython2, + PhysicalSystem.KonamiSystem573, + PhysicalSystem.KonamiSystemGV, + PhysicalSystem.KonamiTwinkle, + PhysicalSystem.KonamiVarious, + PhysicalSystem.MeritIndustriesBoardwalk, + PhysicalSystem.MeritIndustriesMegaTouchForce, + PhysicalSystem.MeritIndustriesMegaTouchION, + PhysicalSystem.MeritIndustriesMegaTouchMaxx, + PhysicalSystem.MeritIndustriesMegaTouchXL, + PhysicalSystem.NamcoPurikura, + PhysicalSystem.NamcoSegaNintendoTriforce, + PhysicalSystem.NamcoSystem12, + PhysicalSystem.NamcoSystem246256, + PhysicalSystem.NichibutsuHighRateSystem, + PhysicalSystem.NichibutsuSuperCD, + PhysicalSystem.NichibutsuXRateSystem, + PhysicalSystem.PhotoPlayVarious, + PhysicalSystem.RawThrillsVarious, + PhysicalSystem.SegaALLS, + PhysicalSystem.SegaChihiro, + PhysicalSystem.SegaEuropaR, + PhysicalSystem.SegaLindbergh, + PhysicalSystem.SegaNaomi, + PhysicalSystem.SegaNaomi2, + PhysicalSystem.SegaNaomiSatelliteTerminalPC, + PhysicalSystem.SegaNu, + PhysicalSystem.SegaNu11, + PhysicalSystem.SegaNu2, + PhysicalSystem.SegaNuSX, + PhysicalSystem.SegaRingEdge, + PhysicalSystem.SegaRingEdge2, + PhysicalSystem.SegaRingWide, + PhysicalSystem.SegaSystem32, + PhysicalSystem.SegaTitanVideo, + PhysicalSystem.SeibuCATSSystem, + PhysicalSystem.TABAustriaQuizard, + PhysicalSystem.TsunamiTsuMoMultiGameMotionSystem, + PhysicalSystem.UltraCade, + + // Other + PhysicalSystem.AudioCD, + PhysicalSystem.BDVideo, + PhysicalSystem.DVDAudio, + PhysicalSystem.DVDVideo, + PhysicalSystem.EnhancedCD, + PhysicalSystem.HDDVDVideo, + PhysicalSystem.NavisoftNaviken21, + PhysicalSystem.PalmOS, + PhysicalSystem.PhotoCD, + PhysicalSystem.PocketPC, + PhysicalSystem.Psion, + PhysicalSystem.RainbowDisc, + PhysicalSystem.SharpZaurus, + PhysicalSystem.SegaPrologue21MultimediaKaraokeSystem, + PhysicalSystem.SonyElectronicBook, + PhysicalSystem.TaoiKTV, + PhysicalSystem.TomyKissSite, + PhysicalSystem.VideoCD, + ]; + + /// + /// PhysicalSystem values that are considered XGD + /// + private static readonly PhysicalSystem?[] _xgdSystems = + [ + PhysicalSystem.MicrosoftXbox, + PhysicalSystem.MicrosoftXbox360, + PhysicalSystem.MicrosoftXboxOne, + PhysicalSystem.MicrosoftXboxSeriesXS, + ]; + + /// + /// Check that all systems detected by Windows are marked properly + /// + /// PhysicalSystem value to check + /// The expected value to come from the check + [Theory] + [MemberData(nameof(GenerateWindowsDetectedSystemsTestData))] + public void PhysicalSystem_DetectedByWindows(PhysicalSystem? physicalSystem, bool expected) + { + bool actual = physicalSystem.DetectedByWindows(); + Assert.Equal(expected, actual); + } + + /// + /// Check that all systems with reversed ringcodes are marked properly + /// + /// PhysicalSystem value to check + /// The expected value to come from the check + [Theory] + [MemberData(nameof(GenerateReversedRingcodeSystemsTestData))] + public void PhysicalSystem_HasReversedRingcodes(PhysicalSystem? physicalSystem, bool expected) + { + bool actual = physicalSystem.HasReversedRingcodes(); + Assert.Equal(expected, actual); + } + + /// + /// Check that all audio systems are marked properly + /// + /// PhysicalSystem value to check + /// The expected value to come from the check + [Theory] + [MemberData(nameof(GenerateAudioSystemsTestData))] + public void PhysicalSystem_IsAudio(PhysicalSystem? physicalSystem, bool expected) + { + bool actual = physicalSystem.IsAudio(); + Assert.Equal(expected, actual); + } + + /// + /// Check that all marker systems are marked properly + /// + /// PhysicalSystem value to check + /// The expected value to come from the check + [Theory] + [MemberData(nameof(GenerateMarkerSystemsTestData))] + public void PhysicalSystem_IsMarker(PhysicalSystem? physicalSystem, bool expected) + { + bool actual = physicalSystem.IsMarker(); + Assert.Equal(expected, actual); + } + + /// + /// Check that all XGD systems are marked properly + /// + /// PhysicalSystem value to check + /// The expected value to come from the check + [Theory] + [MemberData(nameof(GenerateXGDSystemsTestData))] + public void PhysicalSystem_IsXGD(PhysicalSystem? physicalSystem, bool expected) + { + bool actual = physicalSystem.IsXGD(); + Assert.Equal(expected, actual); + } + + [Fact] + public void PhysicalSystem_ListPhysicalSystem() + { + var actual = Extensions.ListSystems(); + Assert.NotEmpty(actual); + } + + /// + /// Check that every PhysicalSystem has a long name provided + /// + /// PhysicalSystem value to check + /// True to expect a null value, false otherwise + [Theory] + [MemberData(nameof(GeneratePhysicalSystemTestData))] + public void PhysicalSystem_LongName(PhysicalSystem? physicalSystem, bool expectNull) + { + var actual = physicalSystem.LongName(); + + if (expectNull) + Assert.Null(actual); + else + Assert.NotNull(actual); + } + + // TODO: Re-enable the following test once non-Redump systems are accounted for + + /// + /// Check that every PhysicalSystem has a short name provided + /// + /// PhysicalSystem value to check + /// True to expect a null value, false otherwise + // [Theory] + // [MemberData(nameof(GeneratePhysicalSystemTestData))] + // public void PhysicalSystem_ShortName(PhysicalSystem? physicalSystem, bool expectNull) + // { + // string? actual = physicalSystem.ShortName(); + + // if (expectNull) + // Assert.Null(actual); + // else + // Assert.NotNull(actual); + // } + + /// + /// Check that every PhysicalSystem has a short name alt provided + /// + /// PhysicalSystem value to check + /// True to expect a null value, false otherwise + // [Theory] + // [MemberData(nameof(GeneratePhysicalSystemTestData))] + // public void PhysicalSystem_ShortNameAlt(PhysicalSystem? physicalSystem, bool expectNull) + // { + // string? actual = physicalSystem.ShortNameAlt(); + + // if (expectNull) + // Assert.Null(actual); + // else + // Assert.NotNull(actual); + // } + + /// + /// Check that all systems are mapped to a category + /// + /// PhysicalSystem value to check + /// The expected value to come from the check + [Theory] + [MemberData(nameof(GenerateCategoriesSystemTestData))] + public void PhysicalSystem_GetCategory(PhysicalSystem? physicalSystem, SystemCategory expected) + { + SystemCategory actual = physicalSystem.GetCategory(); + Assert.Equal(expected, actual); + } + + /// + /// Check that all available systems are marked properly + /// + /// PhysicalSystem value to check + /// The expected value to come from the check + [Theory] + [MemberData(nameof(GenerateAvailableSystemsTestData))] + public void PhysicalSystem_IsAvailable(PhysicalSystem? physicalSystem, bool expected) + { + bool actual = physicalSystem.IsAvailable(); + Assert.Equal(expected, actual); + } + + /// + /// Check that all banned systems are marked properly + /// + /// PhysicalSystem value to check + /// The expected value to come from the check + [Theory] + [MemberData(nameof(GenerateBannedSystemsTestData))] + public void PhysicalSystem_IsBanned(PhysicalSystem? physicalSystem, bool expected) + { + bool actual = physicalSystem.IsBanned(); + Assert.Equal(expected, actual); + } + + /// + /// Check that all systems with cuesheets are marked properly + /// + /// PhysicalSystem value to check + /// The expected value to come from the check + [Theory] + [MemberData(nameof(GenerateCuesheetSystemsTestData))] + public void PhysicalSystem_HasCues(PhysicalSystem? physicalSystem, bool expected) + { + bool actual = physicalSystem.HasCues(); + Assert.Equal(expected, actual); + } + + /// + /// Check that all systems with DATs are marked properly + /// + /// PhysicalSystem value to check + /// The expected value to come from the check + [Theory] + [MemberData(nameof(GenerateDatSystemsTestData))] + public void PhysicalSystem_HasDat(PhysicalSystem? physicalSystem, bool expected) + { + bool actual = physicalSystem.HasDat(); + Assert.Equal(expected, actual); + } + + /// + /// Check that all systems with decrypted keys are marked properly + /// + /// PhysicalSystem value to check + /// The expected value to come from the check + [Theory] + [MemberData(nameof(GenerateDKeySystemsTestData))] + public void PhysicalSystem_HasDkeys(PhysicalSystem? physicalSystem, bool expected) + { + bool actual = physicalSystem.HasDkeys(); + Assert.Equal(expected, actual); + } + + /// + /// Check that all systems with GDIs are marked properly + /// + /// PhysicalSystem value to check + /// The expected value to come from the check + [Theory] + [MemberData(nameof(GenerateGdiSystemsTestData))] + public void PhysicalSystem_HasGdi(PhysicalSystem? physicalSystem, bool expected) + { + bool actual = physicalSystem.HasGdi(); + Assert.Equal(expected, actual); + } + + /// + /// Check that all systems with keys are marked properly + /// + /// PhysicalSystem value to check + /// The expected value to come from the check + [Theory] + [MemberData(nameof(GenerateKeySystemsTestData))] + public void PhysicalSystem_HasKeys(PhysicalSystem? physicalSystem, bool expected) + { + bool actual = physicalSystem.HasKeys(); + Assert.Equal(expected, actual); + } + + /// + /// Check that all systems with LSDs are marked properly + /// + /// PhysicalSystem value to check + /// The expected value to come from the check + [Theory] + [MemberData(nameof(GenerateLsdSystemsTestData))] + public void PhysicalSystem_HasLsd(PhysicalSystem? physicalSystem, bool expected) + { + bool actual = physicalSystem.HasLsd(); + Assert.Equal(expected, actual); + } + + /// + /// Check that all systems with SBIs are marked properly + /// + /// PhysicalSystem value to check + /// The expected value to come from the check + [Theory] + [MemberData(nameof(GenerateSbiSystemsTestData))] + public void PhysicalSystem_HasSbi(PhysicalSystem? physicalSystem, bool expected) + { + bool actual = physicalSystem.HasSbi(); + Assert.Equal(expected, actual); + } + + /// + /// Check that every PhysicalSystem can be mapped from a string + /// + /// PhysicalSystem value to check + /// True to expect a null value, false otherwise + [Theory] + [MemberData(nameof(GeneratePhysicalSystemTestData))] + public void PhysicalSystem_ToPhysicalSystem(PhysicalSystem? physicalSystem, bool expectNull) + { + string? longName = physicalSystem.LongName(); + string? longNameSpaceless = longName?.Replace(" ", string.Empty); + + var actualNormal = longName.ToPhysicalSystem(); + var actualSpaceless = longNameSpaceless.ToPhysicalSystem(); + + if (expectNull) + { + Assert.Null(actualNormal); + Assert.Null(actualSpaceless); + } + else + { + Assert.Equal(physicalSystem, actualNormal); + Assert.Equal(physicalSystem, actualSpaceless); + } + } + + /// + /// Generate a test set of PhysicalSystem values + /// + /// MemberData-compatible list of PhysicalSystem values + public static TheoryData GeneratePhysicalSystemTestData() + { + var testData = new TheoryData() { { null, true } }; + foreach (PhysicalSystem? physicalSystem in Enum.GetValues().Cast()) + { + // We want to skip all markers for this + if (physicalSystem.IsMarker()) + continue; + + testData.Add(physicalSystem, false); + } + + return testData; + } + + /// + /// Generate a test set of PhysicalSystem values that are considered Audio + /// + /// MemberData-compatible list of PhysicalSystem values + public static TheoryData GenerateAudioSystemsTestData() + { + var testData = new TheoryData() { { null, false } }; + foreach (PhysicalSystem physicalSystem in Enum.GetValues()) + { + if (_audioSystems.Contains(physicalSystem)) + testData.Add(physicalSystem, true); + else + testData.Add(physicalSystem, false); + } + + return testData; + } + + /// + /// Generate a test set of PhysicalSystem values that are available + /// + /// MemberData-compatible list of PhysicalSystem values + public static TheoryData GenerateAvailableSystemsTestData() + { + var testData = new TheoryData() { { null, false } }; + foreach (PhysicalSystem physicalSystem in Enum.GetValues()) + { + if (_availableSystems.Contains(physicalSystem)) + testData.Add(physicalSystem, true); + else + testData.Add(physicalSystem, false); + } + + return testData; + } + + /// + /// Generate a test set of PhysicalSystem values that are banned + /// + /// MemberData-compatible list of PhysicalSystem values + public static TheoryData GenerateBannedSystemsTestData() + { + var testData = new TheoryData() { { null, false } }; + foreach (PhysicalSystem physicalSystem in Enum.GetValues()) + { + if (_bannedSystems.Contains(physicalSystem)) + testData.Add(physicalSystem, true); + else + testData.Add(physicalSystem, false); + } + + return testData; + } + + /// + /// Generate a test set of PhysicalSystem values mapped to their categories + /// + /// MemberData-compatible list of PhysicalSystem values + public static TheoryData GenerateCategoriesSystemTestData() + { + var testData = new TheoryData() { { null, SystemCategory.NONE } }; + foreach (PhysicalSystem physicalSystem in Enum.GetValues()) + { + testData.Add(physicalSystem, _systemCategoryMap[physicalSystem]); + } + + return testData; + } + + /// + /// Generate a test set of PhysicalSystem values that have cuesheets + /// + /// MemberData-compatible list of PhysicalSystem values + public static TheoryData GenerateCuesheetSystemsTestData() + { + var testData = new TheoryData() { { null, false } }; + foreach (PhysicalSystem physicalSystem in Enum.GetValues()) + { + if (_systemsWithCues.Contains(physicalSystem)) + testData.Add(physicalSystem, true); + else + testData.Add(physicalSystem, false); + } + + return testData; + } + + /// + /// Generate a test set of PhysicalSystem values that have DATs + /// + /// MemberData-compatible list of PhysicalSystem values + public static TheoryData GenerateDatSystemsTestData() + { + var testData = new TheoryData() { { null, false } }; + foreach (PhysicalSystem physicalSystem in Enum.GetValues()) + { + if (_systemsWithDats.Contains(physicalSystem)) + testData.Add(physicalSystem, true); + else + testData.Add(physicalSystem, false); + } + + return testData; + } + + /// + /// Generate a test set of PhysicalSystem values that have decrypted keys + /// + /// MemberData-compatible list of PhysicalSystem values + public static TheoryData GenerateDKeySystemsTestData() + { + var testData = new TheoryData() { { null, false } }; + foreach (PhysicalSystem physicalSystem in Enum.GetValues()) + { + if (_systemsWithDKeys.Contains(physicalSystem)) + testData.Add(physicalSystem, true); + else + testData.Add(physicalSystem, false); + } + + return testData; + } + + /// + /// Generate a test set of PhysicalSystem values that have GDIs + /// + /// MemberData-compatible list of PhysicalSystem values + public static TheoryData GenerateGdiSystemsTestData() + { + var testData = new TheoryData() { { null, false } }; + foreach (PhysicalSystem physicalSystem in Enum.GetValues()) + { + if (_systemsWithGdis.Contains(physicalSystem)) + testData.Add(physicalSystem, true); + else + testData.Add(physicalSystem, false); + } + + return testData; + } + + /// + /// Generate a test set of PhysicalSystem values that have keys + /// + /// MemberData-compatible list of PhysicalSystem values + public static TheoryData GenerateKeySystemsTestData() + { + var testData = new TheoryData() { { null, false } }; + foreach (PhysicalSystem physicalSystem in Enum.GetValues()) + { + if (_systemsWithKeys.Contains(physicalSystem)) + testData.Add(physicalSystem, true); + else + testData.Add(physicalSystem, false); + } + + return testData; + } + + /// + /// Generate a test set of PhysicalSystem values that have LSDs + /// + /// MemberData-compatible list of PhysicalSystem values + public static TheoryData GenerateLsdSystemsTestData() + { + var testData = new TheoryData() { { null, false } }; + foreach (PhysicalSystem physicalSystem in Enum.GetValues()) + { + if (_systemsWithLsds.Contains(physicalSystem)) + testData.Add(physicalSystem, true); + else + testData.Add(physicalSystem, false); + } + + return testData; + } + + /// + /// Generate a test set of PhysicalSystem values that are considered markers + /// + /// MemberData-compatible list of PhysicalSystem values + public static TheoryData GenerateMarkerSystemsTestData() + { + var testData = new TheoryData() { { null, false } }; + foreach (PhysicalSystem physicalSystem in Enum.GetValues()) + { + if (_markerSystems.Contains(physicalSystem)) + testData.Add(physicalSystem, true); + else + testData.Add(physicalSystem, false); + } + + return testData; + } + + /// + /// Generate a test set of PhysicalSystem values that are considered markers + /// + /// MemberData-compatible list of PhysicalSystem values + public static TheoryData GenerateReversedRingcodeSystemsTestData() + { + var testData = new TheoryData() { { null, false } }; + foreach (PhysicalSystem physicalSystem in Enum.GetValues()) + { + if (_reverseRingcodeSystems.Contains(physicalSystem)) + testData.Add(physicalSystem, true); + else + testData.Add(physicalSystem, false); + } + + return testData; + } + + /// + /// Generate a test set of PhysicalSystem values that have SBIs + /// + /// MemberData-compatible list of PhysicalSystem values + public static TheoryData GenerateSbiSystemsTestData() + { + var testData = new TheoryData() { { null, false } }; + foreach (PhysicalSystem physicalSystem in Enum.GetValues()) + { + if (_systemsWithSbis.Contains(physicalSystem)) + testData.Add(physicalSystem, true); + else + testData.Add(physicalSystem, false); + } + + return testData; + } + + /// + /// Generate a test set of PhysicalSystem values that are detected by Windows + /// + /// MemberData-compatible list of PhysicalSystem values + public static TheoryData GenerateWindowsDetectedSystemsTestData() + { + var testData = new TheoryData() { { null, false } }; + foreach (PhysicalSystem physicalSystem in Enum.GetValues()) + { + if (_windowsDetectedSystems.Contains(physicalSystem)) + testData.Add(physicalSystem, true); + else + testData.Add(physicalSystem, false); + } + + return testData; + } + + /// + /// Generate a test set of PhysicalSystem values that are considered XGD + /// + /// MemberData-compatible list of PhysicalSystem values + public static TheoryData GenerateXGDSystemsTestData() + { + var testData = new TheoryData() { { null, false } }; + foreach (PhysicalSystem physicalSystem in Enum.GetValues()) + { + if (_xgdSystems.Contains(physicalSystem)) + testData.Add(physicalSystem, true); + else + testData.Add(physicalSystem, false); + } + + return testData; + } + + #endregion + #region Region /// @@ -388,6 +1673,5 @@ namespace SabreTools.RedumpLib.Test.Data } #endregion - } } diff --git a/SabreTools.RedumpLib.Test/RedumpInfo/ExtensionsTests.cs b/SabreTools.RedumpLib.Test/RedumpInfo/ExtensionsTests.cs index 326bec8..57adda1 100644 --- a/SabreTools.RedumpLib.Test/RedumpInfo/ExtensionsTests.cs +++ b/SabreTools.RedumpLib.Test/RedumpInfo/ExtensionsTests.cs @@ -52,18 +52,6 @@ namespace SabreTools.RedumpLib.Test.RedumpInfo PhysicalMediaType.UMD, ]; - /// - /// Check that every supported system has some set of MediaTypes supported - /// - /// RedumpSystem value to check - [Theory] - [MemberData(nameof(GenerateRedumpSystemMappingTestData))] - public void MediaTypesTest(RedumpSystem? redumpSystem) - { - var actual = redumpSystem.MediaTypes(); - Assert.NotEmpty(actual); - } - /// /// Check that both mappable and unmappable media types output correctly /// @@ -90,21 +78,6 @@ namespace SabreTools.RedumpLib.Test.RedumpInfo Assert.Equal(expectNull, actual is null); } - /// - /// Generate a test set of RedumpSystem values - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateRedumpSystemMappingTestData() - { - var testData = new TheoryData() { null }; - foreach (RedumpSystem? redumpSystem in Enum.GetValues().Cast()) - { - testData.Add(redumpSystem); - } - - return testData; - } - /// /// Generate a test set of MediaType values /// @@ -617,1204 +590,6 @@ namespace SabreTools.RedumpLib.Test.RedumpInfo #endregion - #region System - - /// - /// RedumpSystem values that are considered Audio - /// - private static readonly RedumpSystem?[] _audioSystems = - [ - RedumpSystem.AtariJaguarCDInteractiveMultimediaSystem, - RedumpSystem.AudioCD, - RedumpSystem.DVDAudio, - RedumpSystem.HasbroiONEducationalGamingSystem, - RedumpSystem.HasbroVideoNow, - RedumpSystem.HasbroVideoNowColor, - RedumpSystem.HasbroVideoNowJr, - RedumpSystem.HasbroVideoNowXP, - RedumpSystem.PlayStationGameSharkUpdates, - RedumpSystem.PhilipsCDi, - RedumpSystem.SuperAudioCD, - ]; - - /// - /// RedumpSystem values that are available - /// - private static readonly RedumpSystem?[] _availableSystems = - [ - // BIOS Sets - RedumpSystem.MicrosoftXboxBIOS, - RedumpSystem.NintendoGameCubeBIOS, - RedumpSystem.SonyPlayStationBIOS, - RedumpSystem.SonyPlayStation2BIOS, - - // Disc-Based Consoles - RedumpSystem.AtariJaguarCDInteractiveMultimediaSystem, - RedumpSystem.BandaiPlaydiaQuickInteractiveSystem, - RedumpSystem.BandaiPippin, - RedumpSystem.CommodoreAmigaCD32, - RedumpSystem.CommodoreAmigaCDTV, - RedumpSystem.HasbroVideoNow, - RedumpSystem.HasbroVideoNowColor, - RedumpSystem.HasbroVideoNowJr, - RedumpSystem.HasbroVideoNowXP, - RedumpSystem.MattelFisherPriceiXL, - RedumpSystem.MattelHyperScan, - RedumpSystem.MemorexVisualInformationSystem, - RedumpSystem.MicrosoftXbox, - RedumpSystem.MicrosoftXbox360, - RedumpSystem.MicrosoftXboxOne, - RedumpSystem.MicrosoftXboxSeriesXS, - RedumpSystem.NECPCEngineCDTurboGrafxCD, - RedumpSystem.NECPCFXPCFXGA, - RedumpSystem.NintendoGameCube, - RedumpSystem.NintendoWii, - RedumpSystem.NintendoWiiU, - RedumpSystem.Panasonic3DOInteractiveMultiplayer, - RedumpSystem.PhilipsCDi, - RedumpSystem.SegaDreamcast, - RedumpSystem.SegaMegaCDSegaCD, - RedumpSystem.SegaSaturn, - RedumpSystem.SNKNeoGeoCD, - RedumpSystem.SonyPlayStation, - RedumpSystem.SonyPlayStation2, - RedumpSystem.SonyPlayStation3, - RedumpSystem.SonyPlayStation4, - RedumpSystem.SonyPlayStation5, - RedumpSystem.SonyPlayStationPortable, - RedumpSystem.VMLabsNUON, - RedumpSystem.VTechVFlashVSmilePro, - RedumpSystem.ZAPiTGamesGameWaveFamilyEntertainmentSystem, - - // Computers - RedumpSystem.AcornArchimedes, - RedumpSystem.AppleMacintosh, - RedumpSystem.CommodoreAmigaCD, - RedumpSystem.FujitsuFMTownsseries, - RedumpSystem.IBMPCcompatible, - RedumpSystem.NECPC88series, - RedumpSystem.NECPC98series, - RedumpSystem.SharpX68000, - - // Arcade - RedumpSystem.funworldPhotoPlay, - RedumpSystem.IncredibleTechnologiesEagle, - RedumpSystem.KonamieAmusement, - RedumpSystem.KonamiFireBeat, - RedumpSystem.KonamiM2, - RedumpSystem.KonamiSystem573, - RedumpSystem.KonamiSystemGV, - RedumpSystem.KonamiTwinkle, - RedumpSystem.NamcoSegaNintendoTriforce, - RedumpSystem.NamcoSystem12, - RedumpSystem.NamcoSystem246256, - RedumpSystem.PanasonicM2, - RedumpSystem.SegaChihiro, - RedumpSystem.SegaLindbergh, - RedumpSystem.SegaNaomi, - RedumpSystem.SegaNaomi2, - RedumpSystem.SegaRingEdge, - RedumpSystem.SegaRingEdge2, - RedumpSystem.SegaTitanVideo, - RedumpSystem.TABAustriaQuizard, - - // Other - RedumpSystem.AudioCD, - RedumpSystem.BDVideo, - RedumpSystem.DVDVideo, - RedumpSystem.EnhancedCD, - RedumpSystem.HDDVDVideo, - RedumpSystem.NavisoftNaviken21, - RedumpSystem.PalmOS, - RedumpSystem.PhotoCD, - RedumpSystem.PlayStationGameSharkUpdates, - RedumpSystem.PocketPC, - RedumpSystem.SegaPrologue21MultimediaKaraokeSystem, - RedumpSystem.TaoiKTV, - RedumpSystem.TomyKissSite, - RedumpSystem.VideoCD, - ]; - - /// - /// RedumpSystem values that are dumper-only - /// - private static readonly RedumpSystem?[] _bannedSystems = - [ - // Disc-Based Consoles - RedumpSystem.HasbroVideoNow, - RedumpSystem.HasbroVideoNowColor, - RedumpSystem.HasbroVideoNowJr, - RedumpSystem.HasbroVideoNowXP, - RedumpSystem.MicrosoftXboxOne, - RedumpSystem.MicrosoftXboxSeriesXS, - RedumpSystem.NintendoWiiU, - RedumpSystem.SonyPlayStation4, - RedumpSystem.SonyPlayStation5, - - // Arcade - RedumpSystem.KonamiM2, - RedumpSystem.PanasonicM2, - - // Other - RedumpSystem.AudioCD, - RedumpSystem.BDVideo, - RedumpSystem.DVDVideo, - RedumpSystem.EnhancedCD, - RedumpSystem.HDDVDVideo, - RedumpSystem.NavisoftNaviken21, - RedumpSystem.VideoCD, - ]; - - /// - /// RedumpSystem values that are considered markers - /// - private static readonly RedumpSystem?[] _markerSystems = - [ - RedumpSystem.MarkerArcadeEnd, - RedumpSystem.MarkerComputerEnd, - RedumpSystem.MarkerDiscBasedConsoleEnd, - RedumpSystem.MarkerOtherEnd, - ]; - - /// - /// RedumpSystem values that are have reversed ringcodes - /// - private static readonly RedumpSystem?[] _reverseRingcodeSystems = - [ - RedumpSystem.SonyPlayStation2, - RedumpSystem.SonyPlayStation3, - RedumpSystem.SonyPlayStation4, - RedumpSystem.SonyPlayStation5, - RedumpSystem.SonyPlayStationPortable, - ]; - - /// - /// Map of RedumpSystem values to their corresponding categories - /// - private static readonly Dictionary _systemCategoryMap = new() - { - // BIOS - [RedumpSystem.MicrosoftXboxBIOS] = SystemCategory.NONE, - [RedumpSystem.NintendoGameCubeBIOS] = SystemCategory.NONE, - [RedumpSystem.SonyPlayStationBIOS] = SystemCategory.NONE, - [RedumpSystem.SonyPlayStation2BIOS] = SystemCategory.NONE, - - // Disc-Based Consoles - [RedumpSystem.AtariJaguarCDInteractiveMultimediaSystem] = SystemCategory.DiscBasedConsole, - [RedumpSystem.BandaiPlaydiaQuickInteractiveSystem] = SystemCategory.DiscBasedConsole, - [RedumpSystem.BandaiPippin] = SystemCategory.DiscBasedConsole, - [RedumpSystem.CommodoreAmigaCD32] = SystemCategory.DiscBasedConsole, - [RedumpSystem.CommodoreAmigaCDTV] = SystemCategory.DiscBasedConsole, - [RedumpSystem.EnvizionsEVOSmartConsole] = SystemCategory.DiscBasedConsole, - [RedumpSystem.FujitsuFMTownsMarty] = SystemCategory.DiscBasedConsole, - [RedumpSystem.HasbroiONEducationalGamingSystem] = SystemCategory.DiscBasedConsole, - [RedumpSystem.HasbroVideoNow] = SystemCategory.DiscBasedConsole, - [RedumpSystem.HasbroVideoNowColor] = SystemCategory.DiscBasedConsole, - [RedumpSystem.HasbroVideoNowJr] = SystemCategory.DiscBasedConsole, - [RedumpSystem.HasbroVideoNowXP] = SystemCategory.DiscBasedConsole, - [RedumpSystem.MattelFisherPriceiXL] = SystemCategory.DiscBasedConsole, - [RedumpSystem.MattelHyperScan] = SystemCategory.DiscBasedConsole, - [RedumpSystem.MemorexVisualInformationSystem] = SystemCategory.DiscBasedConsole, - [RedumpSystem.MicrosoftXbox] = SystemCategory.DiscBasedConsole, - [RedumpSystem.MicrosoftXbox360] = SystemCategory.DiscBasedConsole, - [RedumpSystem.MicrosoftXboxOne] = SystemCategory.DiscBasedConsole, - [RedumpSystem.MicrosoftXboxSeriesXS] = SystemCategory.DiscBasedConsole, - [RedumpSystem.NECPCEngineCDTurboGrafxCD] = SystemCategory.DiscBasedConsole, - [RedumpSystem.NECPCFXPCFXGA] = SystemCategory.DiscBasedConsole, - [RedumpSystem.NintendoGameCube] = SystemCategory.DiscBasedConsole, - [RedumpSystem.NintendoSonySuperNESCDROMSystem] = SystemCategory.DiscBasedConsole, - [RedumpSystem.NintendoWii] = SystemCategory.DiscBasedConsole, - [RedumpSystem.NintendoWiiU] = SystemCategory.DiscBasedConsole, - [RedumpSystem.Panasonic3DOInteractiveMultiplayer] = SystemCategory.DiscBasedConsole, - [RedumpSystem.PhilipsCDi] = SystemCategory.DiscBasedConsole, - [RedumpSystem.PlaymajiPolymega] = SystemCategory.DiscBasedConsole, - [RedumpSystem.PioneerLaserActive] = SystemCategory.DiscBasedConsole, - [RedumpSystem.SegaDreamcast] = SystemCategory.DiscBasedConsole, - [RedumpSystem.SegaMegaCDSegaCD] = SystemCategory.DiscBasedConsole, - [RedumpSystem.SegaSaturn] = SystemCategory.DiscBasedConsole, - [RedumpSystem.SNKNeoGeoCD] = SystemCategory.DiscBasedConsole, - [RedumpSystem.SonyPlayStation] = SystemCategory.DiscBasedConsole, - [RedumpSystem.SonyPlayStation2] = SystemCategory.DiscBasedConsole, - [RedumpSystem.SonyPlayStation3] = SystemCategory.DiscBasedConsole, - [RedumpSystem.SonyPlayStation4] = SystemCategory.DiscBasedConsole, - [RedumpSystem.SonyPlayStation5] = SystemCategory.DiscBasedConsole, - [RedumpSystem.SonyPlayStationPortable] = SystemCategory.DiscBasedConsole, - [RedumpSystem.VMLabsNUON] = SystemCategory.DiscBasedConsole, - [RedumpSystem.VTechVFlashVSmilePro] = SystemCategory.DiscBasedConsole, - [RedumpSystem.ZAPiTGamesGameWaveFamilyEntertainmentSystem] = SystemCategory.DiscBasedConsole, - [RedumpSystem.MarkerDiscBasedConsoleEnd] = SystemCategory.NONE, - - // Computers - [RedumpSystem.AcornArchimedes] = SystemCategory.Computer, - [RedumpSystem.AppleMacintosh] = SystemCategory.Computer, - [RedumpSystem.CommodoreAmigaCD] = SystemCategory.Computer, - [RedumpSystem.FujitsuFMTownsseries] = SystemCategory.Computer, - [RedumpSystem.IBMPCcompatible] = SystemCategory.Computer, - [RedumpSystem.NECPC88series] = SystemCategory.Computer, - [RedumpSystem.NECPC98series] = SystemCategory.Computer, - [RedumpSystem.SharpX68000] = SystemCategory.Computer, - [RedumpSystem.MarkerComputerEnd] = SystemCategory.NONE, - - // Arcade - [RedumpSystem.AmigaCUBOCD32] = SystemCategory.Arcade, - [RedumpSystem.AmericanLaserGames3DO] = SystemCategory.Arcade, - [RedumpSystem.Atari3DO] = SystemCategory.Arcade, - [RedumpSystem.Atronic] = SystemCategory.Arcade, - [RedumpSystem.AUSCOMSystem1] = SystemCategory.Arcade, - [RedumpSystem.BallyGameMagic] = SystemCategory.Arcade, - [RedumpSystem.CapcomCPSystemIII] = SystemCategory.Arcade, - [RedumpSystem.funworldPhotoPlay] = SystemCategory.Arcade, - [RedumpSystem.FuRyuOmronPurikura] = SystemCategory.Arcade, - [RedumpSystem.GlobalVRVarious] = SystemCategory.Arcade, - [RedumpSystem.GlobalVRVortek] = SystemCategory.Arcade, - [RedumpSystem.GlobalVRVortekV3] = SystemCategory.Arcade, - [RedumpSystem.ICEPCHardware] = SystemCategory.Arcade, - [RedumpSystem.IncredibleTechnologiesEagle] = SystemCategory.Arcade, - [RedumpSystem.IncredibleTechnologiesVarious] = SystemCategory.Arcade, - [RedumpSystem.JVLiTouch] = SystemCategory.Arcade, - [RedumpSystem.KonamieAmusement] = SystemCategory.Arcade, - [RedumpSystem.KonamiFireBeat] = SystemCategory.Arcade, - [RedumpSystem.KonamiM2] = SystemCategory.Arcade, - [RedumpSystem.KonamiPython] = SystemCategory.Arcade, - [RedumpSystem.KonamiPython2] = SystemCategory.Arcade, - [RedumpSystem.KonamiSystem573] = SystemCategory.Arcade, - [RedumpSystem.KonamiSystemGV] = SystemCategory.Arcade, - [RedumpSystem.KonamiTwinkle] = SystemCategory.Arcade, - [RedumpSystem.KonamiVarious] = SystemCategory.Arcade, - [RedumpSystem.MeritIndustriesBoardwalk] = SystemCategory.Arcade, - [RedumpSystem.MeritIndustriesMegaTouchForce] = SystemCategory.Arcade, - [RedumpSystem.MeritIndustriesMegaTouchION] = SystemCategory.Arcade, - [RedumpSystem.MeritIndustriesMegaTouchMaxx] = SystemCategory.Arcade, - [RedumpSystem.MeritIndustriesMegaTouchXL] = SystemCategory.Arcade, - [RedumpSystem.NamcoPurikura] = SystemCategory.Arcade, - [RedumpSystem.NamcoSegaNintendoTriforce] = SystemCategory.Arcade, - [RedumpSystem.NamcoSystem12] = SystemCategory.Arcade, - [RedumpSystem.NamcoSystem246256] = SystemCategory.Arcade, - [RedumpSystem.NewJatreCDi] = SystemCategory.Arcade, - [RedumpSystem.NichibutsuHighRateSystem] = SystemCategory.Arcade, - [RedumpSystem.NichibutsuSuperCD] = SystemCategory.Arcade, - [RedumpSystem.NichibutsuXRateSystem] = SystemCategory.Arcade, - [RedumpSystem.PanasonicM2] = SystemCategory.Arcade, - [RedumpSystem.PhotoPlayVarious] = SystemCategory.Arcade, - [RedumpSystem.RawThrillsVarious] = SystemCategory.Arcade, - [RedumpSystem.SegaALLS] = SystemCategory.Arcade, - [RedumpSystem.SegaChihiro] = SystemCategory.Arcade, - [RedumpSystem.SegaEuropaR] = SystemCategory.Arcade, - [RedumpSystem.SegaLindbergh] = SystemCategory.Arcade, - [RedumpSystem.SegaNaomi] = SystemCategory.Arcade, - [RedumpSystem.SegaNaomi2] = SystemCategory.Arcade, - [RedumpSystem.SegaNaomiSatelliteTerminalPC] = SystemCategory.Arcade, - [RedumpSystem.SegaNu] = SystemCategory.Arcade, - [RedumpSystem.SegaNu11] = SystemCategory.Arcade, - [RedumpSystem.SegaNu2] = SystemCategory.Arcade, - [RedumpSystem.SegaNuSX] = SystemCategory.Arcade, - [RedumpSystem.SegaRingEdge] = SystemCategory.Arcade, - [RedumpSystem.SegaRingEdge2] = SystemCategory.Arcade, - [RedumpSystem.SegaRingWide] = SystemCategory.Arcade, - [RedumpSystem.SegaSystem32] = SystemCategory.Arcade, - [RedumpSystem.SegaTitanVideo] = SystemCategory.Arcade, - [RedumpSystem.SeibuCATSSystem] = SystemCategory.Arcade, - [RedumpSystem.TABAustriaQuizard] = SystemCategory.Arcade, - [RedumpSystem.TsunamiTsuMoMultiGameMotionSystem] = SystemCategory.Arcade, - [RedumpSystem.UltraCade] = SystemCategory.Arcade, - [RedumpSystem.MarkerArcadeEnd] = SystemCategory.NONE, - - // Other - [RedumpSystem.AudioCD] = SystemCategory.Other, - [RedumpSystem.BDVideo] = SystemCategory.Other, - [RedumpSystem.DVDAudio] = SystemCategory.Other, - [RedumpSystem.DVDVideo] = SystemCategory.Other, - [RedumpSystem.EnhancedCD] = SystemCategory.Other, - [RedumpSystem.HDDVDVideo] = SystemCategory.Other, - [RedumpSystem.NavisoftNaviken21] = SystemCategory.Other, - [RedumpSystem.PalmOS] = SystemCategory.Other, - [RedumpSystem.PhotoCD] = SystemCategory.Other, - [RedumpSystem.PlayStationGameSharkUpdates] = SystemCategory.Other, - [RedumpSystem.PocketPC] = SystemCategory.Other, - [RedumpSystem.Psion] = SystemCategory.Other, - [RedumpSystem.RainbowDisc] = SystemCategory.Other, - [RedumpSystem.SegaPrologue21MultimediaKaraokeSystem] = SystemCategory.Other, - [RedumpSystem.SharpZaurus] = SystemCategory.Other, - [RedumpSystem.SonyElectronicBook] = SystemCategory.Other, - [RedumpSystem.SuperAudioCD] = SystemCategory.Other, - [RedumpSystem.TaoiKTV] = SystemCategory.Other, - [RedumpSystem.TomyKissSite] = SystemCategory.Other, - [RedumpSystem.VideoCD] = SystemCategory.Other, - [RedumpSystem.MarkerOtherEnd] = SystemCategory.NONE, - }; - - /// - /// RedumpSystem values that have cuesheet packs - /// - private static readonly RedumpSystem?[] _systemsWithCues = - [ - // Disc-Based Consoles - RedumpSystem.AtariJaguarCDInteractiveMultimediaSystem, - RedumpSystem.BandaiPlaydiaQuickInteractiveSystem, - RedumpSystem.BandaiPippin, - RedumpSystem.CommodoreAmigaCD32, - RedumpSystem.CommodoreAmigaCDTV, - RedumpSystem.HasbroVideoNow, - RedumpSystem.HasbroVideoNowColor, - RedumpSystem.HasbroVideoNowJr, - RedumpSystem.HasbroVideoNowXP, - RedumpSystem.MattelFisherPriceiXL, - RedumpSystem.MattelHyperScan, - RedumpSystem.MemorexVisualInformationSystem, - RedumpSystem.MicrosoftXbox, - RedumpSystem.MicrosoftXbox360, - RedumpSystem.NECPCEngineCDTurboGrafxCD, - RedumpSystem.NECPCFXPCFXGA, - RedumpSystem.Panasonic3DOInteractiveMultiplayer, - RedumpSystem.PhilipsCDi, - RedumpSystem.SegaDreamcast, - RedumpSystem.SegaMegaCDSegaCD, - RedumpSystem.SegaSaturn, - RedumpSystem.SNKNeoGeoCD, - RedumpSystem.SonyPlayStation, - RedumpSystem.SonyPlayStation2, - RedumpSystem.SonyPlayStation3, - RedumpSystem.VTechVFlashVSmilePro, - - // Computers - RedumpSystem.AcornArchimedes, - RedumpSystem.AppleMacintosh, - RedumpSystem.CommodoreAmigaCD, - RedumpSystem.FujitsuFMTownsseries, - RedumpSystem.IBMPCcompatible, - RedumpSystem.NECPC88series, - RedumpSystem.NECPC98series, - RedumpSystem.SharpX68000, - - // Arcade - RedumpSystem.funworldPhotoPlay, - RedumpSystem.IncredibleTechnologiesEagle, - RedumpSystem.KonamieAmusement, - RedumpSystem.KonamiFireBeat, - RedumpSystem.KonamiM2, - RedumpSystem.KonamiSystem573, - RedumpSystem.KonamiSystemGV, - RedumpSystem.NamcoSegaNintendoTriforce, - RedumpSystem.NamcoSystem246256, - RedumpSystem.PanasonicM2, - RedumpSystem.SegaChihiro, - RedumpSystem.SegaNaomi, - RedumpSystem.SegaNaomi2, - RedumpSystem.TABAustriaQuizard, - - // Other - RedumpSystem.AudioCD, - RedumpSystem.NavisoftNaviken21, - RedumpSystem.PalmOS, - RedumpSystem.PhotoCD, - RedumpSystem.PlayStationGameSharkUpdates, - RedumpSystem.PocketPC, - RedumpSystem.SegaPrologue21MultimediaKaraokeSystem, - RedumpSystem.TomyKissSite, - RedumpSystem.VideoCD, - ]; - - /// - /// RedumpSystem values that have dats - /// - private static readonly RedumpSystem?[] _systemsWithDats = - [ - // BIOS Sets - RedumpSystem.MicrosoftXboxBIOS, - RedumpSystem.NintendoGameCubeBIOS, - RedumpSystem.SonyPlayStationBIOS, - RedumpSystem.SonyPlayStation2BIOS, - - // Disc-Based Consoles - RedumpSystem.AtariJaguarCDInteractiveMultimediaSystem, - RedumpSystem.BandaiPlaydiaQuickInteractiveSystem, - RedumpSystem.BandaiPippin, - RedumpSystem.CommodoreAmigaCD32, - RedumpSystem.CommodoreAmigaCDTV, - RedumpSystem.HasbroVideoNow, - RedumpSystem.HasbroVideoNowColor, - RedumpSystem.HasbroVideoNowJr, - RedumpSystem.HasbroVideoNowXP, - RedumpSystem.MattelFisherPriceiXL, - RedumpSystem.MattelHyperScan, - RedumpSystem.MemorexVisualInformationSystem, - RedumpSystem.MicrosoftXbox, - RedumpSystem.MicrosoftXbox360, - RedumpSystem.MicrosoftXboxOne, - RedumpSystem.MicrosoftXboxSeriesXS, - RedumpSystem.NECPCEngineCDTurboGrafxCD, - RedumpSystem.NECPCFXPCFXGA, - RedumpSystem.NintendoGameCube, - RedumpSystem.NintendoWii, - RedumpSystem.NintendoWiiU, - RedumpSystem.Panasonic3DOInteractiveMultiplayer, - RedumpSystem.PhilipsCDi, - RedumpSystem.SegaDreamcast, - RedumpSystem.SegaMegaCDSegaCD, - RedumpSystem.SegaSaturn, - RedumpSystem.SNKNeoGeoCD, - RedumpSystem.SonyPlayStation, - RedumpSystem.SonyPlayStation2, - RedumpSystem.SonyPlayStation3, - RedumpSystem.SonyPlayStation4, - RedumpSystem.SonyPlayStation5, - RedumpSystem.SonyPlayStationPortable, - RedumpSystem.VMLabsNUON, - RedumpSystem.VTechVFlashVSmilePro, - RedumpSystem.ZAPiTGamesGameWaveFamilyEntertainmentSystem, - - // Computers - RedumpSystem.AcornArchimedes, - RedumpSystem.AppleMacintosh, - RedumpSystem.CommodoreAmigaCD, - RedumpSystem.FujitsuFMTownsseries, - RedumpSystem.IBMPCcompatible, - RedumpSystem.NECPC88series, - RedumpSystem.NECPC98series, - RedumpSystem.SharpX68000, - - // Arcade - RedumpSystem.funworldPhotoPlay, - RedumpSystem.IncredibleTechnologiesEagle, - RedumpSystem.KonamieAmusement, - RedumpSystem.KonamiFireBeat, - RedumpSystem.KonamiM2, - RedumpSystem.KonamiSystem573, - RedumpSystem.KonamiSystemGV, - RedumpSystem.NamcoSegaNintendoTriforce, - RedumpSystem.NamcoSystem246256, - RedumpSystem.PanasonicM2, - RedumpSystem.SegaChihiro, - RedumpSystem.SegaLindbergh, - RedumpSystem.SegaNaomi, - RedumpSystem.SegaNaomi2, - RedumpSystem.SegaRingEdge, - RedumpSystem.SegaRingEdge2, - RedumpSystem.TABAustriaQuizard, - - // Other - RedumpSystem.AudioCD, - RedumpSystem.BDVideo, - RedumpSystem.DVDVideo, - RedumpSystem.HDDVDVideo, - RedumpSystem.NavisoftNaviken21, - RedumpSystem.PalmOS, - RedumpSystem.PhotoCD, - RedumpSystem.PlayStationGameSharkUpdates, - RedumpSystem.PocketPC, - RedumpSystem.SegaPrologue21MultimediaKaraokeSystem, - RedumpSystem.TomyKissSite, - RedumpSystem.VideoCD, - ]; - - /// - /// RedumpSystem values that have decrypted keys - /// - private static readonly RedumpSystem?[] _systemsWithDKeys = - [ - RedumpSystem.SonyPlayStation3, - ]; - - /// - /// RedumpSystem values that have GDI packs - /// - private static readonly RedumpSystem?[] _systemsWithGdis = - [ - // Disc-Based Consoles - RedumpSystem.SegaDreamcast, - - // Arcade - RedumpSystem.NamcoSegaNintendoTriforce, - RedumpSystem.SegaChihiro, - RedumpSystem.SegaNaomi, - RedumpSystem.SegaNaomi2, - ]; - - /// - /// RedumpSystem values that have keys - /// - private static readonly RedumpSystem?[] _systemsWithKeys = - [ - RedumpSystem.NintendoWiiU, - RedumpSystem.SonyPlayStation3, - ]; - - /// - /// RedumpSystem values that have LSD packs - /// - private static readonly RedumpSystem?[] _systemsWithLsds = - [ - // Disc-Based Consoles - RedumpSystem.SonyPlayStation, - - // Computers - RedumpSystem.AppleMacintosh, - RedumpSystem.IBMPCcompatible, - ]; - - /// - /// RedumpSystem values that have SBI packs - /// - private static readonly RedumpSystem?[] _systemsWithSbis = - [ - // Disc-Based Consoles - RedumpSystem.SonyPlayStation, - - // Computers - RedumpSystem.AppleMacintosh, - RedumpSystem.IBMPCcompatible, - ]; - - /// - /// RedumpSystem values that are considered detected by Windows - /// - private static readonly RedumpSystem?[] _windowsDetectedSystems = - [ - // Disc-Based Consoles - RedumpSystem.CommodoreAmigaCD32, - RedumpSystem.CommodoreAmigaCDTV, - RedumpSystem.EnvizionsEVOSmartConsole, - RedumpSystem.FujitsuFMTownsMarty, - RedumpSystem.HasbroiONEducationalGamingSystem, - RedumpSystem.MattelFisherPriceiXL, - RedumpSystem.MattelHyperScan, - RedumpSystem.MemorexVisualInformationSystem, - RedumpSystem.MicrosoftXbox, - RedumpSystem.MicrosoftXbox360, - RedumpSystem.MicrosoftXboxOne, - RedumpSystem.MicrosoftXboxSeriesXS, - RedumpSystem.NECPCEngineCDTurboGrafxCD, - RedumpSystem.NECPCFXPCFXGA, - RedumpSystem.NintendoSonySuperNESCDROMSystem, - RedumpSystem.PlaymajiPolymega, - RedumpSystem.SegaDreamcast, - RedumpSystem.SegaMegaCDSegaCD, - RedumpSystem.SegaSaturn, - RedumpSystem.SNKNeoGeoCD, - RedumpSystem.SonyPlayStation, - RedumpSystem.SonyPlayStation2, - RedumpSystem.SonyPlayStation3, - RedumpSystem.SonyPlayStation4, - RedumpSystem.SonyPlayStation5, - RedumpSystem.SonyPlayStationPortable, - RedumpSystem.VMLabsNUON, - RedumpSystem.VTechVFlashVSmilePro, - RedumpSystem.ZAPiTGamesGameWaveFamilyEntertainmentSystem, - - // Computers - RedumpSystem.AcornArchimedes, - RedumpSystem.CommodoreAmigaCD, - RedumpSystem.FujitsuFMTownsseries, - RedumpSystem.IBMPCcompatible, - RedumpSystem.NECPC88series, - RedumpSystem.NECPC98series, - RedumpSystem.SharpX68000, - - // Arcade - RedumpSystem.AmigaCUBOCD32, - RedumpSystem.Atronic, - RedumpSystem.AUSCOMSystem1, - RedumpSystem.BallyGameMagic, - RedumpSystem.CapcomCPSystemIII, - RedumpSystem.funworldPhotoPlay, - RedumpSystem.FuRyuOmronPurikura, - RedumpSystem.GlobalVRVarious, - RedumpSystem.GlobalVRVortek, - RedumpSystem.GlobalVRVortekV3, - RedumpSystem.ICEPCHardware, - RedumpSystem.IncredibleTechnologiesEagle, - RedumpSystem.IncredibleTechnologiesVarious, - RedumpSystem.JVLiTouch, - RedumpSystem.KonamieAmusement, - RedumpSystem.KonamiFireBeat, - RedumpSystem.KonamiM2, - RedumpSystem.KonamiPython, - RedumpSystem.KonamiPython2, - RedumpSystem.KonamiSystem573, - RedumpSystem.KonamiSystemGV, - RedumpSystem.KonamiTwinkle, - RedumpSystem.KonamiVarious, - RedumpSystem.MeritIndustriesBoardwalk, - RedumpSystem.MeritIndustriesMegaTouchForce, - RedumpSystem.MeritIndustriesMegaTouchION, - RedumpSystem.MeritIndustriesMegaTouchMaxx, - RedumpSystem.MeritIndustriesMegaTouchXL, - RedumpSystem.NamcoPurikura, - RedumpSystem.NamcoSegaNintendoTriforce, - RedumpSystem.NamcoSystem12, - RedumpSystem.NamcoSystem246256, - RedumpSystem.NichibutsuHighRateSystem, - RedumpSystem.NichibutsuSuperCD, - RedumpSystem.NichibutsuXRateSystem, - RedumpSystem.PhotoPlayVarious, - RedumpSystem.RawThrillsVarious, - RedumpSystem.SegaALLS, - RedumpSystem.SegaChihiro, - RedumpSystem.SegaEuropaR, - RedumpSystem.SegaLindbergh, - RedumpSystem.SegaNaomi, - RedumpSystem.SegaNaomi2, - RedumpSystem.SegaNaomiSatelliteTerminalPC, - RedumpSystem.SegaNu, - RedumpSystem.SegaNu11, - RedumpSystem.SegaNu2, - RedumpSystem.SegaNuSX, - RedumpSystem.SegaRingEdge, - RedumpSystem.SegaRingEdge2, - RedumpSystem.SegaRingWide, - RedumpSystem.SegaSystem32, - RedumpSystem.SegaTitanVideo, - RedumpSystem.SeibuCATSSystem, - RedumpSystem.TABAustriaQuizard, - RedumpSystem.TsunamiTsuMoMultiGameMotionSystem, - RedumpSystem.UltraCade, - - // Other - RedumpSystem.AudioCD, - RedumpSystem.BDVideo, - RedumpSystem.DVDAudio, - RedumpSystem.DVDVideo, - RedumpSystem.EnhancedCD, - RedumpSystem.HDDVDVideo, - RedumpSystem.NavisoftNaviken21, - RedumpSystem.PalmOS, - RedumpSystem.PhotoCD, - RedumpSystem.PocketPC, - RedumpSystem.Psion, - RedumpSystem.RainbowDisc, - RedumpSystem.SharpZaurus, - RedumpSystem.SegaPrologue21MultimediaKaraokeSystem, - RedumpSystem.SonyElectronicBook, - RedumpSystem.TaoiKTV, - RedumpSystem.TomyKissSite, - RedumpSystem.VideoCD, - ]; - - /// - /// RedumpSystem values that are considered XGD - /// - private static readonly RedumpSystem?[] _xgdSystems = - [ - RedumpSystem.MicrosoftXbox, - RedumpSystem.MicrosoftXbox360, - RedumpSystem.MicrosoftXboxOne, - RedumpSystem.MicrosoftXboxSeriesXS, - ]; - - /// - /// Check that all systems detected by Windows are marked properly - /// - /// RedumpSystem value to check - /// The expected value to come from the check - [Theory] - [MemberData(nameof(GenerateWindowsDetectedSystemsTestData))] - public void RedumpSystem_DetectedByWindows(RedumpSystem? redumpSystem, bool expected) - { - bool actual = redumpSystem.DetectedByWindows(); - Assert.Equal(expected, actual); - } - - /// - /// Check that all systems with reversed ringcodes are marked properly - /// - /// RedumpSystem value to check - /// The expected value to come from the check - [Theory] - [MemberData(nameof(GenerateReversedRingcodeSystemsTestData))] - public void RedumpSystem_HasReversedRingcodes(RedumpSystem? redumpSystem, bool expected) - { - bool actual = redumpSystem.HasReversedRingcodes(); - Assert.Equal(expected, actual); - } - - /// - /// Check that all audio systems are marked properly - /// - /// RedumpSystem value to check - /// The expected value to come from the check - [Theory] - [MemberData(nameof(GenerateAudioSystemsTestData))] - public void RedumpSystem_IsAudio(RedumpSystem? redumpSystem, bool expected) - { - bool actual = redumpSystem.IsAudio(); - Assert.Equal(expected, actual); - } - - /// - /// Check that all marker systems are marked properly - /// - /// RedumpSystem value to check - /// The expected value to come from the check - [Theory] - [MemberData(nameof(GenerateMarkerSystemsTestData))] - public void RedumpSystem_IsMarker(RedumpSystem? redumpSystem, bool expected) - { - bool actual = redumpSystem.IsMarker(); - Assert.Equal(expected, actual); - } - - /// - /// Check that all XGD systems are marked properly - /// - /// RedumpSystem value to check - /// The expected value to come from the check - [Theory] - [MemberData(nameof(GenerateXGDSystemsTestData))] - public void RedumpSystem_IsXGD(RedumpSystem? redumpSystem, bool expected) - { - bool actual = redumpSystem.IsXGD(); - Assert.Equal(expected, actual); - } - - [Fact] - public void RedumpSystem_ListRedumpSystem() - { - var actual = RedumpLib.RedumpInfo.Data.Extensions.ListSystems(); - Assert.NotEmpty(actual); - } - - /// - /// Check that every RedumpSystem has a long name provided - /// - /// RedumpSystem value to check - /// True to expect a null value, false otherwise - [Theory] - [MemberData(nameof(GenerateRedumpSystemTestData))] - public void RedumpSystem_LongName(RedumpSystem? redumpSystem, bool expectNull) - { - var actual = redumpSystem.LongName(); - - if (expectNull) - Assert.Null(actual); - else - Assert.NotNull(actual); - } - - // TODO: Re-enable the following test once non-Redump systems are accounted for - - /// - /// Check that every RedumpSystem has a short name provided - /// - /// RedumpSystem value to check - /// True to expect a null value, false otherwise - // [Theory] - // [MemberData(nameof(GenerateRedumpSystemTestData))] - // public void RedumpSystem_ShortName(RedumpSystem? redumpSystem, bool expectNull) - // { - // string? actual = redumpSystem.ShortName(); - - // if (expectNull) - // Assert.Null(actual); - // else - // Assert.NotNull(actual); - // } - - /// - /// Check that all systems are mapped to a category - /// - /// RedumpSystem value to check - /// The expected value to come from the check - [Theory] - [MemberData(nameof(GenerateCategoriesSystemTestData))] - public void RedumpSystem_GetCategory(RedumpSystem? redumpSystem, SystemCategory expected) - { - SystemCategory actual = redumpSystem.GetCategory(); - Assert.Equal(expected, actual); - } - - /// - /// Check that all available systems are marked properly - /// - /// RedumpSystem value to check - /// The expected value to come from the check - [Theory] - [MemberData(nameof(GenerateAvailableSystemsTestData))] - public void RedumpSystem_IsAvailable(RedumpSystem? redumpSystem, bool expected) - { - bool actual = redumpSystem.IsAvailable(); - Assert.Equal(expected, actual); - } - - /// - /// Check that all banned systems are marked properly - /// - /// RedumpSystem value to check - /// The expected value to come from the check - [Theory] - [MemberData(nameof(GenerateBannedSystemsTestData))] - public void RedumpSystem_IsBanned(RedumpSystem? redumpSystem, bool expected) - { - bool actual = redumpSystem.IsBanned(); - Assert.Equal(expected, actual); - } - - /// - /// Check that all systems with cuesheets are marked properly - /// - /// RedumpSystem value to check - /// The expected value to come from the check - [Theory] - [MemberData(nameof(GenerateCuesheetSystemsTestData))] - public void RedumpSystem_HasCues(RedumpSystem? redumpSystem, bool expected) - { - bool actual = redumpSystem.HasCues(); - Assert.Equal(expected, actual); - } - - /// - /// Check that all systems with DATs are marked properly - /// - /// RedumpSystem value to check - /// The expected value to come from the check - [Theory] - [MemberData(nameof(GenerateDatSystemsTestData))] - public void RedumpSystem_HasDat(RedumpSystem? redumpSystem, bool expected) - { - bool actual = redumpSystem.HasDat(); - Assert.Equal(expected, actual); - } - - /// - /// Check that all systems with keys are marked properly - /// - /// RedumpSystem value to check - /// The expected value to come from the check - [Theory] - [MemberData(nameof(GenerateKeySystemsTestData))] - public void RedumpSystem_HasKeys(RedumpSystem? redumpSystem, bool expected) - { - bool actual = redumpSystem.HasKeys(); - Assert.Equal(expected, actual); - } - - /// - /// Check that all systems with SBIs are marked properly - /// - /// RedumpSystem value to check - /// The expected value to come from the check - [Theory] - [MemberData(nameof(GenerateSbiSystemsTestData))] - public void RedumpSystem_HasSbi(RedumpSystem? redumpSystem, bool expected) - { - bool actual = redumpSystem.HasSbi(); - Assert.Equal(expected, actual); - } - - /// - /// Check that every RedumpSystem can be mapped from a string - /// - /// RedumpSystem value to check - /// True to expect a null value, false otherwise - [Theory] - [MemberData(nameof(GenerateRedumpSystemTestData))] - public void RedumpSystem_ToRedumpSystem(RedumpSystem? redumpSystem, bool expectNull) - { - string? longName = redumpSystem.LongName(); - string? longNameSpaceless = longName?.Replace(" ", string.Empty); - - var actualNormal = longName.ToRedumpSystem(); - var actualSpaceless = longNameSpaceless.ToRedumpSystem(); - - if (expectNull) - { - Assert.Null(actualNormal); - Assert.Null(actualSpaceless); - } - else - { - Assert.Equal(redumpSystem, actualNormal); - Assert.Equal(redumpSystem, actualSpaceless); - } - } - - /// - /// Generate a test set of RedumpSystem values - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateRedumpSystemTestData() - { - var testData = new TheoryData() { { null, true } }; - foreach (RedumpSystem? redumpSystem in Enum.GetValues().Cast()) - { - // We want to skip all markers for this - if (redumpSystem.IsMarker()) - continue; - - testData.Add(redumpSystem, false); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values that are considered Audio - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateAudioSystemsTestData() - { - var testData = new TheoryData() { { null, false } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - if (_audioSystems.Contains(redumpSystem)) - testData.Add(redumpSystem, true); - else - testData.Add(redumpSystem, false); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values that are available - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateAvailableSystemsTestData() - { - var testData = new TheoryData() { { null, false } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - if (_availableSystems.Contains(redumpSystem)) - testData.Add(redumpSystem, true); - else - testData.Add(redumpSystem, false); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values that are banned - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateBannedSystemsTestData() - { - var testData = new TheoryData() { { null, false } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - if (_bannedSystems.Contains(redumpSystem)) - testData.Add(redumpSystem, true); - else - testData.Add(redumpSystem, false); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values mapped to their categories - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateCategoriesSystemTestData() - { - var testData = new TheoryData() { { null, SystemCategory.NONE } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - testData.Add(redumpSystem, _systemCategoryMap[redumpSystem]); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values that have cuesheets - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateCuesheetSystemsTestData() - { - var testData = new TheoryData() { { null, false } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - if (_systemsWithCues.Contains(redumpSystem)) - testData.Add(redumpSystem, true); - else - testData.Add(redumpSystem, false); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values that have DATs - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateDatSystemsTestData() - { - var testData = new TheoryData() { { null, false } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - if (_systemsWithDats.Contains(redumpSystem)) - testData.Add(redumpSystem, true); - else - testData.Add(redumpSystem, false); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values that have decrypted keys - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateDKeySystemsTestData() - { - var testData = new TheoryData() { { null, false } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - if (_systemsWithDKeys.Contains(redumpSystem)) - testData.Add(redumpSystem, true); - else - testData.Add(redumpSystem, false); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values that have GDIs - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateGdiSystemsTestData() - { - var testData = new TheoryData() { { null, false } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - if (_systemsWithGdis.Contains(redumpSystem)) - testData.Add(redumpSystem, true); - else - testData.Add(redumpSystem, false); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values that have keys - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateKeySystemsTestData() - { - var testData = new TheoryData() { { null, false } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - if (_systemsWithKeys.Contains(redumpSystem)) - testData.Add(redumpSystem, true); - else - testData.Add(redumpSystem, false); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values that have LSDs - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateLsdSystemsTestData() - { - var testData = new TheoryData() { { null, false } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - if (_systemsWithLsds.Contains(redumpSystem)) - testData.Add(redumpSystem, true); - else - testData.Add(redumpSystem, false); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values that are considered markers - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateMarkerSystemsTestData() - { - var testData = new TheoryData() { { null, false } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - if (_markerSystems.Contains(redumpSystem)) - testData.Add(redumpSystem, true); - else - testData.Add(redumpSystem, false); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values that are considered markers - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateReversedRingcodeSystemsTestData() - { - var testData = new TheoryData() { { null, false } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - if (_reverseRingcodeSystems.Contains(redumpSystem)) - testData.Add(redumpSystem, true); - else - testData.Add(redumpSystem, false); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values that have SBIs - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateSbiSystemsTestData() - { - var testData = new TheoryData() { { null, false } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - if (_systemsWithSbis.Contains(redumpSystem)) - testData.Add(redumpSystem, true); - else - testData.Add(redumpSystem, false); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values that are detected by Windows - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateWindowsDetectedSystemsTestData() - { - var testData = new TheoryData() { { null, false } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - if (_windowsDetectedSystems.Contains(redumpSystem)) - testData.Add(redumpSystem, true); - else - testData.Add(redumpSystem, false); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values that are considered XGD - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateXGDSystemsTestData() - { - var testData = new TheoryData() { { null, false } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - if (_xgdSystems.Contains(redumpSystem)) - testData.Add(redumpSystem, true); - else - testData.Add(redumpSystem, false); - } - - return testData; - } - - #endregion - #region System Category /// diff --git a/SabreTools.RedumpLib.Test/RedumpInfo/UrlBuilderTests.cs b/SabreTools.RedumpLib.Test/RedumpInfo/UrlBuilderTests.cs index a696ccc..8d60070 100644 --- a/SabreTools.RedumpLib.Test/RedumpInfo/UrlBuilderTests.cs +++ b/SabreTools.RedumpLib.Test/RedumpInfo/UrlBuilderTests.cs @@ -1,4 +1,5 @@ using System; +using SabreTools.RedumpLib.Data; using SabreTools.RedumpLib.RedumpInfo; using SabreTools.RedumpLib.RedumpInfo.Data; using Xunit; @@ -89,20 +90,20 @@ namespace SabreTools.RedumpLib.Test.RedumpInfo [InlineData(PackType.Sbis, "https://redump.info/sbi/ARCH/")] public void BuildPackUrl_ValidPackType_ValidSystem_Builds(PackType packType, string expected) { - string actual = UrlBuilder.BuildPackUrl(packType, RedumpSystem.AcornArchimedes); + string actual = UrlBuilder.BuildPackUrl(packType, PhysicalSystem.AcornArchimedes); Assert.Equal(expected, actual); } [Fact] public void BuildPackUrl_InvalidPackType_Throws() { - Assert.Throws(() => UrlBuilder.BuildPackUrl((PackType)int.MaxValue, RedumpSystem.AcornArchimedes)); + Assert.Throws(() => UrlBuilder.BuildPackUrl((PackType)int.MaxValue, PhysicalSystem.AcornArchimedes)); } [Fact] public void BuildPackUrl_InvalidSystem_Builds() { - string actual = UrlBuilder.BuildPackUrl(PackType.Datfile, RedumpSystem.MarkerOtherEnd); + string actual = UrlBuilder.BuildPackUrl(PackType.Datfile, PhysicalSystem.MarkerOtherEnd); Assert.Equal("https://redump.info/datfile//", actual); } diff --git a/SabreTools.RedumpLib.Test/RedumpOrg/ExtensionsTests.cs b/SabreTools.RedumpLib.Test/RedumpOrg/ExtensionsTests.cs index 99917d1..39615cd 100644 --- a/SabreTools.RedumpLib.Test/RedumpOrg/ExtensionsTests.cs +++ b/SabreTools.RedumpLib.Test/RedumpOrg/ExtensionsTests.cs @@ -53,18 +53,6 @@ namespace SabreTools.RedumpLib.Test.RedumpOrg PhysicalMediaType.UMD, ]; - /// - /// Check that every supported system has some set of MediaTypes supported - /// - /// RedumpSystem value to check - [Theory] - [MemberData(nameof(GenerateRedumpSystemMappingTestData))] - public void MediaTypesTest(RedumpSystem? redumpSystem) - { - var actual = redumpSystem.MediaTypes(); - Assert.NotEmpty(actual); - } - /// /// Check that both mappable and unmappable media types output correctly /// @@ -109,21 +97,6 @@ namespace SabreTools.RedumpLib.Test.RedumpOrg return testData; } - /// - /// Generate a test set of RedumpSystem values - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateRedumpSystemMappingTestData() - { - var testData = new TheoryData() { null }; - foreach (RedumpSystem? redumpSystem in Enum.GetValues().Cast()) - { - testData.Add(redumpSystem); - } - - return testData; - } - /// /// Generate a test set of mappable media types /// @@ -1193,1243 +1166,6 @@ namespace SabreTools.RedumpLib.Test.RedumpOrg #endregion - #region System - - /// - /// RedumpSystem values that are considered Audio - /// - private static readonly RedumpSystem?[] _audioSystems = - [ - RedumpSystem.AtariJaguarCDInteractiveMultimediaSystem, - RedumpSystem.AudioCD, - RedumpSystem.DVDAudio, - RedumpSystem.HasbroiONEducationalGamingSystem, - RedumpSystem.HasbroVideoNow, - RedumpSystem.HasbroVideoNowColor, - RedumpSystem.HasbroVideoNowJr, - RedumpSystem.HasbroVideoNowXP, - RedumpSystem.PlayStationGameSharkUpdates, - RedumpSystem.PhilipsCDi, - RedumpSystem.SuperAudioCD, - ]; - - /// - /// RedumpSystem values that are available - /// - private static readonly RedumpSystem?[] _availableSystems = - [ - // BIOS Sets - RedumpSystem.MicrosoftXboxBIOS, - RedumpSystem.NintendoGameCubeBIOS, - RedumpSystem.SonyPlayStationBIOS, - RedumpSystem.SonyPlayStation2BIOS, - - // Disc-Based Consoles - RedumpSystem.AtariJaguarCDInteractiveMultimediaSystem, - RedumpSystem.BandaiPlaydiaQuickInteractiveSystem, - RedumpSystem.BandaiPippin, - RedumpSystem.CommodoreAmigaCD32, - RedumpSystem.CommodoreAmigaCDTV, - RedumpSystem.HasbroVideoNow, - RedumpSystem.HasbroVideoNowColor, - RedumpSystem.HasbroVideoNowJr, - RedumpSystem.HasbroVideoNowXP, - RedumpSystem.MattelFisherPriceiXL, - RedumpSystem.MattelHyperScan, - RedumpSystem.MemorexVisualInformationSystem, - RedumpSystem.MicrosoftXbox, - RedumpSystem.MicrosoftXbox360, - RedumpSystem.MicrosoftXboxOne, - RedumpSystem.MicrosoftXboxSeriesXS, - RedumpSystem.NECPCEngineCDTurboGrafxCD, - RedumpSystem.NECPCFXPCFXGA, - RedumpSystem.NintendoGameCube, - RedumpSystem.NintendoWii, - RedumpSystem.NintendoWiiU, - RedumpSystem.Panasonic3DOInteractiveMultiplayer, - RedumpSystem.PhilipsCDi, - RedumpSystem.SegaDreamcast, - RedumpSystem.SegaMegaCDSegaCD, - RedumpSystem.SegaSaturn, - RedumpSystem.SNKNeoGeoCD, - RedumpSystem.SonyPlayStation, - RedumpSystem.SonyPlayStation2, - RedumpSystem.SonyPlayStation3, - RedumpSystem.SonyPlayStation4, - RedumpSystem.SonyPlayStation5, - RedumpSystem.SonyPlayStationPortable, - RedumpSystem.VMLabsNUON, - RedumpSystem.VTechVFlashVSmilePro, - RedumpSystem.ZAPiTGamesGameWaveFamilyEntertainmentSystem, - - // Computers - RedumpSystem.AcornArchimedes, - RedumpSystem.AppleMacintosh, - RedumpSystem.CommodoreAmigaCD, - RedumpSystem.FujitsuFMTownsseries, - RedumpSystem.IBMPCcompatible, - RedumpSystem.NECPC88series, - RedumpSystem.NECPC98series, - RedumpSystem.SharpX68000, - - // Arcade - RedumpSystem.funworldPhotoPlay, - RedumpSystem.IncredibleTechnologiesEagle, - RedumpSystem.KonamieAmusement, - RedumpSystem.KonamiFireBeat, - RedumpSystem.KonamiM2, - RedumpSystem.KonamiSystem573, - RedumpSystem.KonamiSystemGV, - RedumpSystem.KonamiTwinkle, - RedumpSystem.NamcoSegaNintendoTriforce, - RedumpSystem.NamcoSystem12, - RedumpSystem.NamcoSystem246256, - RedumpSystem.PanasonicM2, - RedumpSystem.SegaChihiro, - RedumpSystem.SegaLindbergh, - RedumpSystem.SegaNaomi, - RedumpSystem.SegaNaomi2, - RedumpSystem.SegaRingEdge, - RedumpSystem.SegaRingEdge2, - RedumpSystem.SegaTitanVideo, - RedumpSystem.TABAustriaQuizard, - - // Other - RedumpSystem.AudioCD, - RedumpSystem.BDVideo, - RedumpSystem.DVDVideo, - RedumpSystem.EnhancedCD, - RedumpSystem.HDDVDVideo, - RedumpSystem.NavisoftNaviken21, - RedumpSystem.PalmOS, - RedumpSystem.PhotoCD, - RedumpSystem.PlayStationGameSharkUpdates, - RedumpSystem.PocketPC, - RedumpSystem.SegaPrologue21MultimediaKaraokeSystem, - RedumpSystem.TaoiKTV, - RedumpSystem.TomyKissSite, - RedumpSystem.VideoCD, - ]; - - /// - /// RedumpSystem values that are dumper-only - /// - private static readonly RedumpSystem?[] _bannedSystems = - [ - // Disc-Based Consoles - RedumpSystem.HasbroVideoNow, - RedumpSystem.HasbroVideoNowColor, - RedumpSystem.HasbroVideoNowJr, - RedumpSystem.HasbroVideoNowXP, - RedumpSystem.MicrosoftXboxOne, - RedumpSystem.MicrosoftXboxSeriesXS, - RedumpSystem.NintendoWiiU, - RedumpSystem.SonyPlayStation4, - RedumpSystem.SonyPlayStation5, - - // Arcade - RedumpSystem.KonamiM2, - RedumpSystem.PanasonicM2, - - // Other - RedumpSystem.AudioCD, - RedumpSystem.BDVideo, - RedumpSystem.DVDVideo, - RedumpSystem.EnhancedCD, - RedumpSystem.HDDVDVideo, - RedumpSystem.NavisoftNaviken21, - RedumpSystem.VideoCD, - ]; - - /// - /// RedumpSystem values that are considered markers - /// - private static readonly RedumpSystem?[] _markerSystems = - [ - RedumpSystem.MarkerArcadeEnd, - RedumpSystem.MarkerComputerEnd, - RedumpSystem.MarkerDiscBasedConsoleEnd, - RedumpSystem.MarkerOtherEnd, - ]; - - /// - /// RedumpSystem values that are have reversed ringcodes - /// - private static readonly RedumpSystem?[] _reverseRingcodeSystems = - [ - RedumpSystem.SonyPlayStation2, - RedumpSystem.SonyPlayStation3, - RedumpSystem.SonyPlayStation4, - RedumpSystem.SonyPlayStation5, - RedumpSystem.SonyPlayStationPortable, - ]; - - /// - /// Map of RedumpSystem values to their corresponding categories - /// - private static readonly Dictionary _systemCategoryMap = new() - { - // BIOS - [RedumpSystem.MicrosoftXboxBIOS] = SystemCategory.NONE, - [RedumpSystem.NintendoGameCubeBIOS] = SystemCategory.NONE, - [RedumpSystem.SonyPlayStationBIOS] = SystemCategory.NONE, - [RedumpSystem.SonyPlayStation2BIOS] = SystemCategory.NONE, - - // Disc-Based Consoles - [RedumpSystem.AtariJaguarCDInteractiveMultimediaSystem] = SystemCategory.DiscBasedConsole, - [RedumpSystem.BandaiPlaydiaQuickInteractiveSystem] = SystemCategory.DiscBasedConsole, - [RedumpSystem.BandaiPippin] = SystemCategory.DiscBasedConsole, - [RedumpSystem.CommodoreAmigaCD32] = SystemCategory.DiscBasedConsole, - [RedumpSystem.CommodoreAmigaCDTV] = SystemCategory.DiscBasedConsole, - [RedumpSystem.EnvizionsEVOSmartConsole] = SystemCategory.DiscBasedConsole, - [RedumpSystem.FujitsuFMTownsMarty] = SystemCategory.DiscBasedConsole, - [RedumpSystem.HasbroiONEducationalGamingSystem] = SystemCategory.DiscBasedConsole, - [RedumpSystem.HasbroVideoNow] = SystemCategory.DiscBasedConsole, - [RedumpSystem.HasbroVideoNowColor] = SystemCategory.DiscBasedConsole, - [RedumpSystem.HasbroVideoNowJr] = SystemCategory.DiscBasedConsole, - [RedumpSystem.HasbroVideoNowXP] = SystemCategory.DiscBasedConsole, - [RedumpSystem.MattelFisherPriceiXL] = SystemCategory.DiscBasedConsole, - [RedumpSystem.MattelHyperScan] = SystemCategory.DiscBasedConsole, - [RedumpSystem.MemorexVisualInformationSystem] = SystemCategory.DiscBasedConsole, - [RedumpSystem.MicrosoftXbox] = SystemCategory.DiscBasedConsole, - [RedumpSystem.MicrosoftXbox360] = SystemCategory.DiscBasedConsole, - [RedumpSystem.MicrosoftXboxOne] = SystemCategory.DiscBasedConsole, - [RedumpSystem.MicrosoftXboxSeriesXS] = SystemCategory.DiscBasedConsole, - [RedumpSystem.NECPCEngineCDTurboGrafxCD] = SystemCategory.DiscBasedConsole, - [RedumpSystem.NECPCFXPCFXGA] = SystemCategory.DiscBasedConsole, - [RedumpSystem.NintendoGameCube] = SystemCategory.DiscBasedConsole, - [RedumpSystem.NintendoSonySuperNESCDROMSystem] = SystemCategory.DiscBasedConsole, - [RedumpSystem.NintendoWii] = SystemCategory.DiscBasedConsole, - [RedumpSystem.NintendoWiiU] = SystemCategory.DiscBasedConsole, - [RedumpSystem.Panasonic3DOInteractiveMultiplayer] = SystemCategory.DiscBasedConsole, - [RedumpSystem.PhilipsCDi] = SystemCategory.DiscBasedConsole, - [RedumpSystem.PlaymajiPolymega] = SystemCategory.DiscBasedConsole, - [RedumpSystem.PioneerLaserActive] = SystemCategory.DiscBasedConsole, - [RedumpSystem.SegaDreamcast] = SystemCategory.DiscBasedConsole, - [RedumpSystem.SegaMegaCDSegaCD] = SystemCategory.DiscBasedConsole, - [RedumpSystem.SegaSaturn] = SystemCategory.DiscBasedConsole, - [RedumpSystem.SNKNeoGeoCD] = SystemCategory.DiscBasedConsole, - [RedumpSystem.SonyPlayStation] = SystemCategory.DiscBasedConsole, - [RedumpSystem.SonyPlayStation2] = SystemCategory.DiscBasedConsole, - [RedumpSystem.SonyPlayStation3] = SystemCategory.DiscBasedConsole, - [RedumpSystem.SonyPlayStation4] = SystemCategory.DiscBasedConsole, - [RedumpSystem.SonyPlayStation5] = SystemCategory.DiscBasedConsole, - [RedumpSystem.SonyPlayStationPortable] = SystemCategory.DiscBasedConsole, - [RedumpSystem.VMLabsNUON] = SystemCategory.DiscBasedConsole, - [RedumpSystem.VTechVFlashVSmilePro] = SystemCategory.DiscBasedConsole, - [RedumpSystem.ZAPiTGamesGameWaveFamilyEntertainmentSystem] = SystemCategory.DiscBasedConsole, - [RedumpSystem.MarkerDiscBasedConsoleEnd] = SystemCategory.NONE, - - // Computers - [RedumpSystem.AcornArchimedes] = SystemCategory.Computer, - [RedumpSystem.AppleMacintosh] = SystemCategory.Computer, - [RedumpSystem.CommodoreAmigaCD] = SystemCategory.Computer, - [RedumpSystem.FujitsuFMTownsseries] = SystemCategory.Computer, - [RedumpSystem.IBMPCcompatible] = SystemCategory.Computer, - [RedumpSystem.NECPC88series] = SystemCategory.Computer, - [RedumpSystem.NECPC98series] = SystemCategory.Computer, - [RedumpSystem.SharpX68000] = SystemCategory.Computer, - [RedumpSystem.MarkerComputerEnd] = SystemCategory.NONE, - - // Arcade - [RedumpSystem.AmigaCUBOCD32] = SystemCategory.Arcade, - [RedumpSystem.AmericanLaserGames3DO] = SystemCategory.Arcade, - [RedumpSystem.Atari3DO] = SystemCategory.Arcade, - [RedumpSystem.Atronic] = SystemCategory.Arcade, - [RedumpSystem.AUSCOMSystem1] = SystemCategory.Arcade, - [RedumpSystem.BallyGameMagic] = SystemCategory.Arcade, - [RedumpSystem.CapcomCPSystemIII] = SystemCategory.Arcade, - [RedumpSystem.funworldPhotoPlay] = SystemCategory.Arcade, - [RedumpSystem.FuRyuOmronPurikura] = SystemCategory.Arcade, - [RedumpSystem.GlobalVRVarious] = SystemCategory.Arcade, - [RedumpSystem.GlobalVRVortek] = SystemCategory.Arcade, - [RedumpSystem.GlobalVRVortekV3] = SystemCategory.Arcade, - [RedumpSystem.ICEPCHardware] = SystemCategory.Arcade, - [RedumpSystem.IncredibleTechnologiesEagle] = SystemCategory.Arcade, - [RedumpSystem.IncredibleTechnologiesVarious] = SystemCategory.Arcade, - [RedumpSystem.JVLiTouch] = SystemCategory.Arcade, - [RedumpSystem.KonamieAmusement] = SystemCategory.Arcade, - [RedumpSystem.KonamiFireBeat] = SystemCategory.Arcade, - [RedumpSystem.KonamiM2] = SystemCategory.Arcade, - [RedumpSystem.KonamiPython] = SystemCategory.Arcade, - [RedumpSystem.KonamiPython2] = SystemCategory.Arcade, - [RedumpSystem.KonamiSystem573] = SystemCategory.Arcade, - [RedumpSystem.KonamiSystemGV] = SystemCategory.Arcade, - [RedumpSystem.KonamiTwinkle] = SystemCategory.Arcade, - [RedumpSystem.KonamiVarious] = SystemCategory.Arcade, - [RedumpSystem.MeritIndustriesBoardwalk] = SystemCategory.Arcade, - [RedumpSystem.MeritIndustriesMegaTouchForce] = SystemCategory.Arcade, - [RedumpSystem.MeritIndustriesMegaTouchION] = SystemCategory.Arcade, - [RedumpSystem.MeritIndustriesMegaTouchMaxx] = SystemCategory.Arcade, - [RedumpSystem.MeritIndustriesMegaTouchXL] = SystemCategory.Arcade, - [RedumpSystem.NamcoPurikura] = SystemCategory.Arcade, - [RedumpSystem.NamcoSegaNintendoTriforce] = SystemCategory.Arcade, - [RedumpSystem.NamcoSystem12] = SystemCategory.Arcade, - [RedumpSystem.NamcoSystem246256] = SystemCategory.Arcade, - [RedumpSystem.NewJatreCDi] = SystemCategory.Arcade, - [RedumpSystem.NichibutsuHighRateSystem] = SystemCategory.Arcade, - [RedumpSystem.NichibutsuSuperCD] = SystemCategory.Arcade, - [RedumpSystem.NichibutsuXRateSystem] = SystemCategory.Arcade, - [RedumpSystem.PanasonicM2] = SystemCategory.Arcade, - [RedumpSystem.PhotoPlayVarious] = SystemCategory.Arcade, - [RedumpSystem.RawThrillsVarious] = SystemCategory.Arcade, - [RedumpSystem.SegaALLS] = SystemCategory.Arcade, - [RedumpSystem.SegaChihiro] = SystemCategory.Arcade, - [RedumpSystem.SegaEuropaR] = SystemCategory.Arcade, - [RedumpSystem.SegaLindbergh] = SystemCategory.Arcade, - [RedumpSystem.SegaNaomi] = SystemCategory.Arcade, - [RedumpSystem.SegaNaomi2] = SystemCategory.Arcade, - [RedumpSystem.SegaNaomiSatelliteTerminalPC] = SystemCategory.Arcade, - [RedumpSystem.SegaNu] = SystemCategory.Arcade, - [RedumpSystem.SegaNu11] = SystemCategory.Arcade, - [RedumpSystem.SegaNu2] = SystemCategory.Arcade, - [RedumpSystem.SegaNuSX] = SystemCategory.Arcade, - [RedumpSystem.SegaRingEdge] = SystemCategory.Arcade, - [RedumpSystem.SegaRingEdge2] = SystemCategory.Arcade, - [RedumpSystem.SegaRingWide] = SystemCategory.Arcade, - [RedumpSystem.SegaSystem32] = SystemCategory.Arcade, - [RedumpSystem.SegaTitanVideo] = SystemCategory.Arcade, - [RedumpSystem.SeibuCATSSystem] = SystemCategory.Arcade, - [RedumpSystem.TABAustriaQuizard] = SystemCategory.Arcade, - [RedumpSystem.TsunamiTsuMoMultiGameMotionSystem] = SystemCategory.Arcade, - [RedumpSystem.UltraCade] = SystemCategory.Arcade, - [RedumpSystem.MarkerArcadeEnd] = SystemCategory.NONE, - - // Other - [RedumpSystem.AudioCD] = SystemCategory.Other, - [RedumpSystem.BDVideo] = SystemCategory.Other, - [RedumpSystem.DVDAudio] = SystemCategory.Other, - [RedumpSystem.DVDVideo] = SystemCategory.Other, - [RedumpSystem.EnhancedCD] = SystemCategory.Other, - [RedumpSystem.HDDVDVideo] = SystemCategory.Other, - [RedumpSystem.NavisoftNaviken21] = SystemCategory.Other, - [RedumpSystem.PalmOS] = SystemCategory.Other, - [RedumpSystem.PhotoCD] = SystemCategory.Other, - [RedumpSystem.PlayStationGameSharkUpdates] = SystemCategory.Other, - [RedumpSystem.PocketPC] = SystemCategory.Other, - [RedumpSystem.Psion] = SystemCategory.Other, - [RedumpSystem.RainbowDisc] = SystemCategory.Other, - [RedumpSystem.SegaPrologue21MultimediaKaraokeSystem] = SystemCategory.Other, - [RedumpSystem.SharpZaurus] = SystemCategory.Other, - [RedumpSystem.SonyElectronicBook] = SystemCategory.Other, - [RedumpSystem.SuperAudioCD] = SystemCategory.Other, - [RedumpSystem.TaoiKTV] = SystemCategory.Other, - [RedumpSystem.TomyKissSite] = SystemCategory.Other, - [RedumpSystem.VideoCD] = SystemCategory.Other, - [RedumpSystem.MarkerOtherEnd] = SystemCategory.NONE, - }; - - /// - /// RedumpSystem values that have cuesheet packs - /// - private static readonly RedumpSystem?[] _systemsWithCues = - [ - // Disc-Based Consoles - RedumpSystem.AtariJaguarCDInteractiveMultimediaSystem, - RedumpSystem.BandaiPlaydiaQuickInteractiveSystem, - RedumpSystem.BandaiPippin, - RedumpSystem.CommodoreAmigaCD32, - RedumpSystem.CommodoreAmigaCDTV, - RedumpSystem.HasbroVideoNow, - RedumpSystem.HasbroVideoNowColor, - RedumpSystem.HasbroVideoNowJr, - RedumpSystem.HasbroVideoNowXP, - RedumpSystem.MattelFisherPriceiXL, - RedumpSystem.MattelHyperScan, - RedumpSystem.MemorexVisualInformationSystem, - RedumpSystem.MicrosoftXbox, - RedumpSystem.MicrosoftXbox360, - RedumpSystem.NECPCEngineCDTurboGrafxCD, - RedumpSystem.NECPCFXPCFXGA, - RedumpSystem.Panasonic3DOInteractiveMultiplayer, - RedumpSystem.PhilipsCDi, - RedumpSystem.SegaDreamcast, - RedumpSystem.SegaMegaCDSegaCD, - RedumpSystem.SegaSaturn, - RedumpSystem.SNKNeoGeoCD, - RedumpSystem.SonyPlayStation, - RedumpSystem.SonyPlayStation2, - RedumpSystem.SonyPlayStation3, - RedumpSystem.VTechVFlashVSmilePro, - - // Computers - RedumpSystem.AcornArchimedes, - RedumpSystem.AppleMacintosh, - RedumpSystem.CommodoreAmigaCD, - RedumpSystem.FujitsuFMTownsseries, - RedumpSystem.IBMPCcompatible, - RedumpSystem.NECPC88series, - RedumpSystem.NECPC98series, - RedumpSystem.SharpX68000, - - // Arcade - RedumpSystem.funworldPhotoPlay, - RedumpSystem.IncredibleTechnologiesEagle, - RedumpSystem.KonamieAmusement, - RedumpSystem.KonamiFireBeat, - RedumpSystem.KonamiM2, - RedumpSystem.KonamiSystem573, - RedumpSystem.KonamiSystemGV, - RedumpSystem.NamcoSegaNintendoTriforce, - RedumpSystem.NamcoSystem246256, - RedumpSystem.PanasonicM2, - RedumpSystem.SegaChihiro, - RedumpSystem.SegaNaomi, - RedumpSystem.SegaNaomi2, - RedumpSystem.TABAustriaQuizard, - - // Other - RedumpSystem.AudioCD, - RedumpSystem.NavisoftNaviken21, - RedumpSystem.PalmOS, - RedumpSystem.PhotoCD, - RedumpSystem.PlayStationGameSharkUpdates, - RedumpSystem.PocketPC, - RedumpSystem.SegaPrologue21MultimediaKaraokeSystem, - RedumpSystem.TomyKissSite, - RedumpSystem.VideoCD, - ]; - - /// - /// RedumpSystem values that have dats - /// - private static readonly RedumpSystem?[] _systemsWithDats = - [ - // BIOS Sets - RedumpSystem.MicrosoftXboxBIOS, - RedumpSystem.NintendoGameCubeBIOS, - RedumpSystem.SonyPlayStationBIOS, - RedumpSystem.SonyPlayStation2BIOS, - - // Disc-Based Consoles - RedumpSystem.AtariJaguarCDInteractiveMultimediaSystem, - RedumpSystem.BandaiPlaydiaQuickInteractiveSystem, - RedumpSystem.BandaiPippin, - RedumpSystem.CommodoreAmigaCD32, - RedumpSystem.CommodoreAmigaCDTV, - RedumpSystem.HasbroVideoNow, - RedumpSystem.HasbroVideoNowColor, - RedumpSystem.HasbroVideoNowJr, - RedumpSystem.HasbroVideoNowXP, - RedumpSystem.MattelFisherPriceiXL, - RedumpSystem.MattelHyperScan, - RedumpSystem.MemorexVisualInformationSystem, - RedumpSystem.MicrosoftXbox, - RedumpSystem.MicrosoftXbox360, - RedumpSystem.MicrosoftXboxOne, - RedumpSystem.MicrosoftXboxSeriesXS, - RedumpSystem.NECPCEngineCDTurboGrafxCD, - RedumpSystem.NECPCFXPCFXGA, - RedumpSystem.NintendoGameCube, - RedumpSystem.NintendoWii, - RedumpSystem.NintendoWiiU, - RedumpSystem.Panasonic3DOInteractiveMultiplayer, - RedumpSystem.PhilipsCDi, - RedumpSystem.SegaDreamcast, - RedumpSystem.SegaMegaCDSegaCD, - RedumpSystem.SegaSaturn, - RedumpSystem.SNKNeoGeoCD, - RedumpSystem.SonyPlayStation, - RedumpSystem.SonyPlayStation2, - RedumpSystem.SonyPlayStation3, - RedumpSystem.SonyPlayStation4, - RedumpSystem.SonyPlayStation5, - RedumpSystem.SonyPlayStationPortable, - RedumpSystem.VMLabsNUON, - RedumpSystem.VTechVFlashVSmilePro, - RedumpSystem.ZAPiTGamesGameWaveFamilyEntertainmentSystem, - - // Computers - RedumpSystem.AcornArchimedes, - RedumpSystem.AppleMacintosh, - RedumpSystem.CommodoreAmigaCD, - RedumpSystem.FujitsuFMTownsseries, - RedumpSystem.IBMPCcompatible, - RedumpSystem.NECPC88series, - RedumpSystem.NECPC98series, - RedumpSystem.SharpX68000, - - // Arcade - RedumpSystem.funworldPhotoPlay, - RedumpSystem.IncredibleTechnologiesEagle, - RedumpSystem.KonamieAmusement, - RedumpSystem.KonamiFireBeat, - RedumpSystem.KonamiM2, - RedumpSystem.KonamiSystem573, - RedumpSystem.KonamiSystemGV, - RedumpSystem.NamcoSegaNintendoTriforce, - RedumpSystem.NamcoSystem246256, - RedumpSystem.PanasonicM2, - RedumpSystem.SegaChihiro, - RedumpSystem.SegaLindbergh, - RedumpSystem.SegaNaomi, - RedumpSystem.SegaNaomi2, - RedumpSystem.SegaRingEdge, - RedumpSystem.SegaRingEdge2, - RedumpSystem.TABAustriaQuizard, - - // Other - RedumpSystem.AudioCD, - RedumpSystem.BDVideo, - RedumpSystem.DVDVideo, - RedumpSystem.HDDVDVideo, - RedumpSystem.NavisoftNaviken21, - RedumpSystem.PalmOS, - RedumpSystem.PhotoCD, - RedumpSystem.PlayStationGameSharkUpdates, - RedumpSystem.PocketPC, - RedumpSystem.SegaPrologue21MultimediaKaraokeSystem, - RedumpSystem.TomyKissSite, - RedumpSystem.VideoCD, - ]; - - /// - /// RedumpSystem values that have decrypted keys - /// - private static readonly RedumpSystem?[] _systemsWithDKeys = - [ - RedumpSystem.SonyPlayStation3, - ]; - - /// - /// RedumpSystem values that have GDI packs - /// - private static readonly RedumpSystem?[] _systemsWithGdis = - [ - // Disc-Based Consoles - RedumpSystem.SegaDreamcast, - - // Arcade - RedumpSystem.NamcoSegaNintendoTriforce, - RedumpSystem.SegaChihiro, - RedumpSystem.SegaNaomi, - RedumpSystem.SegaNaomi2, - ]; - - /// - /// RedumpSystem values that have keys - /// - private static readonly RedumpSystem?[] _systemsWithKeys = - [ - RedumpSystem.NintendoWiiU, - RedumpSystem.SonyPlayStation3, - ]; - - /// - /// RedumpSystem values that have LSD packs - /// - private static readonly RedumpSystem?[] _systemsWithLsds = - [ - // Disc-Based Consoles - RedumpSystem.SonyPlayStation, - - // Computers - RedumpSystem.AppleMacintosh, - RedumpSystem.IBMPCcompatible, - ]; - - /// - /// RedumpSystem values that have SBI packs - /// - private static readonly RedumpSystem?[] _systemsWithSbis = - [ - // Disc-Based Consoles - RedumpSystem.SonyPlayStation, - - // Computers - RedumpSystem.AppleMacintosh, - RedumpSystem.IBMPCcompatible, - ]; - - /// - /// RedumpSystem values that are considered detected by Windows - /// - private static readonly RedumpSystem?[] _windowsDetectedSystems = - [ - // Disc-Based Consoles - RedumpSystem.CommodoreAmigaCD32, - RedumpSystem.CommodoreAmigaCDTV, - RedumpSystem.EnvizionsEVOSmartConsole, - RedumpSystem.FujitsuFMTownsMarty, - RedumpSystem.HasbroiONEducationalGamingSystem, - RedumpSystem.MattelFisherPriceiXL, - RedumpSystem.MattelHyperScan, - RedumpSystem.MemorexVisualInformationSystem, - RedumpSystem.MicrosoftXbox, - RedumpSystem.MicrosoftXbox360, - RedumpSystem.MicrosoftXboxOne, - RedumpSystem.MicrosoftXboxSeriesXS, - RedumpSystem.NECPCEngineCDTurboGrafxCD, - RedumpSystem.NECPCFXPCFXGA, - RedumpSystem.NintendoSonySuperNESCDROMSystem, - RedumpSystem.PlaymajiPolymega, - RedumpSystem.SegaDreamcast, - RedumpSystem.SegaMegaCDSegaCD, - RedumpSystem.SegaSaturn, - RedumpSystem.SNKNeoGeoCD, - RedumpSystem.SonyPlayStation, - RedumpSystem.SonyPlayStation2, - RedumpSystem.SonyPlayStation3, - RedumpSystem.SonyPlayStation4, - RedumpSystem.SonyPlayStation5, - RedumpSystem.SonyPlayStationPortable, - RedumpSystem.VMLabsNUON, - RedumpSystem.VTechVFlashVSmilePro, - RedumpSystem.ZAPiTGamesGameWaveFamilyEntertainmentSystem, - - // Computers - RedumpSystem.AcornArchimedes, - RedumpSystem.CommodoreAmigaCD, - RedumpSystem.FujitsuFMTownsseries, - RedumpSystem.IBMPCcompatible, - RedumpSystem.NECPC88series, - RedumpSystem.NECPC98series, - RedumpSystem.SharpX68000, - - // Arcade - RedumpSystem.AmigaCUBOCD32, - RedumpSystem.Atronic, - RedumpSystem.AUSCOMSystem1, - RedumpSystem.BallyGameMagic, - RedumpSystem.CapcomCPSystemIII, - RedumpSystem.funworldPhotoPlay, - RedumpSystem.FuRyuOmronPurikura, - RedumpSystem.GlobalVRVarious, - RedumpSystem.GlobalVRVortek, - RedumpSystem.GlobalVRVortekV3, - RedumpSystem.ICEPCHardware, - RedumpSystem.IncredibleTechnologiesEagle, - RedumpSystem.IncredibleTechnologiesVarious, - RedumpSystem.JVLiTouch, - RedumpSystem.KonamieAmusement, - RedumpSystem.KonamiFireBeat, - RedumpSystem.KonamiM2, - RedumpSystem.KonamiPython, - RedumpSystem.KonamiPython2, - RedumpSystem.KonamiSystem573, - RedumpSystem.KonamiSystemGV, - RedumpSystem.KonamiTwinkle, - RedumpSystem.KonamiVarious, - RedumpSystem.MeritIndustriesBoardwalk, - RedumpSystem.MeritIndustriesMegaTouchForce, - RedumpSystem.MeritIndustriesMegaTouchION, - RedumpSystem.MeritIndustriesMegaTouchMaxx, - RedumpSystem.MeritIndustriesMegaTouchXL, - RedumpSystem.NamcoPurikura, - RedumpSystem.NamcoSegaNintendoTriforce, - RedumpSystem.NamcoSystem12, - RedumpSystem.NamcoSystem246256, - RedumpSystem.NichibutsuHighRateSystem, - RedumpSystem.NichibutsuSuperCD, - RedumpSystem.NichibutsuXRateSystem, - RedumpSystem.PhotoPlayVarious, - RedumpSystem.RawThrillsVarious, - RedumpSystem.SegaALLS, - RedumpSystem.SegaChihiro, - RedumpSystem.SegaEuropaR, - RedumpSystem.SegaLindbergh, - RedumpSystem.SegaNaomi, - RedumpSystem.SegaNaomi2, - RedumpSystem.SegaNaomiSatelliteTerminalPC, - RedumpSystem.SegaNu, - RedumpSystem.SegaNu11, - RedumpSystem.SegaNu2, - RedumpSystem.SegaNuSX, - RedumpSystem.SegaRingEdge, - RedumpSystem.SegaRingEdge2, - RedumpSystem.SegaRingWide, - RedumpSystem.SegaSystem32, - RedumpSystem.SegaTitanVideo, - RedumpSystem.SeibuCATSSystem, - RedumpSystem.TABAustriaQuizard, - RedumpSystem.TsunamiTsuMoMultiGameMotionSystem, - RedumpSystem.UltraCade, - - // Other - RedumpSystem.AudioCD, - RedumpSystem.BDVideo, - RedumpSystem.DVDAudio, - RedumpSystem.DVDVideo, - RedumpSystem.EnhancedCD, - RedumpSystem.HDDVDVideo, - RedumpSystem.NavisoftNaviken21, - RedumpSystem.PalmOS, - RedumpSystem.PhotoCD, - RedumpSystem.PocketPC, - RedumpSystem.Psion, - RedumpSystem.RainbowDisc, - RedumpSystem.SharpZaurus, - RedumpSystem.SegaPrologue21MultimediaKaraokeSystem, - RedumpSystem.SonyElectronicBook, - RedumpSystem.TaoiKTV, - RedumpSystem.TomyKissSite, - RedumpSystem.VideoCD, - ]; - - /// - /// RedumpSystem values that are considered XGD - /// - private static readonly RedumpSystem?[] _xgdSystems = - [ - RedumpSystem.MicrosoftXbox, - RedumpSystem.MicrosoftXbox360, - RedumpSystem.MicrosoftXboxOne, - RedumpSystem.MicrosoftXboxSeriesXS, - ]; - - /// - /// Check that all systems detected by Windows are marked properly - /// - /// RedumpSystem value to check - /// The expected value to come from the check - [Theory] - [MemberData(nameof(GenerateWindowsDetectedSystemsTestData))] - public void RedumpSystem_DetectedByWindows(RedumpSystem? redumpSystem, bool expected) - { - bool actual = redumpSystem.DetectedByWindows(); - Assert.Equal(expected, actual); - } - - /// - /// Check that all systems with reversed ringcodes are marked properly - /// - /// RedumpSystem value to check - /// The expected value to come from the check - [Theory] - [MemberData(nameof(GenerateReversedRingcodeSystemsTestData))] - public void RedumpSystem_HasReversedRingcodes(RedumpSystem? redumpSystem, bool expected) - { - bool actual = redumpSystem.HasReversedRingcodes(); - Assert.Equal(expected, actual); - } - - /// - /// Check that all audio systems are marked properly - /// - /// RedumpSystem value to check - /// The expected value to come from the check - [Theory] - [MemberData(nameof(GenerateAudioSystemsTestData))] - public void RedumpSystem_IsAudio(RedumpSystem? redumpSystem, bool expected) - { - bool actual = redumpSystem.IsAudio(); - Assert.Equal(expected, actual); - } - - /// - /// Check that all marker systems are marked properly - /// - /// RedumpSystem value to check - /// The expected value to come from the check - [Theory] - [MemberData(nameof(GenerateMarkerSystemsTestData))] - public void RedumpSystem_IsMarker(RedumpSystem? redumpSystem, bool expected) - { - bool actual = redumpSystem.IsMarker(); - Assert.Equal(expected, actual); - } - - /// - /// Check that all XGD systems are marked properly - /// - /// RedumpSystem value to check - /// The expected value to come from the check - [Theory] - [MemberData(nameof(GenerateXGDSystemsTestData))] - public void RedumpSystem_IsXGD(RedumpSystem? redumpSystem, bool expected) - { - bool actual = redumpSystem.IsXGD(); - Assert.Equal(expected, actual); - } - - [Fact] - public void RedumpSystem_ListRedumpSystem() - { - var actual = RedumpLib.RedumpOrg.Data.Extensions.ListSystems(); - Assert.NotEmpty(actual); - } - - /// - /// Check that every RedumpSystem has a long name provided - /// - /// RedumpSystem value to check - /// True to expect a null value, false otherwise - [Theory] - [MemberData(nameof(GenerateRedumpSystemTestData))] - public void RedumpSystem_LongName(RedumpSystem? redumpSystem, bool expectNull) - { - var actual = redumpSystem.LongName(); - - if (expectNull) - Assert.Null(actual); - else - Assert.NotNull(actual); - } - - // TODO: Re-enable the following test once non-Redump systems are accounted for - - /// - /// Check that every RedumpSystem has a short name provided - /// - /// RedumpSystem value to check - /// True to expect a null value, false otherwise - // [Theory] - // [MemberData(nameof(GenerateRedumpSystemTestData))] - // public void RedumpSystem_ShortName(RedumpSystem? redumpSystem, bool expectNull) - // { - // string? actual = redumpSystem.ShortName(); - - // if (expectNull) - // Assert.Null(actual); - // else - // Assert.NotNull(actual); - // } - - /// - /// Check that all systems are mapped to a category - /// - /// RedumpSystem value to check - /// The expected value to come from the check - [Theory] - [MemberData(nameof(GenerateCategoriesSystemTestData))] - public void RedumpSystem_GetCategory(RedumpSystem? redumpSystem, SystemCategory expected) - { - SystemCategory actual = redumpSystem.GetCategory(); - Assert.Equal(expected, actual); - } - - /// - /// Check that all available systems are marked properly - /// - /// RedumpSystem value to check - /// The expected value to come from the check - [Theory] - [MemberData(nameof(GenerateAvailableSystemsTestData))] - public void RedumpSystem_IsAvailable(RedumpSystem? redumpSystem, bool expected) - { - bool actual = redumpSystem.IsAvailable(); - Assert.Equal(expected, actual); - } - - /// - /// Check that all banned systems are marked properly - /// - /// RedumpSystem value to check - /// The expected value to come from the check - [Theory] - [MemberData(nameof(GenerateBannedSystemsTestData))] - public void RedumpSystem_IsBanned(RedumpSystem? redumpSystem, bool expected) - { - bool actual = redumpSystem.IsBanned(); - Assert.Equal(expected, actual); - } - - /// - /// Check that all systems with cuesheets are marked properly - /// - /// RedumpSystem value to check - /// The expected value to come from the check - [Theory] - [MemberData(nameof(GenerateCuesheetSystemsTestData))] - public void RedumpSystem_HasCues(RedumpSystem? redumpSystem, bool expected) - { - bool actual = redumpSystem.HasCues(); - Assert.Equal(expected, actual); - } - - /// - /// Check that all systems with DATs are marked properly - /// - /// RedumpSystem value to check - /// The expected value to come from the check - [Theory] - [MemberData(nameof(GenerateDatSystemsTestData))] - public void RedumpSystem_HasDat(RedumpSystem? redumpSystem, bool expected) - { - bool actual = redumpSystem.HasDat(); - Assert.Equal(expected, actual); - } - - /// - /// Check that all systems with decrypted keys are marked properly - /// - /// RedumpSystem value to check - /// The expected value to come from the check - [Theory] - [MemberData(nameof(GenerateDKeySystemsTestData))] - public void RedumpSystem_HasDkeys(RedumpSystem? redumpSystem, bool expected) - { - bool actual = redumpSystem.HasDkeys(); - Assert.Equal(expected, actual); - } - - /// - /// Check that all systems with GDIs are marked properly - /// - /// RedumpSystem value to check - /// The expected value to come from the check - [Theory] - [MemberData(nameof(GenerateGdiSystemsTestData))] - public void RedumpSystem_HasGdi(RedumpSystem? redumpSystem, bool expected) - { - bool actual = redumpSystem.HasGdi(); - Assert.Equal(expected, actual); - } - - /// - /// Check that all systems with keys are marked properly - /// - /// RedumpSystem value to check - /// The expected value to come from the check - [Theory] - [MemberData(nameof(GenerateKeySystemsTestData))] - public void RedumpSystem_HasKeys(RedumpSystem? redumpSystem, bool expected) - { - bool actual = redumpSystem.HasKeys(); - Assert.Equal(expected, actual); - } - - /// - /// Check that all systems with LSDs are marked properly - /// - /// RedumpSystem value to check - /// The expected value to come from the check - [Theory] - [MemberData(nameof(GenerateLsdSystemsTestData))] - public void RedumpSystem_HasLsd(RedumpSystem? redumpSystem, bool expected) - { - bool actual = redumpSystem.HasLsd(); - Assert.Equal(expected, actual); - } - - /// - /// Check that all systems with SBIs are marked properly - /// - /// RedumpSystem value to check - /// The expected value to come from the check - [Theory] - [MemberData(nameof(GenerateSbiSystemsTestData))] - public void RedumpSystem_HasSbi(RedumpSystem? redumpSystem, bool expected) - { - bool actual = redumpSystem.HasSbi(); - Assert.Equal(expected, actual); - } - - /// - /// Check that every RedumpSystem can be mapped from a string - /// - /// RedumpSystem value to check - /// True to expect a null value, false otherwise - [Theory] - [MemberData(nameof(GenerateRedumpSystemTestData))] - public void RedumpSystem_ToRedumpSystem(RedumpSystem? redumpSystem, bool expectNull) - { - string? longName = redumpSystem.LongName(); - string? longNameSpaceless = longName?.Replace(" ", string.Empty); - - var actualNormal = longName.ToRedumpSystem(); - var actualSpaceless = longNameSpaceless.ToRedumpSystem(); - - if (expectNull) - { - Assert.Null(actualNormal); - Assert.Null(actualSpaceless); - } - else - { - Assert.Equal(redumpSystem, actualNormal); - Assert.Equal(redumpSystem, actualSpaceless); - } - } - - /// - /// Generate a test set of RedumpSystem values - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateRedumpSystemTestData() - { - var testData = new TheoryData() { { null, true } }; - foreach (RedumpSystem? redumpSystem in Enum.GetValues().Cast()) - { - // We want to skip all markers for this - if (redumpSystem.IsMarker()) - continue; - - testData.Add(redumpSystem, false); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values that are considered Audio - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateAudioSystemsTestData() - { - var testData = new TheoryData() { { null, false } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - if (_audioSystems.Contains(redumpSystem)) - testData.Add(redumpSystem, true); - else - testData.Add(redumpSystem, false); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values that are available - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateAvailableSystemsTestData() - { - var testData = new TheoryData() { { null, false } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - if (_availableSystems.Contains(redumpSystem)) - testData.Add(redumpSystem, true); - else - testData.Add(redumpSystem, false); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values that are banned - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateBannedSystemsTestData() - { - var testData = new TheoryData() { { null, false } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - if (_bannedSystems.Contains(redumpSystem)) - testData.Add(redumpSystem, true); - else - testData.Add(redumpSystem, false); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values mapped to their categories - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateCategoriesSystemTestData() - { - var testData = new TheoryData() { { null, SystemCategory.NONE } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - testData.Add(redumpSystem, _systemCategoryMap[redumpSystem]); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values that have cuesheets - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateCuesheetSystemsTestData() - { - var testData = new TheoryData() { { null, false } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - if (_systemsWithCues.Contains(redumpSystem)) - testData.Add(redumpSystem, true); - else - testData.Add(redumpSystem, false); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values that have DATs - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateDatSystemsTestData() - { - var testData = new TheoryData() { { null, false } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - if (_systemsWithDats.Contains(redumpSystem)) - testData.Add(redumpSystem, true); - else - testData.Add(redumpSystem, false); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values that have decrypted keys - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateDKeySystemsTestData() - { - var testData = new TheoryData() { { null, false } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - if (_systemsWithDKeys.Contains(redumpSystem)) - testData.Add(redumpSystem, true); - else - testData.Add(redumpSystem, false); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values that have GDIs - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateGdiSystemsTestData() - { - var testData = new TheoryData() { { null, false } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - if (_systemsWithGdis.Contains(redumpSystem)) - testData.Add(redumpSystem, true); - else - testData.Add(redumpSystem, false); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values that have keys - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateKeySystemsTestData() - { - var testData = new TheoryData() { { null, false } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - if (_systemsWithKeys.Contains(redumpSystem)) - testData.Add(redumpSystem, true); - else - testData.Add(redumpSystem, false); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values that have LSDs - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateLsdSystemsTestData() - { - var testData = new TheoryData() { { null, false } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - if (_systemsWithLsds.Contains(redumpSystem)) - testData.Add(redumpSystem, true); - else - testData.Add(redumpSystem, false); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values that are considered markers - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateMarkerSystemsTestData() - { - var testData = new TheoryData() { { null, false } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - if (_markerSystems.Contains(redumpSystem)) - testData.Add(redumpSystem, true); - else - testData.Add(redumpSystem, false); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values that are considered markers - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateReversedRingcodeSystemsTestData() - { - var testData = new TheoryData() { { null, false } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - if (_reverseRingcodeSystems.Contains(redumpSystem)) - testData.Add(redumpSystem, true); - else - testData.Add(redumpSystem, false); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values that have SBIs - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateSbiSystemsTestData() - { - var testData = new TheoryData() { { null, false } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - if (_systemsWithSbis.Contains(redumpSystem)) - testData.Add(redumpSystem, true); - else - testData.Add(redumpSystem, false); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values that are detected by Windows - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateWindowsDetectedSystemsTestData() - { - var testData = new TheoryData() { { null, false } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - if (_windowsDetectedSystems.Contains(redumpSystem)) - testData.Add(redumpSystem, true); - else - testData.Add(redumpSystem, false); - } - - return testData; - } - - /// - /// Generate a test set of RedumpSystem values that are considered XGD - /// - /// MemberData-compatible list of RedumpSystem values - public static TheoryData GenerateXGDSystemsTestData() - { - var testData = new TheoryData() { { null, false } }; - foreach (RedumpSystem redumpSystem in Enum.GetValues()) - { - if (_xgdSystems.Contains(redumpSystem)) - testData.Add(redumpSystem, true); - else - testData.Add(redumpSystem, false); - } - - return testData; - } - - #endregion - #region System Category /// diff --git a/SabreTools.RedumpLib.Test/RedumpOrg/FormatterTests.cs b/SabreTools.RedumpLib.Test/RedumpOrg/FormatterTests.cs index 71a4d3e..34048f8 100644 --- a/SabreTools.RedumpLib.Test/RedumpOrg/FormatterTests.cs +++ b/SabreTools.RedumpLib.Test/RedumpOrg/FormatterTests.cs @@ -92,7 +92,7 @@ namespace SabreTools.RedumpLib.Test.RedumpOrg var builder = new StringBuilder(); EDCSection? section = null; - RedumpSystem? system = RedumpSystem.SonyPlayStation; + PhysicalSystem? system = PhysicalSystem.SonyPlayStation; Formatter.FormatOutputData(builder, section, system); @@ -107,7 +107,7 @@ namespace SabreTools.RedumpLib.Test.RedumpOrg var builder = new StringBuilder(); EDCSection? section = null; - RedumpSystem? system = RedumpSystem.IBMPCcompatible; + PhysicalSystem? system = PhysicalSystem.IBMPCcompatible; Formatter.FormatOutputData(builder, section, system); @@ -122,7 +122,7 @@ namespace SabreTools.RedumpLib.Test.RedumpOrg var builder = new StringBuilder(); EDCSection? section = new() { EDC = YesNo.Yes }; - RedumpSystem? system = RedumpSystem.SonyPlayStation; + PhysicalSystem? system = PhysicalSystem.SonyPlayStation; Formatter.FormatOutputData(builder, section, system); @@ -202,7 +202,7 @@ namespace SabreTools.RedumpLib.Test.RedumpOrg var builder = new StringBuilder(); CopyProtectionSection? section = null; - RedumpSystem? system = RedumpSystem.IBMPCcompatible; + PhysicalSystem? system = PhysicalSystem.IBMPCcompatible; Formatter.FormatOutputData(builder, section, system); @@ -224,7 +224,7 @@ namespace SabreTools.RedumpLib.Test.RedumpOrg LibCryptData = null, SecuROMData = null, }; - RedumpSystem? system = RedumpSystem.IBMPCcompatible; + PhysicalSystem? system = PhysicalSystem.IBMPCcompatible; Formatter.FormatOutputData(builder, section, system); @@ -246,7 +246,7 @@ namespace SabreTools.RedumpLib.Test.RedumpOrg Protection = "XXXXXX", SecuROMData = "XXXXXX", }; - RedumpSystem? system = RedumpSystem.IBMPCcompatible; + PhysicalSystem? system = PhysicalSystem.IBMPCcompatible; Formatter.FormatOutputData(builder, section, system); @@ -268,7 +268,7 @@ namespace SabreTools.RedumpLib.Test.RedumpOrg Protection = "XXXXXX", SecuROMData = "XXXXXX", }; - RedumpSystem? system = RedumpSystem.SonyPlayStation; + PhysicalSystem? system = PhysicalSystem.SonyPlayStation; Formatter.FormatOutputData(builder, section, system); diff --git a/SabreTools.RedumpLib.Test/RedumpOrg/UrlBuilderTests.cs b/SabreTools.RedumpLib.Test/RedumpOrg/UrlBuilderTests.cs index 3d6be40..50ff996 100644 --- a/SabreTools.RedumpLib.Test/RedumpOrg/UrlBuilderTests.cs +++ b/SabreTools.RedumpLib.Test/RedumpOrg/UrlBuilderTests.cs @@ -1,4 +1,5 @@ using System; +using SabreTools.RedumpLib.Data; using SabreTools.RedumpLib.RedumpOrg; using SabreTools.RedumpLib.RedumpOrg.Data; using Xunit; @@ -118,21 +119,21 @@ namespace SabreTools.RedumpLib.Test.RedumpOrg [InlineData(null, "http://redump.org/list/user/arch/")] public void BuildListUrl_HaveMissSet(bool? have, string expected) { - string actual = UrlBuilder.BuildListUrl("user", have, system: RedumpSystem.AcornArchimedes); + string actual = UrlBuilder.BuildListUrl("user", have, system: PhysicalSystem.AcornArchimedes); Assert.Equal(expected, actual); } [Fact] public void BuildListUrl_InvalidUsername_Builds() { - string actual = UrlBuilder.BuildListUrl(string.Empty, have: true, system: RedumpSystem.AcornArchimedes); + string actual = UrlBuilder.BuildListUrl(string.Empty, have: true, system: PhysicalSystem.AcornArchimedes); Assert.Equal("http://redump.org/list/have//arch/", actual); } [Theory] - [InlineData(RedumpSystem.MarkerOtherEnd)] - [InlineData(RedumpSystem.RainbowDisc)] - public void BuildListUrl_InvalidSystem_Builds(RedumpSystem? system) + [InlineData(PhysicalSystem.MarkerOtherEnd)] + [InlineData(PhysicalSystem.RainbowDisc)] + public void BuildListUrl_InvalidSystem_Builds(PhysicalSystem? system) { string actual = UrlBuilder.BuildListUrl("user", have: true, system: system); Assert.Equal("http://redump.org/list/have/user/", actual); @@ -176,20 +177,20 @@ namespace SabreTools.RedumpLib.Test.RedumpOrg [InlineData(PackType.Sbis, "http://redump.org/sbi/arch/")] public void BuildPackUrl_ValidPackType_ValidSystem_Builds(PackType packType, string expected) { - string actual = UrlBuilder.BuildPackUrl(packType, RedumpSystem.AcornArchimedes); + string actual = UrlBuilder.BuildPackUrl(packType, PhysicalSystem.AcornArchimedes); Assert.Equal(expected, actual); } [Fact] public void BuildPackUrl_InvalidPackType_Throws() { - Assert.Throws(() => UrlBuilder.BuildPackUrl((PackType)int.MaxValue, RedumpSystem.AcornArchimedes)); + Assert.Throws(() => UrlBuilder.BuildPackUrl((PackType)int.MaxValue, PhysicalSystem.AcornArchimedes)); } [Fact] public void BuildPackUrl_InvalidSystem_Builds() { - string actual = UrlBuilder.BuildPackUrl(PackType.Datfile, RedumpSystem.MarkerOtherEnd); + string actual = UrlBuilder.BuildPackUrl(PackType.Datfile, PhysicalSystem.MarkerOtherEnd); Assert.Equal("http://redump.org/datfile//", actual); } diff --git a/SabreTools.RedumpLib.Test/SubmissionInfoTests.cs b/SabreTools.RedumpLib.Test/SubmissionInfoTests.cs index 95d74e2..737544a 100644 --- a/SabreTools.RedumpLib.Test/SubmissionInfoTests.cs +++ b/SabreTools.RedumpLib.Test/SubmissionInfoTests.cs @@ -51,7 +51,7 @@ namespace SabreTools.RedumpLib.Test CommonDiscInfo = new CommonDiscInfoSection() { - System = RedumpSystem.IBMPCcompatible, + System = PhysicalSystem.IBMPCcompatible, Media = DiscType.CD, Title = "Game Title", ForeignTitleNonLatin = "Foreign Game Title", diff --git a/SabreTools.RedumpLib/RedumpOrg/SystemAttribute.cs b/SabreTools.RedumpLib/Attributes/SystemAttribute.cs similarity index 79% rename from SabreTools.RedumpLib/RedumpOrg/SystemAttribute.cs rename to SabreTools.RedumpLib/Attributes/SystemAttribute.cs index 40be192..cd0dec1 100644 --- a/SabreTools.RedumpLib/RedumpOrg/SystemAttribute.cs +++ b/SabreTools.RedumpLib/Attributes/SystemAttribute.cs @@ -1,13 +1,17 @@ -using SabreTools.RedumpLib.Attributes; -using SabreTools.RedumpLib.RedumpOrg.Data; +using SabreTools.RedumpLib.Data; -namespace SabreTools.RedumpLib.RedumpOrg +namespace SabreTools.RedumpLib.Attributes { /// /// Attribute specifc to Redump System values /// public class SystemAttribute : HumanReadableAttribute { + /// + /// redump.org short code + /// + public string? RedumpOrgCode { get; set; } + /// /// Category for the system /// @@ -31,11 +35,13 @@ namespace SabreTools.RedumpLib.RedumpOrg /// /// System has a decrypted keys pack /// + /// redump.org only public bool HasDkeys { get; set; } = false; /// /// System has a GDI pack /// + /// redump.org only public bool HasGdi { get; set; } = false; /// @@ -46,6 +52,7 @@ namespace SabreTools.RedumpLib.RedumpOrg /// /// System has an LSD pack /// + /// redump.org only public bool HasLsd { get; set; } = false; /// diff --git a/SabreTools.RedumpLib/Builder.cs b/SabreTools.RedumpLib/Builder.cs index c767517..1e1fcf7 100644 --- a/SabreTools.RedumpLib/Builder.cs +++ b/SabreTools.RedumpLib/Builder.cs @@ -180,15 +180,15 @@ namespace SabreTools.RedumpLib } else if (string.Equals(gameInfoNodeHeader.InnerText, "System", StringComparison.OrdinalIgnoreCase)) { - info.CommonDiscInfo.System = RedumpOrg.Data.Extensions.ToRedumpSystem(gameInfoNodeData["a"]?.InnerText ?? string.Empty); + info.CommonDiscInfo.System = (gameInfoNodeData["a"]?.InnerText ?? string.Empty).ToPhysicalSystem(); } else if (string.Equals(gameInfoNodeHeader.InnerText, "Media", StringComparison.OrdinalIgnoreCase)) { - info.CommonDiscInfo.Media = RedumpOrg.Data.Extensions.ToDiscType(gameInfoNodeData.InnerText); + info.CommonDiscInfo.Media = gameInfoNodeData.InnerText.ToDiscType(); } else if (string.Equals(gameInfoNodeHeader.InnerText, "Category", StringComparison.OrdinalIgnoreCase)) { - info.CommonDiscInfo.Category = RedumpOrg.Data.Extensions.ToDiscCategory(gameInfoNodeData.InnerText); + info.CommonDiscInfo.Category = gameInfoNodeData.InnerText.ToDiscCategory(); } else if (string.Equals(gameInfoNodeHeader.InnerText, "Region", StringComparison.OrdinalIgnoreCase)) { diff --git a/SabreTools.RedumpLib/Data/Enumerations.cs b/SabreTools.RedumpLib/Data/Enumerations.cs index c13bacc..cd2c133 100644 --- a/SabreTools.RedumpLib/Data/Enumerations.cs +++ b/SabreTools.RedumpLib/Data/Enumerations.cs @@ -1755,6 +1755,606 @@ namespace SabreTools.RedumpLib.Data #endregion } + /// + /// List of all known systems not bound to specific site limitations + /// + /// TODO: Remove marker items + /// TODO: Double check all flags once the site is live + /// TODO: Add MAXTEST as a debug-only system + /// TODO: Does "Banned" now only mean that things like keys can't be downloaded? + public enum PhysicalSystem + { + #region BIOS Sets + + [System(LongName = "Microsoft Xbox (BIOS)", ShortName = "xbox-bios", HasDat = true)] + MicrosoftXboxBIOS, + + [System(LongName = "Nintendo GameCube (BIOS)", ShortName = "gc-bios", HasDat = true)] + NintendoGameCubeBIOS, + + [System(LongName = "Sony PlayStation (BIOS)", ShortName = "psx-bios", HasDat = true)] + SonyPlayStationBIOS, + + [System(LongName = "Sony PlayStation 2 (BIOS)", ShortName = "ps2-bios", HasDat = true)] + SonyPlayStation2BIOS, + + #endregion + + #region Disc-Based Consoles + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Atari Jaguar CD Interactive Multimedia System", ShortName = "AJCD", RedumpOrgCode = "ajcd", HasCues = true, HasDat = true)] + AtariJaguarCDInteractiveMultimediaSystem, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Bandai Pippin", ShortName = "PIPPIN", RedumpOrgCode = "pippin", HasCues = true, HasDat = true)] + BandaiPippin, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Bandai Playdia Quick Interactive System", RedumpOrgCode = "qis", ShortName = "QIS", HasCues = true, HasDat = true)] + BandaiPlaydiaQuickInteractiveSystem, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Commodore Amiga CD32", ShortName = "CD32", RedumpOrgCode = "cd32", HasCues = true, HasDat = true)] + CommodoreAmigaCD32, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Commodore Amiga CDTV", ShortName = "CDTV", RedumpOrgCode = "cdtv", HasCues = true, HasDat = true)] + CommodoreAmigaCDTV, + + [System(Category = SystemCategory.DiscBasedConsole, Available = false, LongName = "Envizions EVO Smart Console")] + EnvizionsEVOSmartConsole, + + [System(Category = SystemCategory.DiscBasedConsole, Available = false, LongName = "Fujitsu FM Towns Marty")] + FujitsuFMTownsMarty, + + [System(Category = SystemCategory.DiscBasedConsole, Available = false, LongName = "Hasbro iON Educational Gaming System")] + HasbroiONEducationalGamingSystem, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Hasbro VideoNow", ShortName = "HVN", RedumpOrgCode = "hvn", IsBanned = true, HasCues = true, HasDat = true)] + HasbroVideoNow, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Hasbro VideoNow Color", ShortName = "HVNC", RedumpOrgCode = "hvnc", IsBanned = true, HasCues = true, HasDat = true)] + HasbroVideoNowColor, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Hasbro VideoNow Jr.", ShortName = "HVNJR", RedumpOrgCode = "hvnjr", IsBanned = true, HasCues = true, HasDat = true)] + HasbroVideoNowJr, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Hasbro VideoNow XP", ShortName = "HVNXP", RedumpOrgCode = "hvnxp", IsBanned = true, HasCues = true, HasDat = true)] + HasbroVideoNowXP, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Mattel Fisher-Price iXL", ShortName = "IXL", RedumpOrgCode = "ixl", HasCues = true, HasDat = true)] + MattelFisherPriceiXL, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Mattel HyperScan", ShortName = "HS", RedumpOrgCode = "hs", HasCues = true, HasDat = true)] + MattelHyperScan, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Memorex Visual Information System", ShortName = "VIS", RedumpOrgCode = "vis", HasCues = true, HasDat = true)] + MemorexVisualInformationSystem, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Microsoft Xbox", ShortName = "XBOX", RedumpOrgCode = "xbox", HasCues = true, HasDat = true)] + MicrosoftXbox, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Microsoft Xbox 360", ShortName = "XBOX360", RedumpOrgCode = "xbox360", HasCues = true, HasDat = true)] + MicrosoftXbox360, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Microsoft Xbox One", ShortName = "XBOXONE", RedumpOrgCode = "xboxone", IsBanned = true, HasDat = true)] + MicrosoftXboxOne, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Microsoft Xbox Series X", ShortName = "XBOXSX", RedumpOrgCode = "xboxsx", IsBanned = true, HasDat = true)] + MicrosoftXboxSeriesXS, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "NEC PC Engine CD & TurboGrafx CD", ShortName = "PCE", RedumpOrgCode = "pce", HasCues = true, HasDat = true)] + NECPCEngineCDTurboGrafxCD, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "NEC PC-FX & PC-FXGA", ShortName = "PC-FX", RedumpOrgCode = "pc-fx", HasCues = true, HasDat = true)] + NECPCFXPCFXGA, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Nintendo GameCube", ShortName = "GC", RedumpOrgCode = "gc", HasDat = true)] + NintendoGameCube, + + [System(Category = SystemCategory.DiscBasedConsole, Available = false, LongName = "Nintendo-Sony Super NES CD-ROM System")] + NintendoSonySuperNESCDROMSystem, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Nintendo Wii", ShortName = "WII", RedumpOrgCode = "wii", HasDat = true)] + NintendoWii, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Nintendo Wii U", ShortName = "WIIU", RedumpOrgCode = "wiiu", IsBanned = true, HasDat = true, HasKeys = true)] + NintendoWiiU, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Panasonic 3DO Interactive Multiplayer", ShortName = "3DO", RedumpOrgCode = "3do", HasCues = true, HasDat = true)] + Panasonic3DOInteractiveMultiplayer, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Philips CD-i", ShortName = "CDI", RedumpOrgCode = "cdi", HasCues = true, HasDat = true)] + PhilipsCDi, + + [System(Category = SystemCategory.DiscBasedConsole, Available = false, LongName = "Playmaji Polymega")] + PlaymajiPolymega, + + [System(Category = SystemCategory.DiscBasedConsole, Available = false, LongName = "Pioneer LaserActive")] + PioneerLaserActive, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Sega Dreamcast", ShortName = "DC", RedumpOrgCode = "dc", HasCues = true, HasDat = true)] + SegaDreamcast, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Sega Mega CD & Sega CD", ShortName = "MCD", RedumpOrgCode = "mcd", HasCues = true, HasDat = true)] + SegaMegaCDSegaCD, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Sega Saturn", ShortName = "SS", RedumpOrgCode = "ss", HasCues = true, HasDat = true)] + SegaSaturn, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Neo Geo CD", ShortName = "NGCD", RedumpOrgCode = "ngcd", HasCues = true, HasDat = true)] + SNKNeoGeoCD, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Sony PlayStation", ShortName = "PSX", RedumpOrgCode = "psx", HasCues = true, HasDat = true, HasSbi = true)] + SonyPlayStation, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Sony PlayStation 2", ShortName = "PS2", RedumpOrgCode = "ps2", HasCues = true, HasDat = true)] + SonyPlayStation2, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Sony PlayStation 3", ShortName = "PS3", RedumpOrgCode = "ps3", HasCues = true, HasDat = true, HasKeys = true)] + SonyPlayStation3, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Sony PlayStation 4", ShortName = "PS4", RedumpOrgCode = "ps4", IsBanned = true, HasDat = true)] + SonyPlayStation4, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Sony PlayStation 5", ShortName = "PS5", RedumpOrgCode = "ps5", IsBanned = true, HasDat = true)] + SonyPlayStation5, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "Sony PlayStation Portable", ShortName = "PSP", RedumpOrgCode = "psp", HasDat = true)] + SonyPlayStationPortable, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "VM Labs NUON", ShortName = "NUON", RedumpOrgCode = "nuon", HasDat = true)] + VMLabsNUON, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "VTech V.Flash & V.Smile Pro", ShortName = "VFLASH", RedumpOrgCode = "vflash", HasCues = true, HasDat = true)] + VTechVFlashVSmilePro, + + [System(Category = SystemCategory.DiscBasedConsole, LongName = "ZAPiT Games Game Wave Family Entertainment System", ShortName = "GAMEWAVE", RedumpOrgCode = "gamewave", HasDat = true)] + ZAPiTGamesGameWaveFamilyEntertainmentSystem, + + // End of console section delimiter + MarkerDiscBasedConsoleEnd, + + #endregion + + #region Cartridge-Based and Other Consoles + + /* + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Amstrad GX-4000")] + AmstradGX4000, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "APF Microcomputer System")] + APFMicrocomputerSystem, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Atari 2600 & VCS")] + Atari2600VCS, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Atari 5200")] + Atari5200, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Atari 7800")] + Atari7800, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Atari Jaguar")] + AtariJaguar, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Atari XEGS")] + AtariXEGS, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Audiosonic 1292 Advanced Programmable Video System")] + Audiosonic1292AdvancedProgrammableVideoSystem, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Bally Astrocade")] + BallyAstrocade, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Bit Corporation Dina")] + BitCorporationDina, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Casio Loopy")] + CasioLoopy, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Casio PV-1000")] + CasioPV1000, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Commodore 64 Games System")] + Commodore64GamesSystem, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Daewoo Electronics Zemmix")] + DaewooElectronicsZemmix, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Emerson Arcadia 2001")] + EmersonArcadia2001, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Epoch Cassette Vision")] + EpochCassetteVision, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Epoch Super Cassette Vision")] + EpochSuperCassetteVision, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Fairchild Channel F")] + FairchildChannelF, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Funtech Super A'Can")] + FuntechSuperACan, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "GCE Vectrex")] + GCEVectrex, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Heber BBC Bridge Companion")] + HeberBBCBridgeCompanion, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Interton VC-4000")] + IntertonVC4000, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "JungleTac Vii")] + JungleTacVii, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "LeapFrog ClickStart")] + LeapFrogClickStart, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "LJN VideoArt")] + LJNVideoArt, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Magnavox Odyssey 2")] + MagnavoxOdyssey2, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Mattel Intellivision")] + MattelIntellivision, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "NEC PC Engine & TurboGrafx-16")] + NECPCEngineTurboGrafx16, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Nichibutsu MyVision")] + NichibutsuMyVision, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Nintendo 64")] + Nintendo64, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Nintendo 64DD")] + Nintendo64DD, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Nintendo Famicom & Nintendo Entertainment System")] + NintendoFamicomNintendoEntertainmentSystem, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Nintendo Famicom Disk System")] + NintendoFamicomDiskSystem, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Nintendo Super Famicom & Super Nintendo Entertainment System")] + NintendoSuperFamicomSuperNintendoEntertainmentSystem, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Nintendo Switch")] + NintendoSwitch, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Philips Videopac+ & G7400")] + PhilipsVideopacPlusG7400, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "RCA Studio-II")] + RCAStudioII, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Sega 32X")] + Sega32X, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Sega Mark III & Master System")] + SegaMarkIIIMasterSystem, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Sega MegaDrive & Genesis")] + SegaMegaDriveGenesis, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Sega SG-1000")] + SegaSG1000, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "SNK NeoGeo")] + SNKNeoGeo, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "SSD COMPANY LIMITED XaviXPORT")] + SSDCOMPANYLIMITEDXaviXPORT, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "ViewMaster Interactive Vision")] + ViewMasterInteractiveVision, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "V.Tech CreatiVision")] + VTechCreatiVision, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "V.Tech V.Smile")] + VTechVSmile, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "V.Tech Socrates")] + VTechSocrates, + + [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Worlds of Wonder ActionMax")] + WorldsOfWonderActionMax, + + // End of other console delimiter + MarkerOtherConsoleEnd, + */ + + #endregion + + #region Computers + + [System(Category = SystemCategory.Computer, LongName = "Acorn Archimedes", ShortName = "ARCH", RedumpOrgCode = "arch", HasCues = true, HasDat = true)] + AcornArchimedes, + + [System(Category = SystemCategory.Computer, LongName = "Apple Macintosh", ShortName = "MAC", RedumpOrgCode = "mac", HasCues = true, HasDat = true, HasSbi = true)] + AppleMacintosh, + + [System(Category = SystemCategory.Computer, LongName = "Commodore Amiga CD", ShortName = "ACD", RedumpOrgCode = "acd", HasCues = true, HasDat = true)] + CommodoreAmigaCD, + + [System(Category = SystemCategory.Computer, LongName = "Fujitsu FM Towns series", ShortName = "FMT", RedumpOrgCode = "fmt", HasCues = true, HasDat = true)] + FujitsuFMTownsseries, + + [System(Category = SystemCategory.Computer, LongName = "IBM PC compatible", ShortName = "PC", RedumpOrgCode = "pc", HasCues = true, HasDat = true, HasSbi = true)] + IBMPCcompatible, + + [System(Category = SystemCategory.Computer, LongName = "NEC PC-88 series", ShortName = "PC-88", RedumpOrgCode = "pc-88", HasCues = true, HasDat = true)] + NECPC88series, + + [System(Category = SystemCategory.Computer, LongName = "NEC PC-98 series", ShortName = "PC-98", RedumpOrgCode = "pc-98", HasCues = true, HasDat = true)] + NECPC98series, + + [System(Category = SystemCategory.Computer, LongName = "Sharp X68000", ShortName = "X68K", RedumpOrgCode = "x68k", HasCues = true, HasDat = true)] + SharpX68000, + + // End of computer section delimiter + MarkerComputerEnd, + + #endregion + + #region Arcade + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Amiga CUBO CD32")] + AmigaCUBOCD32, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "American Laser Games 3DO")] + AmericanLaserGames3DO, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Atari 3DO")] + Atari3DO, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Atronic")] + Atronic, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "AUSCOM System 1")] + AUSCOMSystem1, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Bally Game Magic")] + BallyGameMagic, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Capcom CP System III")] + CapcomCPSystemIII, + + [System(Category = SystemCategory.Arcade, LongName = "funworld Photo Play", ShortName = "FPP", RedumpOrgCode = "fpp", HasCues = true, HasDat = true)] + funworldPhotoPlay, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "FuRyu & Omron Purikura")] + FuRyuOmronPurikura, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Global VR PC-based Systems")] + GlobalVRVarious, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Global VR Vortek")] + GlobalVRVortek, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Global VR Vortek V3")] + GlobalVRVortekV3, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "ICE PC-based Hardware")] + ICEPCHardware, + + [System(Category = SystemCategory.Arcade, LongName = "Incredible Technologies Eagle", ShortName = "ITE", RedumpOrgCode = "ite", HasCues = true, HasDat = true)] + IncredibleTechnologiesEagle, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Incredible Technologies PC-based Systems")] + IncredibleTechnologiesVarious, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "JVL iTouch")] + JVLiTouch, + + [System(Category = SystemCategory.Arcade, LongName = "Konami e-Amusement", ShortName = "KEA", RedumpOrgCode = "kea", HasCues = true, HasDat = true)] + KonamieAmusement, + + [System(Category = SystemCategory.Arcade, LongName = "Konami FireBeat", ShortName = "KFB", RedumpOrgCode = "kfb", HasCues = true, HasDat = true)] + KonamiFireBeat, + + [System(Category = SystemCategory.Arcade, LongName = "Konami M2", ShortName = "KM2", RedumpOrgCode = "km2", IsBanned = true, HasCues = true, HasDat = true)] + KonamiM2, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Konami Python")] + KonamiPython, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Konami Python 2")] + KonamiPython2, + + [System(Category = SystemCategory.Arcade, LongName = "Konami System 573", ShortName = "KS573", RedumpOrgCode = "ks573", HasCues = true, HasDat = true)] + KonamiSystem573, + + [System(Category = SystemCategory.Arcade, LongName = "Konami System GV", ShortName = "KSGV", RedumpOrgCode = "ksgv", HasCues = true, HasDat = true)] + KonamiSystemGV, + + [System(Category = SystemCategory.Arcade, LongName = "Konami Twinkle", ShortName = "kt", RedumpOrgCode = "kt")] + KonamiTwinkle, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Konami PC-based Systems")] + KonamiVarious, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Merit Industries Boardwalk")] + MeritIndustriesBoardwalk, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Merit Industries MegaTouch Force")] + MeritIndustriesMegaTouchForce, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Merit Industries MegaTouch ION")] + MeritIndustriesMegaTouchION, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Merit Industries MegaTouch Maxx")] + MeritIndustriesMegaTouchMaxx, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Merit Industries MegaTouch XL")] + MeritIndustriesMegaTouchXL, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Namco Purikura")] + NamcoPurikura, + + [System(Category = SystemCategory.Arcade, LongName = "Namco · Sega · Nintendo Triforce", ShortName = "TRF", RedumpOrgCode = "trf", HasCues = true, HasDat = true)] + NamcoSegaNintendoTriforce, + + [System(Category = SystemCategory.Arcade, LongName = "Namco System 12", ShortName = "ns12", RedumpOrgCode = "ns12")] + NamcoSystem12, + + [System(Category = SystemCategory.Arcade, LongName = "Namco System 246 / System 256", ShortName = "NS246", RedumpOrgCode = "ns246", HasCues = true, HasDat = true)] + NamcoSystem246256, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "New Jatre CD-i")] + NewJatreCDi, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Nichibutsu High Rate System")] + NichibutsuHighRateSystem, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Nichibutsu Super CD")] + NichibutsuSuperCD, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Nichibutsu X-Rate System")] + NichibutsuXRateSystem, + + [System(Category = SystemCategory.Arcade, LongName = "Panasonic M2", ShortName = "M2", RedumpOrgCode = "m2", IsBanned = true, HasCues = true, HasDat = true)] + PanasonicM2, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "PhotoPlay PC-based Systems")] + PhotoPlayVarious, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Raw Thrills PC-based Systems")] + RawThrillsVarious, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Sega ALLS")] + SegaALLS, + + [System(Category = SystemCategory.Arcade, LongName = "Sega Chihiro", ShortName = "CHIHIRO", RedumpOrgCode = "chihiro", HasCues = true, HasDat = true)] + SegaChihiro, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Sega Europa-R")] + SegaEuropaR, + + [System(Category = SystemCategory.Arcade, LongName = "Sega Lindbergh", ShortName = "LINDBERGH", RedumpOrgCode = "lindbergh", HasDat = true)] + SegaLindbergh, + + [System(Category = SystemCategory.Arcade, LongName = "Sega Naomi", ShortName = "NAOMI", RedumpOrgCode = "naomi", HasCues = true, HasDat = true)] + SegaNaomi, + + [System(Category = SystemCategory.Arcade, LongName = "Sega Naomi 2", ShortName = "NAOMI2", RedumpOrgCode = "naomi2", HasCues = true, HasDat = true)] + SegaNaomi2, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Sega NAOMI Satellite Terminal PC")] + SegaNaomiSatelliteTerminalPC, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Sega Nu")] + SegaNu, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Sega Nu 1.1")] + SegaNu11, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Sega Nu 2")] + SegaNu2, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Sega Nu SX")] + SegaNuSX, + + [System(Category = SystemCategory.Arcade, LongName = "Sega RingEdge", ShortName = "SRE", RedumpOrgCode = "sre", HasDat = true)] + SegaRingEdge, + + [System(Category = SystemCategory.Arcade, LongName = "Sega RingEdge 2", ShortName = "SRE2", RedumpOrgCode = "sre2", HasDat = true)] + SegaRingEdge2, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Sega RingWide")] + SegaRingWide, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Sega System 32")] + SegaSystem32, + + [System(Category = SystemCategory.Arcade, LongName = "Sega Titan Video", ShortName = "stv", RedumpOrgCode = "stv")] + SegaTitanVideo, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Seibu CATS System")] + SeibuCATSSystem, + + [System(Category = SystemCategory.Arcade, LongName = "TAB-Austria Quizard", ShortName = "QUIZARD", RedumpOrgCode = "quizard", HasCues = true, HasDat = true)] + TABAustriaQuizard, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "Tsunami TsuMo Multi-Game Motion System")] + TsunamiTsuMoMultiGameMotionSystem, + + [System(Category = SystemCategory.Arcade, Available = false, LongName = "UltraCade PC-based Systems")] + UltraCade, + + // End of arcade section delimiter + MarkerArcadeEnd, + + #endregion + + #region Other + + [System(Category = SystemCategory.Other, LongName = "Audio CD", ShortName = "AUDIO-CD", RedumpOrgCode = "audio-cd", IsBanned = true, HasCues = true, HasDat = true)] + AudioCD, + + [System(Category = SystemCategory.Other, LongName = "BD-Video", ShortName = "BD-VIDEO", RedumpOrgCode = "bd-video", IsBanned = true, HasDat = true)] + BDVideo, + + [System(Category = SystemCategory.Other, Available = false, LongName = "DVD-Audio")] + DVDAudio, + + [System(Category = SystemCategory.Other, LongName = "DVD-Video", ShortName = "DVD-VIDEO", RedumpOrgCode = "dvd-video", IsBanned = true, HasDat = true)] + DVDVideo, + + [System(Category = SystemCategory.Other, LongName = "Enhanced CD", ShortName = "ENHANCED-CD", RedumpOrgCode = "enhanced-cd", IsBanned = true)] + EnhancedCD, + + [System(Category = SystemCategory.Other, LongName = "HD DVD-Video", ShortName = "HDDVD-VIDEO", RedumpOrgCode = "hddvd-video", IsBanned = true, HasDat = true)] + HDDVDVideo, + + [System(Category = SystemCategory.Other, LongName = "Navisoft Naviken 2.1", ShortName = "NAVI21", RedumpOrgCode = "navi21", IsBanned = true, HasCues = true, HasDat = true)] + NavisoftNaviken21, + + [System(Category = SystemCategory.Other, LongName = "Palm OS", ShortName = "PALM", RedumpOrgCode = "palm", HasCues = true, HasDat = true)] + PalmOS, + + [System(Category = SystemCategory.Other, LongName = "Photo CD", ShortName = "PHOTO-CD", RedumpOrgCode = "photo-cd", HasCues = true, HasDat = true)] + PhotoCD, + + [System(Category = SystemCategory.Other, LongName = "PlayStation GameShark Updates", ShortName = "PSXGS", RedumpOrgCode = "psxgs", HasCues = true, HasDat = true)] + PlayStationGameSharkUpdates, + + [System(Category = SystemCategory.Other, LongName = "Pocket PC", ShortName = "PPC", RedumpOrgCode = "ppc", HasCues = true, HasDat = true)] + PocketPC, + + [System(Category = SystemCategory.Other, Available = false, LongName = "Psion")] + Psion, + + [System(Category = SystemCategory.Other, Available = false, LongName = "Rainbow Disc")] + RainbowDisc, + + [System(Category = SystemCategory.Other, LongName = "Sega Prologue 21 Multimedia Karaoke System", ShortName = "SP21", RedumpOrgCode = "sp21", HasCues = true, HasDat = true)] + SegaPrologue21MultimediaKaraokeSystem, + + [System(Category = SystemCategory.Other, Available = false, LongName = "Sharp Zaurus")] + SharpZaurus, + + [System(Category = SystemCategory.Other, Available = false, LongName = "Sony Electronic Book")] + SonyElectronicBook, + + [System(Category = SystemCategory.Other, Available = false, LongName = "Super Audio CD")] + SuperAudioCD, + + [System(Category = SystemCategory.Other, LongName = "Tao iKTV", ShortName = "IKTV", RedumpOrgCode = "iktv")] + TaoiKTV, + + [System(Category = SystemCategory.Other, LongName = "Tomy Kiss-Site", ShortName = "KSITE", RedumpOrgCode = "ksite", HasCues = true, HasDat = true)] + TomyKissSite, + + [System(Category = SystemCategory.Other, LongName = "Video CD", ShortName = "VCD", RedumpOrgCode = "vcd", IsBanned = true, HasCues = true, HasDat = true)] + VideoCD, + + // End of other section delimiter + MarkerOtherEnd, + + #endregion + } + /// /// List of all known regions /// @@ -1924,149 +2524,149 @@ namespace SabreTools.RedumpLib.Data #region B - [RegionCode(LongName = "Bahamas", ShortName="bs", RedumpOrgCode="Bs")] + [RegionCode(LongName = "Bahamas", ShortName = "bs", RedumpOrgCode = "Bs")] Bahamas, - [RegionCode(LongName = "Bahrain", ShortName="bh", RedumpOrgCode="Bh")] + [RegionCode(LongName = "Bahrain", ShortName = "bh", RedumpOrgCode = "Bh")] Bahrain, - [RegionCode(LongName = "Bangladesh", ShortName="bd", RedumpOrgCode="Bd")] + [RegionCode(LongName = "Bangladesh", ShortName = "bd", RedumpOrgCode = "Bd")] Bangladesh, - [RegionCode(LongName = "Barbados", ShortName="bb", RedumpOrgCode="Bb")] + [RegionCode(LongName = "Barbados", ShortName = "bb", RedumpOrgCode = "Bb")] Barbados, - [RegionCode(LongName = "Belarus", ShortName="by", RedumpOrgCode="By")] + [RegionCode(LongName = "Belarus", ShortName = "by", RedumpOrgCode = "By")] Belarus, - [RegionCode(LongName = "Belgium", ShortName="be", RedumpOrgCode="Be")] + [RegionCode(LongName = "Belgium", ShortName = "be", RedumpOrgCode = "Be")] Belgium, - [RegionCode(LongName = "Belize", ShortName="bz", RedumpOrgCode="Bz")] + [RegionCode(LongName = "Belize", ShortName = "bz", RedumpOrgCode = "Bz")] Belize, - [RegionCode(LongName = "Benin", ShortName="bj", RedumpOrgCode="Bj")] + [RegionCode(LongName = "Benin", ShortName = "bj", RedumpOrgCode = "Bj")] Benin, - [RegionCode(LongName = "Bermuda", ShortName="bm", RedumpOrgCode="Bm")] + [RegionCode(LongName = "Bermuda", ShortName = "bm", RedumpOrgCode = "Bm")] Bermuda, - [RegionCode(LongName = "Bhutan", ShortName="bt", RedumpOrgCode="Bt")] + [RegionCode(LongName = "Bhutan", ShortName = "bt", RedumpOrgCode = "Bt")] Bhutan, - [RegionCode(LongName = "Bolivia", ShortName="bo", RedumpOrgCode="Bo")] + [RegionCode(LongName = "Bolivia", ShortName = "bo", RedumpOrgCode = "Bo")] Bolivia, - [RegionCode(LongName = "Bonaire, Sint Eustatius and Saba", ShortName="bq", RedumpOrgCode="Bq")] + [RegionCode(LongName = "Bonaire, Sint Eustatius and Saba", ShortName = "bq", RedumpOrgCode = "Bq")] Bonaire, - [RegionCode(LongName = "Bosnia and Herzegovina", ShortName="ba", RedumpOrgCode="Ba")] + [RegionCode(LongName = "Bosnia and Herzegovina", ShortName = "ba", RedumpOrgCode = "Ba")] BosniaAndHerzegovina, - [RegionCode(LongName = "Botswana", ShortName="bw", RedumpOrgCode="Bw")] + [RegionCode(LongName = "Botswana", ShortName = "bw", RedumpOrgCode = "Bw")] Botswana, - [RegionCode(LongName = "Bouvet Island", ShortName="bv", RedumpOrgCode="Bv")] + [RegionCode(LongName = "Bouvet Island", ShortName = "bv", RedumpOrgCode = "Bv")] BouvetIsland, - [RegionCode(LongName = "Brazil", ShortName="br", RedumpOrgCode="B")] + [RegionCode(LongName = "Brazil", ShortName = "br", RedumpOrgCode = "B")] Brazil, - [RegionCode(LongName = "British Indian Ocean Territory", ShortName="io", RedumpOrgCode="Io")] + [RegionCode(LongName = "British Indian Ocean Territory", ShortName = "io", RedumpOrgCode = "Io")] BritishIndianOceanTerritory, - [RegionCode(LongName = "Brunei Darussalam", ShortName="bn", RedumpOrgCode="Bn")] + [RegionCode(LongName = "Brunei Darussalam", ShortName = "bn", RedumpOrgCode = "Bn")] BruneiDarussalam, - [RegionCode(LongName = "Bulgaria", ShortName="bg", RedumpOrgCode="Bg")] + [RegionCode(LongName = "Bulgaria", ShortName = "bg", RedumpOrgCode = "Bg")] Bulgaria, - [RegionCode(LongName = "Burkina Faso", ShortName="bf", RedumpOrgCode="Bf")] + [RegionCode(LongName = "Burkina Faso", ShortName = "bf", RedumpOrgCode = "Bf")] BurkinaFaso, - [RegionCode(LongName = "Burundi", ShortName="bi", RedumpOrgCode="Bi")] + [RegionCode(LongName = "Burundi", ShortName = "bi", RedumpOrgCode = "Bi")] Burundi, #endregion #region C - [RegionCode(LongName = "Cabo Verde", ShortName="cv", RedumpOrgCode="Cv")] + [RegionCode(LongName = "Cabo Verde", ShortName = "cv", RedumpOrgCode = "Cv")] CaboVerde, - [RegionCode(LongName = "Cambodia", ShortName="kh", RedumpOrgCode="Kh")] + [RegionCode(LongName = "Cambodia", ShortName = "kh", RedumpOrgCode = "Kh")] Cambodia, - [RegionCode(LongName = "Cameroon", ShortName="cm", RedumpOrgCode="Cm")] + [RegionCode(LongName = "Cameroon", ShortName = "cm", RedumpOrgCode = "Cm")] Cameroon, - [RegionCode(LongName = "Canada", ShortName="ca", RedumpOrgCode="Ca")] + [RegionCode(LongName = "Canada", ShortName = "ca", RedumpOrgCode = "Ca")] Canada, - [RegionCode(LongName = "Canary Islands", ShortName="ic", RedumpOrgCode="Ic")] + [RegionCode(LongName = "Canary Islands", ShortName = "ic", RedumpOrgCode = "Ic")] CanaryIslands, - [RegionCode(LongName = "Cayman Islands", ShortName="ky", RedumpOrgCode="Ky")] + [RegionCode(LongName = "Cayman Islands", ShortName = "ky", RedumpOrgCode = "Ky")] CaymanIslands, - [RegionCode(LongName = "Central African Republic", ShortName="cf", RedumpOrgCode="Cf")] + [RegionCode(LongName = "Central African Republic", ShortName = "cf", RedumpOrgCode = "Cf")] CentralAfricanRepublic, - [RegionCode(LongName = "Ceuta, Melilla", ShortName="ea", RedumpOrgCode="Ea")] + [RegionCode(LongName = "Ceuta, Melilla", ShortName = "ea", RedumpOrgCode = "Ea")] CeutaMelilla, - [RegionCode(LongName = "Chad", ShortName="td", RedumpOrgCode="Td")] + [RegionCode(LongName = "Chad", ShortName = "td", RedumpOrgCode = "Td")] Chad, - [RegionCode(LongName = "Chile", ShortName="cl", RedumpOrgCode="Cl")] + [RegionCode(LongName = "Chile", ShortName = "cl", RedumpOrgCode = "Cl")] Chile, - [RegionCode(LongName = "China", ShortName="cn", RedumpOrgCode="C")] + [RegionCode(LongName = "China", ShortName = "cn", RedumpOrgCode = "C")] China, - [RegionCode(LongName = "Christmas Island", ShortName="cx", RedumpOrgCode="Cx")] + [RegionCode(LongName = "Christmas Island", ShortName = "cx", RedumpOrgCode = "Cx")] ChristmasIsland, - [RegionCode(LongName = "Clipperton Island", ShortName="cp", RedumpOrgCode="Cp")] + [RegionCode(LongName = "Clipperton Island", ShortName = "cp", RedumpOrgCode = "Cp")] ClippertonIsland, - [RegionCode(LongName = "Cocos (Keeling) Islands", ShortName="cc", RedumpOrgCode="Cc")] + [RegionCode(LongName = "Cocos (Keeling) Islands", ShortName = "cc", RedumpOrgCode = "Cc")] CocosIslands, - [RegionCode(LongName = "Colombia", ShortName="co", RedumpOrgCode="Co")] + [RegionCode(LongName = "Colombia", ShortName = "co", RedumpOrgCode = "Co")] Colombia, - [RegionCode(LongName = "Comoros", ShortName="km", RedumpOrgCode="Km")] + [RegionCode(LongName = "Comoros", ShortName = "km", RedumpOrgCode = "Km")] Comoros, - [RegionCode(LongName = "Congo", ShortName="cg", RedumpOrgCode="Cg")] + [RegionCode(LongName = "Congo", ShortName = "cg", RedumpOrgCode = "Cg")] Congo, - [RegionCode(LongName = "Cook Islands", ShortName="ck", RedumpOrgCode="Ck")] + [RegionCode(LongName = "Cook Islands", ShortName = "ck", RedumpOrgCode = "Ck")] CookIslands, - [RegionCode(LongName = "Costa Rica", ShortName="cr", RedumpOrgCode="Cr")] + [RegionCode(LongName = "Costa Rica", ShortName = "cr", RedumpOrgCode = "Cr")] CostaRica, - [RegionCode(LongName = "Côte d'Ivoire", ShortName="ci", RedumpOrgCode="Ci")] + [RegionCode(LongName = "Côte d'Ivoire", ShortName = "ci", RedumpOrgCode = "Ci")] CoteDIvoire, - [RegionCode(LongName = "Croatia", ShortName="hr", RedumpOrgCode="Hr")] + [RegionCode(LongName = "Croatia", ShortName = "hr", RedumpOrgCode = "Hr")] Croatia, - [RegionCode(LongName = "Cuba", ShortName="cu", RedumpOrgCode="Cu")] + [RegionCode(LongName = "Cuba", ShortName = "cu", RedumpOrgCode = "Cu")] Cuba, - [RegionCode(LongName = "Curaçao", ShortName="cw", RedumpOrgCode="Cw")] + [RegionCode(LongName = "Curaçao", ShortName = "cw", RedumpOrgCode = "Cw")] Curacao, - [RegionCode(LongName = "Cyprus", ShortName="cy", RedumpOrgCode="Cy")] + [RegionCode(LongName = "Cyprus", ShortName = "cy", RedumpOrgCode = "Cy")] Cyprus, - [RegionCode(LongName = "Czechia", ShortName="cz", RedumpOrgCode="Cz")] + [RegionCode(LongName = "Czechia", ShortName = "cz", RedumpOrgCode = "Cz")] Czechia, - [RegionCode(LongName = "Czechoslovakia", ShortName="cs", RedumpOrgCode="Cs")] + [RegionCode(LongName = "Czechoslovakia", ShortName = "cs", RedumpOrgCode = "Cs")] Czechoslovakia, #endregion @@ -2074,50 +2674,50 @@ namespace SabreTools.RedumpLib.Data #region D // Zaire was "Zr" - [RegionCode(LongName = "Democratic Republic of the Congo (Zaire)", ShortName="cd", RedumpOrgCode="Cd")] + [RegionCode(LongName = "Democratic Republic of the Congo (Zaire)", ShortName = "cd", RedumpOrgCode = "Cd")] DemocraticRepublicOfTheCongo, - [RegionCode(LongName = "Denmark", ShortName="dk", RedumpOrgCode="Dk")] + [RegionCode(LongName = "Denmark", ShortName = "dk", RedumpOrgCode = "Dk")] Denmark, - [RegionCode(LongName = "Diego Garcia", ShortName="dg", RedumpOrgCode="Dg")] + [RegionCode(LongName = "Diego Garcia", ShortName = "dg", RedumpOrgCode = "Dg")] DiegoGarcia, - [RegionCode(LongName = "Djibouti", ShortName="dj", RedumpOrgCode="Dj")] + [RegionCode(LongName = "Djibouti", ShortName = "dj", RedumpOrgCode = "Dj")] Djibouti, - [RegionCode(LongName = "Dominica", ShortName="dm", RedumpOrgCode="Dm")] + [RegionCode(LongName = "Dominica", ShortName = "dm", RedumpOrgCode = "Dm")] Dominica, - [RegionCode(LongName = "Dominican Republic", ShortName="do", RedumpOrgCode="Do")] + [RegionCode(LongName = "Dominican Republic", ShortName = "do", RedumpOrgCode = "Do")] DominicanRepublic, #endregion #region E - [RegionCode(LongName = "Ecuador", ShortName="ec", RedumpOrgCode="Ec")] + [RegionCode(LongName = "Ecuador", ShortName = "ec", RedumpOrgCode = "Ec")] Ecuador, - [RegionCode(LongName = "Egypt", ShortName="eg", RedumpOrgCode="Eg")] + [RegionCode(LongName = "Egypt", ShortName = "eg", RedumpOrgCode = "Eg")] Egypt, - [RegionCode(LongName = "El Salvador", ShortName="sv", RedumpOrgCode="Sv")] + [RegionCode(LongName = "El Salvador", ShortName = "sv", RedumpOrgCode = "Sv")] ElSalvador, - [RegionCode(LongName = "Equatorial Guinea", ShortName="gq", RedumpOrgCode="Gq")] + [RegionCode(LongName = "Equatorial Guinea", ShortName = "gq", RedumpOrgCode = "Gq")] EquatorialGuinea, - [RegionCode(LongName = "Eritrea", ShortName="er", RedumpOrgCode="Er")] + [RegionCode(LongName = "Eritrea", ShortName = "er", RedumpOrgCode = "Er")] Eritrea, - [RegionCode(LongName = "Estonia", ShortName="ee", RedumpOrgCode="Ee")] + [RegionCode(LongName = "Estonia", ShortName = "ee", RedumpOrgCode = "Ee")] Estonia, - [RegionCode(LongName = "Eswatini", ShortName="sz", RedumpOrgCode="Sz")] + [RegionCode(LongName = "Eswatini", ShortName = "sz", RedumpOrgCode = "Sz")] Eswatini, - [RegionCode(LongName = "Ethiopia", ShortName="et", RedumpOrgCode="Et")] + [RegionCode(LongName = "Ethiopia", ShortName = "et", RedumpOrgCode = "Et")] Ethiopia, // Commented out to avoid confusion @@ -2132,646 +2732,669 @@ namespace SabreTools.RedumpLib.Data #region F - [RegionCode(LongName = "Falkland Islands (Malvinas)", ShortName="fk", RedumpOrgCode="Fk")] + [RegionCode(LongName = "Falkland Islands (Malvinas)", ShortName = "fk", RedumpOrgCode = "Fk")] FalklandIslands, - [RegionCode(LongName = "Faroe Islands", ShortName="fo", RedumpOrgCode="Fo")] + [RegionCode(LongName = "Faroe Islands", ShortName = "fo", RedumpOrgCode = "Fo")] FaroeIslands, - [RegionCode(LongName = "Federated States of Micronesia", ShortName="fm", RedumpOrgCode="Fm")] + [RegionCode(LongName = "Federated States of Micronesia", ShortName = "fm", RedumpOrgCode = "Fm")] FederatedStatesOfMicronesia, - [RegionCode(LongName = "Fiji", ShortName="fj", RedumpOrgCode="Fj")] + [RegionCode(LongName = "Fiji", ShortName = "fj", RedumpOrgCode = "Fj")] Fiji, // Formerly "Sf" - [RegionCode(LongName = "Finland", ShortName="fi", RedumpOrgCode="Fi")] + [RegionCode(LongName = "Finland", ShortName = "fi", RedumpOrgCode = "Fi")] Finland, - [RegionCode(LongName = "France", ShortName="fr", RedumpOrgCode="F")] + [RegionCode(LongName = "France", ShortName = "fr", RedumpOrgCode = "F")] France, // Commented out to avoid confusion //[RegionCode(LongName = "France, Metropolitan", ShortName="fx", RedumpOrgCode="Fx")] //FranceMetropolitan, - [RegionCode(LongName = "French Guiana", ShortName="gf", RedumpOrgCode="Gf")] + [RegionCode(LongName = "French Guiana", ShortName = "gf", RedumpOrgCode = "Gf")] FrenchGuiana, - [RegionCode(LongName = "French Polynesia", ShortName="pf", RedumpOrgCode="Pf")] + [RegionCode(LongName = "French Polynesia", ShortName = "pf", RedumpOrgCode = "Pf")] FrenchPolynesia, - [RegionCode(LongName = "French Southern Territories", ShortName="tf", RedumpOrgCode="Tf")] + [RegionCode(LongName = "French Southern Territories", ShortName = "tf", RedumpOrgCode = "Tf")] FrenchSouthernTerritories, #endregion #region G - [RegionCode(LongName = "Gabon", ShortName="ga", RedumpOrgCode="Ga")] + [RegionCode(LongName = "Gabon", ShortName = "ga", RedumpOrgCode = "Ga")] Gabon, - [RegionCode(LongName = "Gambia", ShortName="gm", RedumpOrgCode="Gm")] + [RegionCode(LongName = "Gambia", ShortName = "gm", RedumpOrgCode = "Gm")] Gambia, - [RegionCode(LongName = "Georgia", ShortName="ge", RedumpOrgCode="Ge")] + [RegionCode(LongName = "Georgia", ShortName = "ge", RedumpOrgCode = "Ge")] Georgia, - [RegionCode(LongName = "Germany", ShortName="de", RedumpOrgCode="G")] + [RegionCode(LongName = "Germany", ShortName = "de", RedumpOrgCode = "G")] Germany, - [RegionCode(LongName = "Ghana", ShortName="gh", RedumpOrgCode="Gh")] + [RegionCode(LongName = "Ghana", ShortName = "gh", RedumpOrgCode = "Gh")] Ghana, - [RegionCode(LongName = "Gibraltar", ShortName="gi", RedumpOrgCode="Gi")] + [RegionCode(LongName = "Gibraltar", ShortName = "gi", RedumpOrgCode = "Gi")] Gibraltar, - [RegionCode(LongName = "Greece", ShortName="gr", RedumpOrgCode="Gr")] + [RegionCode(LongName = "Greece", ShortName = "gr", RedumpOrgCode = "Gr")] Greece, - [RegionCode(LongName = "Greenland", ShortName="gl", RedumpOrgCode="Gl")] + [RegionCode(LongName = "Greenland", ShortName = "gl", RedumpOrgCode = "Gl")] Greenland, - [RegionCode(LongName = "Grenada", ShortName="gd", RedumpOrgCode="Gd")] + [RegionCode(LongName = "Grenada", ShortName = "gd", RedumpOrgCode = "Gd")] Grenada, - [RegionCode(LongName = "Guadeloupe", ShortName="gp", RedumpOrgCode="Gp")] + [RegionCode(LongName = "Guadeloupe", ShortName = "gp", RedumpOrgCode = "Gp")] Guadeloupe, - [RegionCode(LongName = "Guam", ShortName="gu", RedumpOrgCode="Gu")] + [RegionCode(LongName = "Guam", ShortName = "gu", RedumpOrgCode = "Gu")] Guam, - [RegionCode(LongName = "Guatemala", ShortName="gt", RedumpOrgCode="Gt")] + [RegionCode(LongName = "Guatemala", ShortName = "gt", RedumpOrgCode = "Gt")] Guatemala, - [RegionCode(LongName = "Guernsey", ShortName="gg", RedumpOrgCode="Gg")] + [RegionCode(LongName = "Guernsey", ShortName = "gg", RedumpOrgCode = "Gg")] Guernsey, - [RegionCode(LongName = "Guinea", ShortName="gn", RedumpOrgCode="Gn")] + [RegionCode(LongName = "Guinea", ShortName = "gn", RedumpOrgCode = "Gn")] Guinea, - [RegionCode(LongName = "Guinea-Bissau", ShortName="gw", RedumpOrgCode="Gw")] + [RegionCode(LongName = "Guinea-Bissau", ShortName = "gw", RedumpOrgCode = "Gw")] GuineaBissau, - [RegionCode(LongName = "Guyana", ShortName="gy", RedumpOrgCode="Gy")] + [RegionCode(LongName = "Guyana", ShortName = "gy", RedumpOrgCode = "Gy")] Guyana, #endregion #region H - [RegionCode(LongName = "Haiti", ShortName="ht", RedumpOrgCode="Ht")] + [RegionCode(LongName = "Haiti", ShortName = "ht", RedumpOrgCode = "Ht")] Haiti, - [RegionCode(LongName = "Heard Island and McDonald Islands", ShortName="hm", RedumpOrgCode="Hm")] + [RegionCode(LongName = "Heard Island and McDonald Islands", ShortName = "hm", RedumpOrgCode = "Hm")] HeardIslandAndMcDonaldIslands, - [RegionCode(LongName = "Holy See (Vatican City)", ShortName="va", RedumpOrgCode="Va")] + [RegionCode(LongName = "Holy See (Vatican City)", ShortName = "va", RedumpOrgCode = "Va")] HolySee, - [RegionCode(LongName = "Honduras", ShortName="hn", RedumpOrgCode="Hn")] + [RegionCode(LongName = "Honduras", ShortName = "hn", RedumpOrgCode = "Hn")] Honduras, - [RegionCode(LongName = "Hong Kong", ShortName="hk", RedumpOrgCode="Hk")] + [RegionCode(LongName = "Hong Kong", ShortName = "hk", RedumpOrgCode = "Hk")] HongKong, - [RegionCode(LongName = "Hungary", ShortName="hu", RedumpOrgCode="H")] + [RegionCode(LongName = "Hungary", ShortName = "hu", RedumpOrgCode = "H")] Hungary, #endregion #region I - [RegionCode(LongName = "Iceland", ShortName="is", RedumpOrgCode="Is")] + [RegionCode(LongName = "Iceland", ShortName = "is", RedumpOrgCode = "Is")] Iceland, - [RegionCode(LongName = "India", ShortName="in", RedumpOrgCode="In")] + [RegionCode(LongName = "India", ShortName = "in", RedumpOrgCode = "In")] India, - [RegionCode(LongName = "Indonesia", ShortName="id", RedumpOrgCode="Id")] + [RegionCode(LongName = "Indonesia", ShortName = "id", RedumpOrgCode = "Id")] Indonesia, - [RegionCode(LongName = "Iran", ShortName="ir", RedumpOrgCode="Ir")] + [RegionCode(LongName = "Iran", ShortName = "ir", RedumpOrgCode = "Ir")] Iran, - [RegionCode(LongName = "Iraq", ShortName="iq", RedumpOrgCode="Iq")] + [RegionCode(LongName = "Iraq", ShortName = "iq", RedumpOrgCode = "Iq")] Iraq, - [RegionCode(LongName = "Ireland", ShortName="ie", RedumpOrgCode="Ie")] + [RegionCode(LongName = "Ireland", ShortName = "ie", RedumpOrgCode = "Ie")] Ireland, - [RegionCode(LongName = "Island of Sark", ShortName="cq", RedumpOrgCode="Cq")] + [RegionCode(LongName = "Island of Sark", ShortName = "cq", RedumpOrgCode = "Cq")] IslandOfSark, - [RegionCode(LongName = "Isle of Man", ShortName="im", RedumpOrgCode="Im")] + [RegionCode(LongName = "Isle of Man", ShortName = "im", RedumpOrgCode = "Im")] IsleOfMan, - [RegionCode(LongName = "Israel", ShortName="il", RedumpOrgCode="Il")] + [RegionCode(LongName = "Israel", ShortName = "il", RedumpOrgCode = "Il")] Israel, - [RegionCode(LongName = "Italy", ShortName="it", RedumpOrgCode="I")] + [RegionCode(LongName = "Italy", ShortName = "it", RedumpOrgCode = "I")] Italy, #endregion #region J - [RegionCode(LongName = "Jamaica", ShortName="jm", RedumpOrgCode="Jm")] + [RegionCode(LongName = "Jamaica", ShortName = "jm", RedumpOrgCode = "Jm")] Jamaica, - [RegionCode(LongName = "Japan", ShortName="jp", RedumpOrgCode="J")] + [RegionCode(LongName = "Japan", ShortName = "jp", RedumpOrgCode = "J")] Japan, - [RegionCode(LongName = "Jersey", ShortName="je", RedumpOrgCode="Je")] + [RegionCode(LongName = "Jersey", ShortName = "je", RedumpOrgCode = "Je")] Jersey, - [RegionCode(LongName = "Jordan", ShortName="jo", RedumpOrgCode="Jo")] + [RegionCode(LongName = "Jordan", ShortName = "jo", RedumpOrgCode = "Jo")] Jordan, #endregion #region K - [RegionCode(LongName = "Kazakhstan", ShortName="kz", RedumpOrgCode="Kz")] + [RegionCode(LongName = "Kazakhstan", ShortName = "kz", RedumpOrgCode = "Kz")] Kazakhstan, - [RegionCode(LongName = "Kenya", ShortName="ke", RedumpOrgCode="Ke")] + [RegionCode(LongName = "Kenya", ShortName = "ke", RedumpOrgCode = "Ke")] Kenya, - [RegionCode(LongName = "Kiribati", ShortName="ki", RedumpOrgCode="Ki")] + [RegionCode(LongName = "Kiribati", ShortName = "ki", RedumpOrgCode = "Ki")] Kiribati, - [RegionCode(LongName = "Korea (Democratic People's Republic of Korea)", ShortName="kp", RedumpOrgCode="Kp")] + [RegionCode(LongName = "Korea (Democratic People's Republic of Korea)", ShortName = "kp", RedumpOrgCode = "Kp")] NorthKorea, - [RegionCode(LongName = "Korea (Republic of Korea)", ShortName="kr", RedumpOrgCode="K")] + [RegionCode(LongName = "Korea (Republic of Korea)", ShortName = "kr", RedumpOrgCode = "K")] SouthKorea, - [RegionCode(LongName = "Kuwait", ShortName="kw", RedumpOrgCode="Kw")] + [RegionCode(LongName = "Kuwait", ShortName = "kw", RedumpOrgCode = "Kw")] Kuwait, - [RegionCode(LongName = "Kyrgyzstan", ShortName="kg", RedumpOrgCode="Kg")] + [RegionCode(LongName = "Kyrgyzstan", ShortName = "kg", RedumpOrgCode = "Kg")] Kyrgyzstan, #endregion #region L - [RegionCode(LongName = "(Laos) Lao People's Democratic Republic", ShortName="la", RedumpOrgCode="La")] + [RegionCode(LongName = "(Laos) Lao People's Democratic Republic", ShortName = "la", RedumpOrgCode = "La")] Laos, - [RegionCode(LongName = "Latvia", ShortName="lv", RedumpOrgCode="Lv")] + [RegionCode(LongName = "Latvia", ShortName = "lv", RedumpOrgCode = "Lv")] Latvia, - [RegionCode(LongName = "Lebanon", ShortName="lb", RedumpOrgCode="Lb")] + [RegionCode(LongName = "Lebanon", ShortName = "lb", RedumpOrgCode = "Lb")] Lebanon, - [RegionCode(LongName = "Lesotho", ShortName="ls", RedumpOrgCode="Ls")] + [RegionCode(LongName = "Lesotho", ShortName = "ls", RedumpOrgCode = "Ls")] Lesotho, - [RegionCode(LongName = "Liberia", ShortName="lr", RedumpOrgCode="Lr")] + [RegionCode(LongName = "Liberia", ShortName = "lr", RedumpOrgCode = "Lr")] Liberia, - [RegionCode(LongName = "Libya", ShortName="ly", RedumpOrgCode="Ly")] + [RegionCode(LongName = "Libya", ShortName = "ly", RedumpOrgCode = "Ly")] Libya, - [RegionCode(LongName = "Liechtenstein", ShortName="li", RedumpOrgCode="Li")] + [RegionCode(LongName = "Liechtenstein", ShortName = "li", RedumpOrgCode = "Li")] Liechtenstein, - [RegionCode(LongName = "Lithuania", ShortName="lt", RedumpOrgCode="Lt")] + [RegionCode(LongName = "Lithuania", ShortName = "lt", RedumpOrgCode = "Lt")] Lithuania, - [RegionCode(LongName = "Luxembourg", ShortName="lu", RedumpOrgCode="Lu")] + [RegionCode(LongName = "Luxembourg", ShortName = "lu", RedumpOrgCode = "Lu")] Luxembourg, #endregion #region M - [RegionCode(LongName = "Macao", ShortName="mo", RedumpOrgCode="Mo")] + [RegionCode(LongName = "Macao", ShortName = "mo", RedumpOrgCode = "Mo")] Macao, - [RegionCode(LongName = "Madagascar", ShortName="mg", RedumpOrgCode="Mg")] + [RegionCode(LongName = "Madagascar", ShortName = "mg", RedumpOrgCode = "Mg")] Madagascar, - [RegionCode(LongName = "Malawi", ShortName="mw", RedumpOrgCode="Mw")] + [RegionCode(LongName = "Malawi", ShortName = "mw", RedumpOrgCode = "Mw")] Malawi, - [RegionCode(LongName = "Malaysia", ShortName="my", RedumpOrgCode="My")] + [RegionCode(LongName = "Malaysia", ShortName = "my", RedumpOrgCode = "My")] Malaysia, - [RegionCode(LongName = "Maldives", ShortName="mv", RedumpOrgCode="Mv")] + [RegionCode(LongName = "Maldives", ShortName = "mv", RedumpOrgCode = "Mv")] Maldives, - [RegionCode(LongName = "Mali", ShortName="ml", RedumpOrgCode="Ml")] + [RegionCode(LongName = "Mali", ShortName = "ml", RedumpOrgCode = "Ml")] Mali, - [RegionCode(LongName = "Malta", ShortName="mt", RedumpOrgCode="Mt")] + [RegionCode(LongName = "Malta", ShortName = "mt", RedumpOrgCode = "Mt")] Malta, - [RegionCode(LongName = "Marshall Islands", ShortName="mh", RedumpOrgCode="Mh")] + [RegionCode(LongName = "Marshall Islands", ShortName = "mh", RedumpOrgCode = "Mh")] MarshallIslands, - [RegionCode(LongName = "Martinique", ShortName="mq", RedumpOrgCode="Mq")] + [RegionCode(LongName = "Martinique", ShortName = "mq", RedumpOrgCode = "Mq")] Martinique, - [RegionCode(LongName = "Mauritania", ShortName="mr", RedumpOrgCode="Mr")] + [RegionCode(LongName = "Mauritania", ShortName = "mr", RedumpOrgCode = "Mr")] Mauritania, - [RegionCode(LongName = "Mauritius", ShortName="mu", RedumpOrgCode="Mu")] + [RegionCode(LongName = "Mauritius", ShortName = "mu", RedumpOrgCode = "Mu")] Mauritius, - [RegionCode(LongName = "Mayotte", ShortName="yt", RedumpOrgCode="Yt")] + [RegionCode(LongName = "Mayotte", ShortName = "yt", RedumpOrgCode = "Yt")] Mayotte, - [RegionCode(LongName = "Mexico", ShortName="mx", RedumpOrgCode="Mx")] + [RegionCode(LongName = "Mexico", ShortName = "mx", RedumpOrgCode = "Mx")] Mexico, - [RegionCode(LongName = "Monaco", ShortName="mc", RedumpOrgCode="Mc")] + [RegionCode(LongName = "Monaco", ShortName = "mc", RedumpOrgCode = "Mc")] Monaco, - [RegionCode(LongName = "Mongolia", ShortName="mn", RedumpOrgCode="Mn")] + [RegionCode(LongName = "Mongolia", ShortName = "mn", RedumpOrgCode = "Mn")] Mongolia, - [RegionCode(LongName = "Montenegro", ShortName="me", RedumpOrgCode="Me")] + [RegionCode(LongName = "Montenegro", ShortName = "me", RedumpOrgCode = "Me")] Montenegro, - [RegionCode(LongName = "Montserrat", ShortName="ms", RedumpOrgCode="Ms")] + [RegionCode(LongName = "Montserrat", ShortName = "ms", RedumpOrgCode = "Ms")] Montserrat, - [RegionCode(LongName = "Morocco", ShortName="ma", RedumpOrgCode="Ma")] + [RegionCode(LongName = "Morocco", ShortName = "ma", RedumpOrgCode = "Ma")] Morocco, - [RegionCode(LongName = "Mozambique", ShortName="mz", RedumpOrgCode="Mz")] + [RegionCode(LongName = "Mozambique", ShortName = "mz", RedumpOrgCode = "Mz")] Mozambique, // Burma was "Bu" - [RegionCode(LongName = "Myanmar (Burma)", ShortName="mm", RedumpOrgCode="Mm")] + [RegionCode(LongName = "Myanmar (Burma)", ShortName = "mm", RedumpOrgCode = "Mm")] Myanmar, #endregion #region N - [RegionCode(LongName = "Namibia", ShortName="na", RedumpOrgCode="Na")] + [RegionCode(LongName = "Namibia", ShortName = "na", RedumpOrgCode = "Na")] Namibia, - [RegionCode(LongName = "Nauru", ShortName="nr", RedumpOrgCode="Nr")] + [RegionCode(LongName = "Nauru", ShortName = "nr", RedumpOrgCode = "Nr")] Nauru, - [RegionCode(LongName = "Nepal", ShortName="np", RedumpOrgCode="Np")] + [RegionCode(LongName = "Nepal", ShortName = "np", RedumpOrgCode = "Np")] Nepal, - [RegionCode(LongName = "Netherlands", ShortName="nl", RedumpOrgCode="N")] + [RegionCode(LongName = "Netherlands", ShortName = "nl", RedumpOrgCode = "N")] Netherlands, - [RegionCode(LongName = "Netherlands Antilles", ShortName="an", RedumpOrgCode="An")] + [RegionCode(LongName = "Netherlands Antilles", ShortName = "an", RedumpOrgCode = "An")] NetherlandsAntilles, // Commented out to avoid confusion //[RegionCode(LongName = "Neutral Zone", ShortName="nt", RedumpOrgCode="Nt")] //NeutralZone, - [RegionCode(LongName = "New Caledonia", ShortName="nc", RedumpOrgCode="Nc")] + [RegionCode(LongName = "New Caledonia", ShortName = "nc", RedumpOrgCode = "Nc")] NewCaledonia, - [RegionCode(LongName = "New Zealand", ShortName="nz", RedumpOrgCode="Nz")] + [RegionCode(LongName = "New Zealand", ShortName = "nz", RedumpOrgCode = "Nz")] NewZealand, - [RegionCode(LongName = "Nicaragua", ShortName="ni", RedumpOrgCode="Ni")] + [RegionCode(LongName = "Nicaragua", ShortName = "ni", RedumpOrgCode = "Ni")] Nicaragua, - [RegionCode(LongName = "Niger", ShortName="ne", RedumpOrgCode="Ne")] + [RegionCode(LongName = "Niger", ShortName = "ne", RedumpOrgCode = "Ne")] Niger, - [RegionCode(LongName = "Nigeria", ShortName="ng", RedumpOrgCode="Ng")] + [RegionCode(LongName = "Nigeria", ShortName = "ng", RedumpOrgCode = "Ng")] Nigeria, - [RegionCode(LongName = "Niue", ShortName="nu", RedumpOrgCode="Nu")] + [RegionCode(LongName = "Niue", ShortName = "nu", RedumpOrgCode = "Nu")] Niue, - [RegionCode(LongName = "Norfolk Island", ShortName="nf", RedumpOrgCode="Nf")] + [RegionCode(LongName = "Norfolk Island", ShortName = "nf", RedumpOrgCode = "Nf")] NorfolkIsland, - [RegionCode(LongName = "North Macedonia", ShortName="mk", RedumpOrgCode="Mk")] + [RegionCode(LongName = "North Macedonia", ShortName = "mk", RedumpOrgCode = "Mk")] NorthMacedonia, - [RegionCode(LongName = "Northern Mariana Islands", ShortName="mp", RedumpOrgCode="Mp")] + [RegionCode(LongName = "Northern Mariana Islands", ShortName = "mp", RedumpOrgCode = "Mp")] NorthernMarianaIslands, - [RegionCode(LongName = "Norway", ShortName="no", RedumpOrgCode="No")] + [RegionCode(LongName = "Norway", ShortName = "no", RedumpOrgCode = "No")] Norway, #endregion #region O - [RegionCode(LongName = "Oman", ShortName="om", RedumpOrgCode="Om")] + [RegionCode(LongName = "Oman", ShortName = "om", RedumpOrgCode = "Om")] Oman, #endregion #region P - [RegionCode(LongName = "Pakistan", ShortName="pk", RedumpOrgCode="Pk")] + [RegionCode(LongName = "Pakistan", ShortName = "pk", RedumpOrgCode = "Pk")] Pakistan, - [RegionCode(LongName = "Palau", ShortName="pw", RedumpOrgCode="Pw")] + [RegionCode(LongName = "Palau", ShortName = "pw", RedumpOrgCode = "Pw")] Palau, - [RegionCode(LongName = "Panama", ShortName="pa", RedumpOrgCode="Pa")] + [RegionCode(LongName = "Panama", ShortName = "pa", RedumpOrgCode = "Pa")] Panama, - [RegionCode(LongName = "Papua New Guinea", ShortName="pg", RedumpOrgCode="Pg")] + [RegionCode(LongName = "Papua New Guinea", ShortName = "pg", RedumpOrgCode = "Pg")] PapuaNewGuinea, - [RegionCode(LongName = "Paraguay", ShortName="py", RedumpOrgCode="Py")] + [RegionCode(LongName = "Paraguay", ShortName = "py", RedumpOrgCode = "Py")] Paraguay, - [RegionCode(LongName = "Peru", ShortName="pe", RedumpOrgCode="Pe")] + [RegionCode(LongName = "Peru", ShortName = "pe", RedumpOrgCode = "Pe")] Peru, - [RegionCode(LongName = "Philippines", ShortName="ph", RedumpOrgCode="Ph")] + [RegionCode(LongName = "Philippines", ShortName = "ph", RedumpOrgCode = "Ph")] Philippines, - [RegionCode(LongName = "Pitcairn", ShortName="pn", RedumpOrgCode="Pn")] + [RegionCode(LongName = "Pitcairn", ShortName = "pn", RedumpOrgCode = "Pn")] Pitcairn, - [RegionCode(LongName = "Poland", ShortName="pl", RedumpOrgCode="P")] + [RegionCode(LongName = "Poland", ShortName = "pl", RedumpOrgCode = "P")] Poland, - [RegionCode(LongName = "Portugal", ShortName="pt", RedumpOrgCode="Pt")] + [RegionCode(LongName = "Portugal", ShortName = "pt", RedumpOrgCode = "Pt")] Portugal, - [RegionCode(LongName = "Puerto Rico", ShortName="pr", RedumpOrgCode="Pr")] + [RegionCode(LongName = "Puerto Rico", ShortName = "pr", RedumpOrgCode = "Pr")] PuertoRico, #endregion #region Q - [RegionCode(LongName = "Qatar", ShortName="qa", RedumpOrgCode="Qa")] + [RegionCode(LongName = "Qatar", ShortName = "qa", RedumpOrgCode = "Qa")] Qatar, #endregion #region R - [RegionCode(LongName = "Republic of Moldova", ShortName="md", RedumpOrgCode="Md")] + [RegionCode(LongName = "Republic of Moldova", ShortName = "md", RedumpOrgCode = "Md")] RepublicOfMoldova, - [RegionCode(LongName = "Réunion", ShortName="re", RedumpOrgCode="Re")] + [RegionCode(LongName = "Réunion", ShortName = "re", RedumpOrgCode = "Re")] Reunion, - [RegionCode(LongName = "Romania", ShortName="ro", RedumpOrgCode="Ro")] + [RegionCode(LongName = "Romania", ShortName = "ro", RedumpOrgCode = "Ro")] Romania, - [RegionCode(LongName = "Russian Federation", ShortName="ru", RedumpOrgCode="R")] + [RegionCode(LongName = "Russian Federation", ShortName = "ru", RedumpOrgCode = "R")] RussianFederation, - [RegionCode(LongName = "Rwanda", ShortName="rw", RedumpOrgCode="Rw")] + [RegionCode(LongName = "Rwanda", ShortName = "rw", RedumpOrgCode = "Rw")] Rwanda, #endregion #region S - [RegionCode(LongName = "Saint Barthélemy", ShortName="bl", RedumpOrgCode="Bl")] + [RegionCode(LongName = "Saint Barthélemy", ShortName = "bl", RedumpOrgCode = "Bl")] SaintBarthelemy, - [RegionCode(LongName = "Saint Helena, Ascension and Tristan da Cunha", ShortName="sh", RedumpOrgCode="Sh")] + [RegionCode(LongName = "Saint Helena, Ascension and Tristan da Cunha", ShortName = "sh", RedumpOrgCode = "Sh")] SaintHelena, - [RegionCode(LongName = "Saint Kitts and Nevis", ShortName="kn", RedumpOrgCode="Kn")] + [RegionCode(LongName = "Saint Kitts and Nevis", ShortName = "kn", RedumpOrgCode = "Kn")] SaintKittsAndNevis, - [RegionCode(LongName = "Saint Lucia", ShortName="lc", RedumpOrgCode="Lc")] + [RegionCode(LongName = "Saint Lucia", ShortName = "lc", RedumpOrgCode = "Lc")] SaintLucia, - [RegionCode(LongName = "Saint Martin", ShortName="mf", RedumpOrgCode="Mf")] + [RegionCode(LongName = "Saint Martin", ShortName = "mf", RedumpOrgCode = "Mf")] SaintMartin, - [RegionCode(LongName = "Saint Pierre and Miquelon", ShortName="pm", RedumpOrgCode="Pm")] + [RegionCode(LongName = "Saint Pierre and Miquelon", ShortName = "pm", RedumpOrgCode = "Pm")] SaintPierreAndMiquelon, - [RegionCode(LongName = "Saint Vincent and the Grenadines", ShortName="vc", RedumpOrgCode="Vc")] + [RegionCode(LongName = "Saint Vincent and the Grenadines", ShortName = "vc", RedumpOrgCode = "Vc")] SaintVincentAndTheGrenadines, - [RegionCode(LongName = "Samoa", ShortName="ws", RedumpOrgCode="Ws")] + [RegionCode(LongName = "Samoa", ShortName = "ws", RedumpOrgCode = "Ws")] Samoa, - [RegionCode(LongName = "San Marino", ShortName="sm", RedumpOrgCode="Sm")] + [RegionCode(LongName = "San Marino", ShortName = "sm", RedumpOrgCode = "Sm")] SanMarino, - [RegionCode(LongName = "Sao Tome and Principe", ShortName="st", RedumpOrgCode="St")] + [RegionCode(LongName = "Sao Tome and Principe", ShortName = "st", RedumpOrgCode = "St")] SaoTomeAndPrincipe, - [RegionCode(LongName = "Saudi Arabia", ShortName="sa", RedumpOrgCode="Sa")] + [RegionCode(LongName = "Saudi Arabia", ShortName = "sa", RedumpOrgCode = "Sa")] SaudiArabia, - [RegionCode(LongName = "Senegal", ShortName="sn", RedumpOrgCode="Sn")] + [RegionCode(LongName = "Senegal", ShortName = "sn", RedumpOrgCode = "Sn")] Senegal, - [RegionCode(LongName = "Serbia", ShortName="rs", RedumpOrgCode="Rs")] + [RegionCode(LongName = "Serbia", ShortName = "rs", RedumpOrgCode = "Rs")] Serbia, - [RegionCode(LongName = "Seychelles", ShortName="sc", RedumpOrgCode="Sc")] + [RegionCode(LongName = "Seychelles", ShortName = "sc", RedumpOrgCode = "Sc")] Seychelles, - [RegionCode(LongName = "Sierra Leone", ShortName="sl", RedumpOrgCode="Sl")] + [RegionCode(LongName = "Sierra Leone", ShortName = "sl", RedumpOrgCode = "Sl")] SierraLeone, - [RegionCode(LongName = "Singapore", ShortName="sg", RedumpOrgCode="Sg")] + [RegionCode(LongName = "Singapore", ShortName = "sg", RedumpOrgCode = "Sg")] Singapore, - [RegionCode(LongName = "Sint Maarten", ShortName="sx", RedumpOrgCode="Sx")] + [RegionCode(LongName = "Sint Maarten", ShortName = "sx", RedumpOrgCode = "Sx")] SintMaarten, - [RegionCode(LongName = "Slovakia", ShortName="sk", RedumpOrgCode="Sk")] + [RegionCode(LongName = "Slovakia", ShortName = "sk", RedumpOrgCode = "Sk")] Slovakia, - [RegionCode(LongName = "Slovenia", ShortName="si", RedumpOrgCode="Si")] + [RegionCode(LongName = "Slovenia", ShortName = "si", RedumpOrgCode = "Si")] Slovenia, - [RegionCode(LongName = "Solomon Islands", ShortName="sb", RedumpOrgCode="Sb")] + [RegionCode(LongName = "Solomon Islands", ShortName = "sb", RedumpOrgCode = "Sb")] SolomonIslands, - [RegionCode(LongName = "Somalia", ShortName="so", RedumpOrgCode="So")] + [RegionCode(LongName = "Somalia", ShortName = "so", RedumpOrgCode = "So")] Somalia, - [RegionCode(LongName = "South Africa", ShortName="za", RedumpOrgCode="Za")] + [RegionCode(LongName = "South Africa", ShortName = "za", RedumpOrgCode = "Za")] SouthAfrica, - [RegionCode(LongName = "South Georgia and the South Sandwich Islands", ShortName="gs", RedumpOrgCode="Gs")] + [RegionCode(LongName = "South Georgia and the South Sandwich Islands", ShortName = "gs", RedumpOrgCode = "Gs")] SouthGeorgia, - [RegionCode(LongName = "South Sudan", ShortName="ss", RedumpOrgCode="Ss")] + [RegionCode(LongName = "South Sudan", ShortName = "ss", RedumpOrgCode = "Ss")] SouthSudan, - [RegionCode(LongName = "Spain", ShortName="es", RedumpOrgCode="S")] + [RegionCode(LongName = "Spain", ShortName = "es", RedumpOrgCode = "S")] Spain, - [RegionCode(LongName = "Sri Lanka", ShortName="lk", RedumpOrgCode="Lk")] + [RegionCode(LongName = "Sri Lanka", ShortName = "lk", RedumpOrgCode = "Lk")] SriLanka, - [RegionCode(LongName = "State of Palestine", ShortName="ps", RedumpOrgCode="Ps")] + [RegionCode(LongName = "State of Palestine", ShortName = "ps", RedumpOrgCode = "Ps")] StateOfPalestine, - [RegionCode(LongName = "Sudan", ShortName="sd", RedumpOrgCode="Sd")] + [RegionCode(LongName = "Sudan", ShortName = "sd", RedumpOrgCode = "Sd")] Sudan, - [RegionCode(LongName = "Suriname", ShortName="sr", RedumpOrgCode="Sr")] + [RegionCode(LongName = "Suriname", ShortName = "sr", RedumpOrgCode = "Sr")] Suriname, - [RegionCode(LongName = "Svalbard and Jan Mayen", ShortName="sj", RedumpOrgCode="Sj")] + [RegionCode(LongName = "Svalbard and Jan Mayen", ShortName = "sj", RedumpOrgCode = "Sj")] SvalbardAndJanMayen, - [RegionCode(LongName = "Sweden", ShortName="se", RedumpOrgCode="Sw")] + [RegionCode(LongName = "Sweden", ShortName = "se", RedumpOrgCode = "Sw")] Sweden, - [RegionCode(LongName = "Switzerland", ShortName="ch", RedumpOrgCode="Ch")] + [RegionCode(LongName = "Switzerland", ShortName = "ch", RedumpOrgCode = "Ch")] Switzerland, - [RegionCode(LongName = "Syrian Arab Republic", ShortName="sy", RedumpOrgCode="Sy")] + [RegionCode(LongName = "Syrian Arab Republic", ShortName = "sy", RedumpOrgCode = "Sy")] SyrianArabRepublic, #endregion #region T - [RegionCode(LongName = "Taiwan", ShortName="tw", RedumpOrgCode="Tw")] + [RegionCode(LongName = "Taiwan", ShortName = "tw", RedumpOrgCode = "Tw")] Taiwan, - [RegionCode(LongName = "Tajikistan", ShortName="tj", RedumpOrgCode="Tj")] + [RegionCode(LongName = "Tajikistan", ShortName = "tj", RedumpOrgCode = "Tj")] Tajikistan, - [RegionCode(LongName = "Thailand", ShortName="th", RedumpOrgCode="Th")] + [RegionCode(LongName = "Thailand", ShortName = "th", RedumpOrgCode = "Th")] Thailand, // East Timor was "Tp" - [RegionCode(LongName = "Timor-Leste (East Timor)", ShortName="tl", RedumpOrgCode="Tl")] + [RegionCode(LongName = "Timor-Leste (East Timor)", ShortName = "tl", RedumpOrgCode = "Tl")] TimorLeste, - [RegionCode(LongName = "Togo", ShortName="tg", RedumpOrgCode="Tg")] + [RegionCode(LongName = "Togo", ShortName = "tg", RedumpOrgCode = "Tg")] Togo, - [RegionCode(LongName = "Tokelau", ShortName="tk", RedumpOrgCode="Tk")] + [RegionCode(LongName = "Tokelau", ShortName = "tk", RedumpOrgCode = "Tk")] Tokelau, - [RegionCode(LongName = "Tonga", ShortName="to", RedumpOrgCode="To")] + [RegionCode(LongName = "Tonga", ShortName = "to", RedumpOrgCode = "To")] Tonga, - [RegionCode(LongName = "Trinidad and Tobago", ShortName="tt", RedumpOrgCode="Tt")] + [RegionCode(LongName = "Trinidad and Tobago", ShortName = "tt", RedumpOrgCode = "Tt")] TrinidadAndTobago, - [RegionCode(LongName = "Tristan da Cunha", ShortName="ta", RedumpOrgCode="Ta")] + [RegionCode(LongName = "Tristan da Cunha", ShortName = "ta", RedumpOrgCode = "Ta")] TristanDaCunha, - [RegionCode(LongName = "Tunisia", ShortName="tn", RedumpOrgCode="Tn")] + [RegionCode(LongName = "Tunisia", ShortName = "tn", RedumpOrgCode = "Tn")] Tunisia, - [RegionCode(LongName = "Turkey", ShortName="tr", RedumpOrgCode="Tr")] + [RegionCode(LongName = "Turkey", ShortName = "tr", RedumpOrgCode = "Tr")] Turkey, - [RegionCode(LongName = "Turkmenistan", ShortName="tm", RedumpOrgCode="Tm")] + [RegionCode(LongName = "Turkmenistan", ShortName = "tm", RedumpOrgCode = "Tm")] Turkmenistan, - [RegionCode(LongName = "Turks and Caicos Islands", ShortName="tc", RedumpOrgCode="Tc")] + [RegionCode(LongName = "Turks and Caicos Islands", ShortName = "tc", RedumpOrgCode = "Tc")] TurksAndCaicosIslands, - [RegionCode(LongName = "Tuvalu", ShortName="tv", RedumpOrgCode="Tv")] + [RegionCode(LongName = "Tuvalu", ShortName = "tv", RedumpOrgCode = "Tv")] Tuvalu, #endregion #region U - [RegionCode(LongName = "Uganda", ShortName="ug", RedumpOrgCode="Ug")] + [RegionCode(LongName = "Uganda", ShortName = "ug", RedumpOrgCode = "Ug")] Uganda, // Should be both "Gb" and "Uk" // United Kingdom of Great Britain and Northern Ireland - [RegionCode(LongName = "UK", ShortName="gb", RedumpOrgCode="Uk")] + [RegionCode(LongName = "UK", ShortName = "gb", RedumpOrgCode = "Uk")] UnitedKingdom, - [RegionCode(LongName = "Ukraine", ShortName="ue", RedumpOrgCode="Ue")] + [RegionCode(LongName = "Ukraine", ShortName = "ue", RedumpOrgCode = "Ue")] Ukraine, - [RegionCode(LongName = "United Arab Emirates", ShortName="ae", RedumpOrgCode="Ae")] + [RegionCode(LongName = "United Arab Emirates", ShortName = "ae", RedumpOrgCode = "Ae")] UnitedArabEmirates, // Commented out to avoid confusion //[RegionCode(LongName = "United Nations", ShortName="un", RedumpOrgCode="Un")] //UnitedNations, - [RegionCode(LongName = "United Republic of Tanzania", ShortName="tz", RedumpOrgCode="Tz")] + [RegionCode(LongName = "United Republic of Tanzania", ShortName = "tz", RedumpOrgCode = "Tz")] UnitedRepublicOfTanzania, - [RegionCode(LongName = "United States Minor Outlying Islands", ShortName="um", RedumpOrgCode="Um")] + [RegionCode(LongName = "United States Minor Outlying Islands", ShortName = "um", RedumpOrgCode = "Um")] UnitedStatesMinorOutlyingIslands, - [RegionCode(LongName = "Uruguay", ShortName="uy", RedumpOrgCode="Uy")] + [RegionCode(LongName = "Uruguay", ShortName = "uy", RedumpOrgCode = "Uy")] Uruguay, // United States of America - [RegionCode(LongName = "USA", ShortName="us", RedumpOrgCode="U")] + [RegionCode(LongName = "USA", ShortName = "us", RedumpOrgCode = "U")] UnitedStatesOfAmerica, - [RegionCode(LongName = "USSR", ShortName="su", RedumpOrgCode="Su")] + [RegionCode(LongName = "USSR", ShortName = "su", RedumpOrgCode = "Su")] USSR, - [RegionCode(LongName = "Uzbekistan", ShortName="uz", RedumpOrgCode="Uz")] + [RegionCode(LongName = "Uzbekistan", ShortName = "uz", RedumpOrgCode = "Uz")] Uzbekistan, #endregion #region V - [RegionCode(LongName = "Vanuatu", ShortName="vu", RedumpOrgCode="Vu")] + [RegionCode(LongName = "Vanuatu", ShortName = "vu", RedumpOrgCode = "Vu")] Vanuatu, - [RegionCode(LongName = "Venezuela", ShortName="ve", RedumpOrgCode="Ve")] + [RegionCode(LongName = "Venezuela", ShortName = "ve", RedumpOrgCode = "Ve")] Venezuela, - [RegionCode(LongName = "Viet Nam", ShortName="vn", RedumpOrgCode="Vn")] + [RegionCode(LongName = "Viet Nam", ShortName = "vn", RedumpOrgCode = "Vn")] VietNam, - [RegionCode(LongName = "Virgin Islands (British)", ShortName="vg", RedumpOrgCode="Vg")] + [RegionCode(LongName = "Virgin Islands (British)", ShortName = "vg", RedumpOrgCode = "Vg")] BritishVirginIslands, - [RegionCode(LongName = "Virgin Islands (US)", ShortName="vi", RedumpOrgCode="Vi")] + [RegionCode(LongName = "Virgin Islands (US)", ShortName = "vi", RedumpOrgCode = "Vi")] USVirginIslands, #endregion #region W - [RegionCode(LongName = "Wallis and Futuna", ShortName="wf", RedumpOrgCode="Wf")] + [RegionCode(LongName = "Wallis and Futuna", ShortName = "wf", RedumpOrgCode = "Wf")] WallisAndFutuna, - [RegionCode(LongName = "Western Sahara", ShortName="eh", RedumpOrgCode="Eh")] + [RegionCode(LongName = "Western Sahara", ShortName = "eh", RedumpOrgCode = "Eh")] WesternSahara, #endregion #region Y - [RegionCode(LongName = "Yemen", ShortName="ye", RedumpOrgCode="Ye")] + [RegionCode(LongName = "Yemen", ShortName = "ye", RedumpOrgCode = "Ye")] Yemen, - [RegionCode(LongName = "Yugoslavia", ShortName="yu", RedumpOrgCode="Yu")] + [RegionCode(LongName = "Yugoslavia", ShortName = "yu", RedumpOrgCode = "Yu")] Yugoslavia, #endregion #region Z - [RegionCode(LongName = "Zambia", ShortName="zm", RedumpOrgCode="Zm")] + [RegionCode(LongName = "Zambia", ShortName = "zm", RedumpOrgCode = "Zm")] Zambia, - [RegionCode(LongName = "Zimbabwe", ShortName="zw", RedumpOrgCode="Zw")] + [RegionCode(LongName = "Zimbabwe", ShortName = "zw", RedumpOrgCode = "Zw")] Zimbabwe, #endregion } + + /// + /// List of system categories + /// + public enum SystemCategory + { + NONE = 0, + + [HumanReadable(LongName = "Disc-Based Consoles")] + DiscBasedConsole, + + [HumanReadable(LongName = "Other Consoles")] + OtherConsole, + + [HumanReadable(LongName = "Computers")] + Computer, + + [HumanReadable(LongName = "Arcade")] + Arcade, + + [HumanReadable(LongName = "Other")] + Other, + }; } diff --git a/SabreTools.RedumpLib/Data/Extensions.cs b/SabreTools.RedumpLib/Data/Extensions.cs index bf41805..c003464 100644 --- a/SabreTools.RedumpLib/Data/Extensions.cs +++ b/SabreTools.RedumpLib/Data/Extensions.cs @@ -36,6 +36,776 @@ namespace SabreTools.RedumpLib.Data #endregion + #region Cross-Enumeration + + /// + /// Get a list of valid MediaTypes for a given PhysicalSystem + /// + /// PhysicalSystem value to check + /// MediaTypes, if possible + public static List MediaTypes(this PhysicalSystem? system) + { + var types = new List(); + +#pragma warning disable IDE0010 // Add missing cases + switch (system) + { + #region Consoles + + // https://en.wikipedia.org/wiki/Atari_Jaguar_CD + case PhysicalSystem.AtariJaguarCDInteractiveMultimediaSystem: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/Playdia + case PhysicalSystem.BandaiPlaydiaQuickInteractiveSystem: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/Apple_Bandai_Pippin + case PhysicalSystem.BandaiPippin: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/Amiga_CD32 + case PhysicalSystem.CommodoreAmigaCD32: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/Commodore_CDTV + case PhysicalSystem.CommodoreAmigaCDTV: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/EVO_Smart_Console + case PhysicalSystem.EnvizionsEVOSmartConsole: + types.Add(PhysicalMediaType.CDROM); + types.Add(PhysicalMediaType.DVD); + break; + + // https://en.wikipedia.org/wiki/FM_Towns_Marty + case PhysicalSystem.FujitsuFMTownsMarty: + types.Add(PhysicalMediaType.CDROM); + types.Add(PhysicalMediaType.FloppyDisk); + break; + + // http://videogamekraken.com/ion-educational-gaming-system-by-hasbro + case PhysicalSystem.HasbroiONEducationalGamingSystem: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/VideoNow + case PhysicalSystem.HasbroVideoNow: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/VideoNow + case PhysicalSystem.HasbroVideoNowColor: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/VideoNow + case PhysicalSystem.HasbroVideoNowJr: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/VideoNow + case PhysicalSystem.HasbroVideoNowXP: + types.Add(PhysicalMediaType.CDROM); + break; + + case PhysicalSystem.MattelFisherPriceiXL: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/HyperScan + case PhysicalSystem.MattelHyperScan: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/Xbox_(console) + case PhysicalSystem.MicrosoftXbox: + types.Add(PhysicalMediaType.DVD); + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/Xbox_360 + case PhysicalSystem.MicrosoftXbox360: + types.Add(PhysicalMediaType.DVD); + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/Xbox_One + case PhysicalSystem.MicrosoftXboxOne: + types.Add(PhysicalMediaType.BluRay); + break; + + // https://en.wikipedia.org/wiki/Xbox_Series_X_and_Series_S + case PhysicalSystem.MicrosoftXboxSeriesXS: + types.Add(PhysicalMediaType.BluRay); + break; + + // https://en.wikipedia.org/wiki/TurboGrafx-16 + case PhysicalSystem.NECPCEngineCDTurboGrafxCD: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/PC-FX + case PhysicalSystem.NECPCFXPCFXGA: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/GameCube + case PhysicalSystem.NintendoGameCube: + types.Add(PhysicalMediaType.DVD); // Only added here to help users; not strictly correct + types.Add(PhysicalMediaType.NintendoGameCubeGameDisc); + break; + + // https://en.wikipedia.org/wiki/Super_NES_CD-ROM + case PhysicalSystem.NintendoSonySuperNESCDROMSystem: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/Wii + case PhysicalSystem.NintendoWii: + types.Add(PhysicalMediaType.DVD); // Only added here to help users; not strictly correct + types.Add(PhysicalMediaType.NintendoWiiOpticalDisc); + break; + + // https://en.wikipedia.org/wiki/Wii_U + case PhysicalSystem.NintendoWiiU: + types.Add(PhysicalMediaType.NintendoWiiUOpticalDisc); + break; + + // https://en.wikipedia.org/wiki/3DO_Interactive_Multiplayer + case PhysicalSystem.Panasonic3DOInteractiveMultiplayer: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/Philips_CD-i + case PhysicalSystem.PhilipsCDi: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/Polymega + case PhysicalSystem.PlaymajiPolymega: + types.Add(PhysicalMediaType.CDROM); + types.Add(PhysicalMediaType.DVD); + break; + + // https://en.wikipedia.org/wiki/LaserActive + case PhysicalSystem.PioneerLaserActive: + types.Add(PhysicalMediaType.CDROM); + types.Add(PhysicalMediaType.LaserDisc); + break; + + // https://en.wikipedia.org/wiki/Sega_CD + case PhysicalSystem.SegaMegaCDSegaCD: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/Dreamcast + case PhysicalSystem.SegaDreamcast: + types.Add(PhysicalMediaType.CDROM); // Low density partition, MIL-CD + types.Add(PhysicalMediaType.GDROM); // High density partition + break; + + // https://en.wikipedia.org/wiki/Sega_Saturn + case PhysicalSystem.SegaSaturn: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/Neo_Geo_CD + case PhysicalSystem.SNKNeoGeoCD: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/PlayStation_(console) + case PhysicalSystem.SonyPlayStation: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/PlayStation_2 + case PhysicalSystem.SonyPlayStation2: + types.Add(PhysicalMediaType.CDROM); + types.Add(PhysicalMediaType.DVD); + break; + + // https://en.wikipedia.org/wiki/PlayStation_3 + case PhysicalSystem.SonyPlayStation3: + types.Add(PhysicalMediaType.BluRay); + types.Add(PhysicalMediaType.CDROM); + types.Add(PhysicalMediaType.DVD); + break; + + // https://en.wikipedia.org/wiki/PlayStation_4 + case PhysicalSystem.SonyPlayStation4: + types.Add(PhysicalMediaType.BluRay); + break; + + // https://en.wikipedia.org/wiki/PlayStation_5 + case PhysicalSystem.SonyPlayStation5: + types.Add(PhysicalMediaType.BluRay); + break; + + // https://en.wikipedia.org/wiki/PlayStation_Portable + case PhysicalSystem.SonyPlayStationPortable: + types.Add(PhysicalMediaType.UMD); + types.Add(PhysicalMediaType.CDROM); // Development discs only + types.Add(PhysicalMediaType.DVD); // Development discs only + break; + + // https://en.wikipedia.org/wiki/Tandy_Video_Information_System + case PhysicalSystem.MemorexVisualInformationSystem: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/Nuon_(DVD_technology) + case PhysicalSystem.VMLabsNUON: + types.Add(PhysicalMediaType.DVD); + break; + + // https://en.wikipedia.org/wiki/V.Flash + case PhysicalSystem.VTechVFlashVSmilePro: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/Game_Wave_Family_Entertainment_System + case PhysicalSystem.ZAPiTGamesGameWaveFamilyEntertainmentSystem: + types.Add(PhysicalMediaType.CDROM); // Firmware discs only(?) + types.Add(PhysicalMediaType.DVD); + break; + + #endregion + + #region Computers + + // https://en.wikipedia.org/wiki/Acorn_Archimedes + case PhysicalSystem.AcornArchimedes: + types.Add(PhysicalMediaType.CDROM); + types.Add(PhysicalMediaType.FloppyDisk); + break; + + // https://en.wikipedia.org/wiki/Macintosh + case PhysicalSystem.AppleMacintosh: + types.Add(PhysicalMediaType.CDROM); + types.Add(PhysicalMediaType.DVD); + types.Add(PhysicalMediaType.FloppyDisk); + types.Add(PhysicalMediaType.HardDisk); + break; + + // https://en.wikipedia.org/wiki/Amiga + case PhysicalSystem.CommodoreAmigaCD: + types.Add(PhysicalMediaType.CDROM); + types.Add(PhysicalMediaType.FloppyDisk); + break; + + // https://en.wikipedia.org/wiki/FM_Towns + case PhysicalSystem.FujitsuFMTownsseries: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/IBM_PC_compatible + case PhysicalSystem.IBMPCcompatible: + types.Add(PhysicalMediaType.CDROM); + types.Add(PhysicalMediaType.DVD); + types.Add(PhysicalMediaType.BluRay); + types.Add(PhysicalMediaType.FloppyDisk); + types.Add(PhysicalMediaType.HardDisk); + types.Add(PhysicalMediaType.DataCartridge); + break; + + // https://en.wikipedia.org/wiki/PC-8800_series + case PhysicalSystem.NECPC88series: + types.Add(PhysicalMediaType.CDROM); + types.Add(PhysicalMediaType.FloppyDisk); + break; + + // https://en.wikipedia.org/wiki/PC-9800_series + case PhysicalSystem.NECPC98series: + types.Add(PhysicalMediaType.CDROM); + types.Add(PhysicalMediaType.DVD); + types.Add(PhysicalMediaType.FloppyDisk); + break; + + // https://en.wikipedia.org/wiki/X68000 + case PhysicalSystem.SharpX68000: + types.Add(PhysicalMediaType.CDROM); + types.Add(PhysicalMediaType.FloppyDisk); + break; + + #endregion + + #region Arcade + + // https://www.bigbookofamigahardware.com/bboah/product.aspx?id=36 + case PhysicalSystem.AmigaCUBOCD32: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/Orbatak + case PhysicalSystem.AmericanLaserGames3DO: + types.Add(PhysicalMediaType.CDROM); + break; + + // http://system16.com/hardware.php?id=779 + case PhysicalSystem.Atari3DO: + types.Add(PhysicalMediaType.CDROM); + break; + + // http://newlifegames.net/nlg/index.php?topic=22003.0 + // http://newlifegames.net/nlg/index.php?topic=5486.msg119440 + case PhysicalSystem.Atronic: + types.Add(PhysicalMediaType.CDROM); + types.Add(PhysicalMediaType.DVD); + break; + + // https://www.arcade-museum.com/members/member_detail.php?member_id=406530 + case PhysicalSystem.AUSCOMSystem1: + types.Add(PhysicalMediaType.CDROM); + break; + + // http://newlifegames.net/nlg/index.php?topic=285.0 + case PhysicalSystem.BallyGameMagic: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/CP_System_III + case PhysicalSystem.CapcomCPSystemIII: + types.Add(PhysicalMediaType.CDROM); + break; + + // UNKNOWN + case PhysicalSystem.funworldPhotoPlay: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/FuRyu + case PhysicalSystem.FuRyuOmronPurikura: + types.Add(PhysicalMediaType.CDROM); + types.Add(PhysicalMediaType.DVD); + break; + + // UNKNOWN + case PhysicalSystem.GlobalVRVarious: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://service.globalvr.com/troubleshooting/vortek.html + case PhysicalSystem.GlobalVRVortek: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://service.globalvr.com/downloads/v3/040-1001-01c-V3-System-Manual.pdf + case PhysicalSystem.GlobalVRVortekV3: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://www.icegame.com/games + case PhysicalSystem.ICEPCHardware: + types.Add(PhysicalMediaType.DVD); + break; + + // https://github.com/mamedev/mame/blob/master/src/mame/drivers/iteagle.cpp + case PhysicalSystem.IncredibleTechnologiesEagle: + types.Add(PhysicalMediaType.CDROM); + break; + + // UNKNOWN + case PhysicalSystem.IncredibleTechnologiesVarious: + types.Add(PhysicalMediaType.CDROM); + types.Add(PhysicalMediaType.DVD); + break; + + // UNKNOWN + case PhysicalSystem.JVLiTouch: + types.Add(PhysicalMediaType.CDROM); + types.Add(PhysicalMediaType.DVD); + break; + + // https://en.wikipedia.org/wiki/E-Amusement + case PhysicalSystem.KonamieAmusement: + types.Add(PhysicalMediaType.CDROM); + types.Add(PhysicalMediaType.DVD); + break; + + // http://system16.com/hardware.php?id=828 + case PhysicalSystem.KonamiFireBeat: + types.Add(PhysicalMediaType.CDROM); + types.Add(PhysicalMediaType.DVD); + break; + + // http://system16.com/hardware.php?id=577 + case PhysicalSystem.KonamiSystemGV: + types.Add(PhysicalMediaType.CDROM); + break; + + // http://system16.com/hardware.php?id=575 + case PhysicalSystem.KonamiM2: + types.Add(PhysicalMediaType.CDROM); + break; + + // http://system16.com/hardware.php?id=586 + // http://system16.com/hardware.php?id=977 + case PhysicalSystem.KonamiPython: + types.Add(PhysicalMediaType.CDROM); + types.Add(PhysicalMediaType.DVD); + break; + + // http://system16.com/hardware.php?id=976 + // http://system16.com/hardware.php?id=831 + case PhysicalSystem.KonamiPython2: + types.Add(PhysicalMediaType.CDROM); + types.Add(PhysicalMediaType.DVD); + break; + + // http://system16.com/hardware.php?id=582 + // http://system16.com/hardware.php?id=822 + // http://system16.com/hardware.php?id=823 + case PhysicalSystem.KonamiSystem573: + types.Add(PhysicalMediaType.CDROM); + break; + + // http://system16.com/hardware.php?id=827 + case PhysicalSystem.KonamiTwinkle: + types.Add(PhysicalMediaType.CDROM); + break; + + // UNKNOWN + case PhysicalSystem.KonamiVarious: + types.Add(PhysicalMediaType.CDROM); + types.Add(PhysicalMediaType.DVD); + break; + + // http://www.meritgames.com/Support_Center/manuals/PM0591-01.pdf + case PhysicalSystem.MeritIndustriesBoardwalk: + types.Add(PhysicalMediaType.CDROM); + types.Add(PhysicalMediaType.DVD); + break; + + // http://www.meritgames.com/Support_Center/Force%20Elite/PM0380-09.pdf + // http://www.meritgames.com/Support_Center/Force%20Upright/PM0382-07%20FORCE%20Upright%20manual.pdf + // http://www.meritgames.com/Support_Center/Force%20Upright/PM0383-07%20FORCE%20Upright%20manual.pdf + case PhysicalSystem.MeritIndustriesMegaTouchForce: + types.Add(PhysicalMediaType.CDROM); + break; + + // http://www.meritgames.com/Service%20Center/Ion%20Troubleshooting.pdf + case PhysicalSystem.MeritIndustriesMegaTouchION: + types.Add(PhysicalMediaType.CDROM); + types.Add(PhysicalMediaType.DVD); + break; + + // http://www.meritgames.com/Support_Center/EZ%20Maxx/Manuals/MAXX%20Elite%20with%20coin.pdf + // http://www.meritgames.com/Support_Center/EZ%20Maxx/Manuals/MAXX%20Elite.pdf + // http://www.meritgames.com/Support_Center/manuals/90003010%20Maxx%20TSM_Rev%20C.pdf + case PhysicalSystem.MeritIndustriesMegaTouchMaxx: + types.Add(PhysicalMediaType.CDROM); + break; + + // http://www.meritgames.com/Support_Center/manuals/pm0076_OA_Megatouch%20XL%20Trouble%20Shooting%20Manual.pdf + // http://www.meritgames.com/Support_Center/MEGA%20XL/manuals/Megatouch_XL_pm0109-0D.pdf + // http://www.meritgames.com/Support_Center/MEGA%20XL/manuals/Megatouch_XL_Super_5000_manual.pdf + case PhysicalSystem.MeritIndustriesMegaTouchXL: + types.Add(PhysicalMediaType.CDROM); + break; + + // UNKNOWN + case PhysicalSystem.NamcoPurikura: + types.Add(PhysicalMediaType.CDROM); + types.Add(PhysicalMediaType.DVD); + break; + + // http://system16.com/hardware.php?id=543 + // http://system16.com/hardware.php?id=546 + // http://system16.com/hardware.php?id=872 + case PhysicalSystem.NamcoSystem246256: + types.Add(PhysicalMediaType.CDROM); + types.Add(PhysicalMediaType.DVD); + break; + + // http://system16.com/hardware.php?id=545 + case PhysicalSystem.NamcoSegaNintendoTriforce: + types.Add(PhysicalMediaType.CDROM); // Low density partition + types.Add(PhysicalMediaType.GDROM); // High density partition + break; + + // http://system16.com/hardware.php?id=535 + case PhysicalSystem.NamcoSystem12: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://www.arcade-history.com/?n=the-yakyuuken-part-1&page=detail&id=33049 + case PhysicalSystem.NewJatreCDi: + types.Add(PhysicalMediaType.CDROM); + break; + + // http://blog.system11.org/?p=2499 + case PhysicalSystem.NichibutsuHighRateSystem: + types.Add(PhysicalMediaType.DVD); + break; + + // http://blog.system11.org/?p=2514 + case PhysicalSystem.NichibutsuSuperCD: + types.Add(PhysicalMediaType.CDROM); + break; + + // http://collectedit.com/collectors/shou-time-213/arcade-pcbs-281/x-rate-dvd-series-17-newlywed-life-japan-by-nichibutsu-32245 + case PhysicalSystem.NichibutsuXRateSystem: + types.Add(PhysicalMediaType.DVD); + break; + + // https://en.wikipedia.org/wiki/Panasonic_M2 + case PhysicalSystem.PanasonicM2: + types.Add(PhysicalMediaType.CDROM); + types.Add(PhysicalMediaType.DVD); + break; + + // https://github.com/mamedev/mame/blob/master/src/mame/drivers/photoply.cpp + case PhysicalSystem.PhotoPlayVarious: + types.Add(PhysicalMediaType.CDROM); + break; + + // UNKNOWN + case PhysicalSystem.RawThrillsVarious: + types.Add(PhysicalMediaType.DVD); + break; + + // UNKNOWN + case PhysicalSystem.SegaALLS: + types.Add(PhysicalMediaType.DVD); + break; + + // http://system16.com/hardware.php?id=729 + case PhysicalSystem.SegaChihiro: + types.Add(PhysicalMediaType.CDROM); // Low density partition + types.Add(PhysicalMediaType.GDROM); // High density partition + break; + + // http://system16.com/hardware.php?id=907 + case PhysicalSystem.SegaEuropaR: + types.Add(PhysicalMediaType.DVD); + break; + + // http://system16.com/hardware.php?id=985 + // http://system16.com/hardware.php?id=731 + // http://system16.com/hardware.php?id=984 + // http://system16.com/hardware.php?id=986 + case PhysicalSystem.SegaLindbergh: + types.Add(PhysicalMediaType.DVD); + break; + + // http://system16.com/hardware.php?id=721 + // http://system16.com/hardware.php?id=723 + // http://system16.com/hardware.php?id=906 + // http://system16.com/hardware.php?id=722 + case PhysicalSystem.SegaNaomi: + types.Add(PhysicalMediaType.CDROM); // Low density partition + types.Add(PhysicalMediaType.GDROM); // High density partition + break; + + // http://system16.com/hardware.php?id=725 + // http://system16.com/hardware.php?id=726 + // http://system16.com/hardware.php?id=727 + case PhysicalSystem.SegaNaomi2: + types.Add(PhysicalMediaType.CDROM); // Low density partition + types.Add(PhysicalMediaType.GDROM); // High density partition + break; + + // https://segaretro.org/Sega_NAOMI#NAOMI_Satellite_Terminal + case PhysicalSystem.SegaNaomiSatelliteTerminalPC: + types.Add(PhysicalMediaType.CDROM); + types.Add(PhysicalMediaType.DVD); + break; + + // https://en.wikipedia.org/wiki/List_of_Sega_arcade_system_boards#Sega_Nu + case PhysicalSystem.SegaNu: + types.Add(PhysicalMediaType.DVD); + break; + + // https://en.wikipedia.org/wiki/List_of_Sega_arcade_system_boards#Sega_Nu + case PhysicalSystem.SegaNu11: + types.Add(PhysicalMediaType.DVD); + break; + + // https://en.wikipedia.org/wiki/List_of_Sega_arcade_system_boards#Sega_Nu + case PhysicalSystem.SegaNu2: + types.Add(PhysicalMediaType.DVD); + break; + + // https://segaretro.org/Nu_SX + case PhysicalSystem.SegaNuSX: + types.Add(PhysicalMediaType.DVD); + break; + + // http://system16.com/hardware.php?id=910 + // https://en.wikipedia.org/wiki/List_of_Sega_arcade_system_boards#Sega_Ring_series + case PhysicalSystem.SegaRingEdge: + types.Add(PhysicalMediaType.DVD); + break; + + // http://system16.com/hardware.php?id=982 + // https://en.wikipedia.org/wiki/List_of_Sega_arcade_system_boards#Sega_Ring_series + case PhysicalSystem.SegaRingEdge2: + types.Add(PhysicalMediaType.DVD); + break; + + // http://system16.com/hardware.php?id=911 + // https://en.wikipedia.org/wiki/List_of_Sega_arcade_system_boards#Sega_Ring_series + case PhysicalSystem.SegaRingWide: + types.Add(PhysicalMediaType.DVD); + break; + + // http://system16.com/hardware.php?id=711 + case PhysicalSystem.SegaTitanVideo: + types.Add(PhysicalMediaType.CDROM); + break; + + // http://system16.com/hardware.php?id=709 + // http://system16.com/hardware.php?id=710 + case PhysicalSystem.SegaSystem32: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://github.com/mamedev/mame/blob/master/src/mame/drivers/seibucats.cpp + case PhysicalSystem.SeibuCATSSystem: + types.Add(PhysicalMediaType.DVD); + break; + + // https://www.tab.at/en/support/support/downloads + case PhysicalSystem.TABAustriaQuizard: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://primetimeamusements.com/product/tsumo-multi-game-motion-system/ + // https://www.highwaygames.com/arcade-machines/tsumo-tsunami-motion-8117/ + case PhysicalSystem.TsunamiTsuMoMultiGameMotionSystem: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/UltraCade_Technologies + case PhysicalSystem.UltraCade: + types.Add(PhysicalMediaType.CDROM); + types.Add(PhysicalMediaType.DVD); + break; + + #endregion + + #region Others + + // https://en.wikipedia.org/wiki/Audio_CD + case PhysicalSystem.AudioCD: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/Blu-ray#Player_profiles + case PhysicalSystem.BDVideo: + types.Add(PhysicalMediaType.BluRay); + break; + + // https://en.wikipedia.org/wiki/DVD-Audio + case PhysicalSystem.DVDAudio: + types.Add(PhysicalMediaType.DVD); + break; + + // https://en.wikipedia.org/wiki/DVD-Video + case PhysicalSystem.DVDVideo: + types.Add(PhysicalMediaType.DVD); + break; + + // https://en.wikipedia.org/wiki/Blue_Book_(CD_standard) + case PhysicalSystem.EnhancedCD: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/HD_DVD + case PhysicalSystem.HDDVDVideo: + types.Add(PhysicalMediaType.HDDVD); + break; + + // UNKNOWN + case PhysicalSystem.NavisoftNaviken21: + types.Add(PhysicalMediaType.CDROM); + break; + + // UNKNOWN + case PhysicalSystem.PalmOS: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/Photo_CD + case PhysicalSystem.PhotoCD: + types.Add(PhysicalMediaType.CDROM); + break; + + // UNKNOWN + case PhysicalSystem.PlayStationGameSharkUpdates: + types.Add(PhysicalMediaType.CDROM); + break; + + // UNKNOWN + case PhysicalSystem.PocketPC: + types.Add(PhysicalMediaType.CDROM); + break; + + // UNKNOWN + case PhysicalSystem.Psion: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/Doors_and_Windows_(EP) + case PhysicalSystem.RainbowDisc: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://segaretro.org/Prologue_21 + case PhysicalSystem.SegaPrologue21MultimediaKaraokeSystem: + types.Add(PhysicalMediaType.CDROM); + break; + + // UNKNOWN + case PhysicalSystem.SharpZaurus: + types.Add(PhysicalMediaType.CDROM); + break; + + // UNKNOWN + case PhysicalSystem.SonyElectronicBook: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/Super_Audio_CD + case PhysicalSystem.SuperAudioCD: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://www.cnet.com/products/tao-music-iktv-karaoke-station-karaoke-system-series/ + case PhysicalSystem.TaoiKTV: + types.Add(PhysicalMediaType.CDROM); + break; + + // http://ultimateconsoledatabase.com/golden/kiss_site.htm + case PhysicalSystem.TomyKissSite: + types.Add(PhysicalMediaType.CDROM); + break; + + // https://en.wikipedia.org/wiki/Video_CD + case PhysicalSystem.VideoCD: + types.Add(PhysicalMediaType.CDROM); + break; + + #endregion + + default: + types.Add(PhysicalMediaType.NONE); + break; + } +#pragma warning restore IDE0010 // Add missing cases + + return types; + } + + #endregion + #region Language /// @@ -196,6 +966,372 @@ namespace SabreTools.RedumpLib.Data #endregion + #region Physical System + + /// + /// Determine if a system is okay if it's not detected by Windows + /// + /// PhysicalSystem value to check + /// True if Windows show see a disc when dumping, false otherwise + public static bool DetectedByWindows(this PhysicalSystem? system) + { +#pragma warning disable IDE0072 // Add missing cases + return system switch + { + // BIOS Sets + PhysicalSystem.MicrosoftXboxBIOS + or PhysicalSystem.NintendoGameCubeBIOS + or PhysicalSystem.SonyPlayStationBIOS + or PhysicalSystem.SonyPlayStation2BIOS => false, + + // Disc-Based Consoles + PhysicalSystem.AtariJaguarCDInteractiveMultimediaSystem + or PhysicalSystem.BandaiPlaydiaQuickInteractiveSystem + or PhysicalSystem.BandaiPippin + or PhysicalSystem.HasbroVideoNow + or PhysicalSystem.HasbroVideoNowColor + or PhysicalSystem.HasbroVideoNowJr + or PhysicalSystem.HasbroVideoNowXP + or PhysicalSystem.NintendoGameCube + or PhysicalSystem.NintendoWii + or PhysicalSystem.NintendoWiiU + or PhysicalSystem.Panasonic3DOInteractiveMultiplayer + or PhysicalSystem.PhilipsCDi + or PhysicalSystem.PioneerLaserActive + or PhysicalSystem.MarkerDiscBasedConsoleEnd => false, + + // Computers + PhysicalSystem.AppleMacintosh + or PhysicalSystem.MarkerComputerEnd => false, + + // Arcade + PhysicalSystem.AmericanLaserGames3DO + or PhysicalSystem.Atari3DO + or PhysicalSystem.NewJatreCDi + or PhysicalSystem.PanasonicM2 + or PhysicalSystem.MarkerArcadeEnd => false, + + // Other + PhysicalSystem.PlayStationGameSharkUpdates + or PhysicalSystem.SuperAudioCD + or PhysicalSystem.MarkerOtherEnd => false, + + null => false, + _ => true, + }; +#pragma warning restore IDE0072 // Add missing cases + } + + /// + /// Determine if a system has reversed ringcodes + /// + /// PhysicalSystem value to check + /// True if the system has reversed ringcodes, false otherwise + public static bool HasReversedRingcodes(this PhysicalSystem? system) + { +#pragma warning disable IDE0072 // Add missing cases + return system switch + { + PhysicalSystem.SonyPlayStation2 + or PhysicalSystem.SonyPlayStation3 + or PhysicalSystem.SonyPlayStation4 + or PhysicalSystem.SonyPlayStation5 + or PhysicalSystem.SonyPlayStationPortable => true, + _ => false, + }; +#pragma warning restore IDE0072 // Add missing cases + } + + /// + /// Determine if a system is considered audio-only + /// + /// PhysicalSystem value to check + /// True if the system is audio-only, false otherwise + /// + /// Philips CD-i should NOT be in this list. It's being included until there's a + /// reasonable distinction between CD-i and CD-i ready on the database side. + /// + public static bool IsAudio(this PhysicalSystem? system) + { +#pragma warning disable IDE0072 // Add missing cases + return system switch + { + PhysicalSystem.AtariJaguarCDInteractiveMultimediaSystem + or PhysicalSystem.AudioCD + or PhysicalSystem.DVDAudio + or PhysicalSystem.HasbroiONEducationalGamingSystem + or PhysicalSystem.HasbroVideoNow + or PhysicalSystem.HasbroVideoNowColor + or PhysicalSystem.HasbroVideoNowJr + or PhysicalSystem.HasbroVideoNowXP + or PhysicalSystem.PhilipsCDi + or PhysicalSystem.PlayStationGameSharkUpdates + or PhysicalSystem.SuperAudioCD => true, + _ => false, + }; +#pragma warning restore IDE0072 // Add missing cases + } + + /// + /// Determine if a system is a marker value + /// + /// PhysicalSystem value to check + /// True if the system is a marker value, false otherwise + public static bool IsMarker(this PhysicalSystem system) + => ((PhysicalSystem?)system).IsMarker(); + + /// + /// Determine if a system is a marker value + /// + /// PhysicalSystem value to check + /// True if the system is a marker value, false otherwise + public static bool IsMarker(this PhysicalSystem? system) + { +#pragma warning disable IDE0072 // Add missing cases + return system switch + { + PhysicalSystem.MarkerArcadeEnd + or PhysicalSystem.MarkerComputerEnd + or PhysicalSystem.MarkerDiscBasedConsoleEnd + or PhysicalSystem.MarkerOtherEnd => true, + _ => false, + }; +#pragma warning restore IDE0072 // Add missing cases + } + + /// + /// Determine if a system is considered XGD + /// + /// PhysicalSystem value to check + /// True if the system is XGD, false otherwise + public static bool IsXGD(this PhysicalSystem? system) + { +#pragma warning disable IDE0072 // Add missing cases + return system switch + { + PhysicalSystem.MicrosoftXbox + or PhysicalSystem.MicrosoftXbox360 + or PhysicalSystem.MicrosoftXboxOne + or PhysicalSystem.MicrosoftXboxSeriesXS => true, + _ => false, + }; +#pragma warning restore IDE0072 // Add missing cases + } + + /// + /// List all systems with their short usable names + /// + public static List ListSystems() + { + var systems = (PhysicalSystem[])Enum.GetValues(typeof(PhysicalSystem)); + var knownSystems = Array.FindAll(systems, s => !s.IsMarker() && s.GetCategory() != SystemCategory.NONE); + Array.Sort(knownSystems, (x, y) => (x.LongName() ?? string.Empty).CompareTo(y.LongName() ?? string.Empty)); + return [.. Array.ConvertAll(knownSystems, val => $"{val.ShortName()} - {val.LongName()}")]; + } + + /// + /// Get the Redump longnames for each known system + /// + /// + /// + public static string? LongName(this PhysicalSystem system) + => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.LongName; + + /// + /// Get the Redump longnames for each known system + /// + /// + /// + public static string? LongName(this PhysicalSystem? system) + => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.LongName; + + /// + /// Get the Redump shortnames for each known system + /// + /// + /// + public static string? ShortName(this PhysicalSystem system) + => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.ShortName; + + /// + /// Get the Redump shortnames for each known system + /// + /// + /// + public static string? ShortName(this PhysicalSystem? system) + => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.ShortName; + + /// + /// Get the Redump shortnames for each known system + /// + /// + /// + public static string? ShortNameAlt(this PhysicalSystem system) + => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.RedumpOrgCode; + + /// + /// Get the Redump shortnames for each known system + /// + /// + /// + public static string? ShortNameAlt(this PhysicalSystem? system) + => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.RedumpOrgCode; + + /// + /// Determine the category of a system + /// + public static SystemCategory GetCategory(this PhysicalSystem system) + => ((PhysicalSystem?)system).GetCategory(); + + /// + /// Determine the category of a system + /// + public static SystemCategory GetCategory(this PhysicalSystem? system) + => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.Category ?? SystemCategory.NONE; + + /// + /// Determine if a system is available in Redump yet + /// + public static bool IsAvailable(this PhysicalSystem system) + => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.Available ?? false; + + /// + /// Determine if a system is available in Redump yet + /// + public static bool IsAvailable(this PhysicalSystem? system) + => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.Available ?? false; + + /// + /// Determine if a system is restricted to dumpers + /// + public static bool IsBanned(this PhysicalSystem system) + => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.IsBanned ?? false; + + /// + /// Determine if a system is restricted to dumpers + /// + public static bool IsBanned(this PhysicalSystem? system) + => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.IsBanned ?? false; + + /// + /// Determine if a system has a CUE pack + /// + public static bool HasCues(this PhysicalSystem system) + => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasCues ?? false; + + /// + /// Determine if a system has a CUE pack + /// + public static bool HasCues(this PhysicalSystem? system) + => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasCues ?? false; + + /// + /// Determine if a system has a DAT + /// + public static bool HasDat(this PhysicalSystem system) + => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasDat ?? false; + + /// + /// Determine if a system has a DAT + /// + public static bool HasDat(this PhysicalSystem? system) + => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasDat ?? false; + + /// + /// Determine if a system has a decrypted keys pack + /// + public static bool HasDkeys(this PhysicalSystem system) + => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasDkeys ?? false; + + /// + /// Determine if a system has a decrypted keys pack + /// + public static bool HasDkeys(this PhysicalSystem? system) + => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasDkeys ?? false; + + /// + /// Determine if a system has a GDI pack + /// + public static bool HasGdi(this PhysicalSystem system) + => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasGdi ?? false; + + /// + /// Determine if a system has a GDI pack + /// + public static bool HasGdi(this PhysicalSystem? system) + => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasGdi ?? false; + + /// + /// Determine if a system has a keys pack + /// + public static bool HasKeys(this PhysicalSystem system) + => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasKeys ?? false; + + /// + /// Determine if a system has a keys pack + /// + public static bool HasKeys(this PhysicalSystem? system) + => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasKeys ?? false; + + /// + /// Determine if a system has an LSD pack + /// + public static bool HasLsd(this PhysicalSystem system) + => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasLsd ?? false; + + /// + /// Determine if a system has an LSD pack + /// + public static bool HasLsd(this PhysicalSystem? system) + => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasLsd ?? false; + + /// + /// Determine if a system has an SBI pack + /// + public static bool HasSbi(this PhysicalSystem system) + => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasSbi ?? false; + + /// + /// Determine if a system has an SBI pack + /// + public static bool HasSbi(this PhysicalSystem? system) + => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasSbi ?? false; + + /// + /// Get the PhysicalSystem enum value for a given string + /// + /// String value to convert + /// PhysicalSystem represented by the string, if possible + public static PhysicalSystem? ToPhysicalSystem(this string? system) + { + // No value means no match + if (system is null || system.Length == 0) + return null; + + system = system.ToLowerInvariant(); + var redumpSystems = (PhysicalSystem[])Enum.GetValues(typeof(PhysicalSystem)); + + // Check short names + int index = Array.FindIndex(redumpSystems, s => system == s.ShortName()?.ToLowerInvariant()); + if (index > -1) + return redumpSystems[index]; + + // Check redump.org short names + index = Array.FindIndex(redumpSystems, s => system == s.ShortNameAlt()?.ToLowerInvariant()); + if (index > -1) + return redumpSystems[index]; + + // Check long names + index = Array.FindIndex(redumpSystems, s => system == s.LongName()?.ToLowerInvariant() + || system == s.LongName()?.Replace(" ", string.Empty)?.ToLowerInvariant()); + if (index > -1) + return redumpSystems[index]; + + return null; + } + + #endregion + #region Region /// diff --git a/SabreTools.RedumpLib/Data/Sections/CommonDiscInfoSection.cs b/SabreTools.RedumpLib/Data/Sections/CommonDiscInfoSection.cs index 6de0085..2e4fb4b 100644 --- a/SabreTools.RedumpLib/Data/Sections/CommonDiscInfoSection.cs +++ b/SabreTools.RedumpLib/Data/Sections/CommonDiscInfoSection.cs @@ -14,8 +14,8 @@ namespace SabreTools.RedumpLib.Data.Sections { // Name not defined by Redump [JsonProperty(PropertyName = "d_system", DefaultValueHandling = DefaultValueHandling.Include)] - [JsonConverter(typeof(SystemConverter))] - public RedumpSystem? System { get; set; } + [JsonConverter(typeof(PhysicalSystemConverter))] + public PhysicalSystem? System { get; set; } // Name not defined by Redump [JsonProperty(PropertyName = "d_media", DefaultValueHandling = DefaultValueHandling.Include)] diff --git a/SabreTools.RedumpLib/RedumpInfo/Client.cs b/SabreTools.RedumpLib/RedumpInfo/Client.cs index dd89def..c185745 100644 --- a/SabreTools.RedumpLib/RedumpInfo/Client.cs +++ b/SabreTools.RedumpLib/RedumpInfo/Client.cs @@ -417,7 +417,7 @@ namespace SabreTools.RedumpLib.RedumpInfo RedumpOrg.Data.SortCategory? sort = null, RedumpOrg.Data.SortDirection? sortDir = null, DumpStatus? status = null, - RedumpSystem? system = null, + PhysicalSystem? system = null, int? page = null) { // Normalize the search query, if needed @@ -512,7 +512,7 @@ namespace SabreTools.RedumpLib.RedumpInfo RedumpOrg.Data.SortCategory? sort = null, RedumpOrg.Data.SortDirection? sortDir = null, DumpStatus? status = null, - RedumpSystem? system = null, + PhysicalSystem? system = null, int? page = null, DiscSubpath[]? discSubpaths = null) { @@ -679,7 +679,7 @@ namespace SabreTools.RedumpLib.RedumpInfo /// Pack type to use to determine the download URL /// System to download packs for /// Byte array containing the downloaded pack, null on error - public async Task DownloadSinglePack(PackType packType, RedumpSystem? system) + public async Task DownloadSinglePack(PackType packType, PhysicalSystem? system) { try { @@ -731,7 +731,7 @@ namespace SabreTools.RedumpLib.RedumpInfo /// Pack type to use to determine the download URL /// System to download packs for /// Output directory to save data to - public async Task DownloadSinglePack(PackType packType, RedumpSystem? system, string? outDir) + public async Task DownloadSinglePack(PackType packType, PhysicalSystem? system, string? outDir) { try { @@ -799,7 +799,7 @@ namespace SabreTools.RedumpLib.RedumpInfo /// System to download packs for /// Output directory to save data to /// Named subfolder for the pack, used optionally - public async Task DownloadSinglePack(PackType packType, RedumpSystem? system, string? outDir, string? subfolder) + public async Task DownloadSinglePack(PackType packType, PhysicalSystem? system, string? outDir, string? subfolder) { try { @@ -1218,7 +1218,7 @@ namespace SabreTools.RedumpLib.RedumpInfo /// /// Pack type to use to determine the download URL /// Systems to download packs for - public async Task> DownloadPacks(PackType packType, RedumpSystem[] systems) + public async Task> DownloadPacks(PackType packType, PhysicalSystem[] systems) { // Determine if the pack type is valid if (!Enum.IsDefined(typeof(PackType), packType)) @@ -1227,7 +1227,7 @@ namespace SabreTools.RedumpLib.RedumpInfo return []; } - var packsDictionary = new Dictionary(); + var packsDictionary = new Dictionary(); foreach (var system in systems) { string longName = system.LongName() ?? $"UNKNOWN_{system}"; @@ -1257,7 +1257,7 @@ namespace SabreTools.RedumpLib.RedumpInfo /// Pack type to use to determine the download URL /// Systems to download packs for /// Output directory to save data to - public async Task DownloadPacks(PackType packType, RedumpSystem[] systems, string? outDir) + public async Task DownloadPacks(PackType packType, PhysicalSystem[] systems, string? outDir) { // Determine if the pack type is valid if (!Enum.IsDefined(typeof(PackType), packType)) @@ -1293,7 +1293,7 @@ namespace SabreTools.RedumpLib.RedumpInfo /// Systems to download packs for /// Output directory to save data to /// Named subfolder for the pack, used optionally - public async Task DownloadPacks(PackType packType, RedumpSystem[] systems, string? outDir, string? subfolder) + public async Task DownloadPacks(PackType packType, PhysicalSystem[] systems, string? outDir, string? subfolder) { // Determine if the pack type is valid if (!Enum.IsDefined(typeof(PackType), packType)) @@ -1410,7 +1410,7 @@ namespace SabreTools.RedumpLib.RedumpInfo /// Pack type to use to determine the support status /// Systems to determine pack availability for /// True if the pack is available for a system, false otherwise - private static bool PackTypeToAvailable(PackType packType, RedumpSystem system) + private static bool PackTypeToAvailable(PackType packType, PhysicalSystem system) { return packType switch { diff --git a/SabreTools.RedumpLib/RedumpInfo/Converters/SystemConverter.cs b/SabreTools.RedumpLib/RedumpInfo/Converters/PhysicalSystemConverter.cs similarity index 60% rename from SabreTools.RedumpLib/RedumpInfo/Converters/SystemConverter.cs rename to SabreTools.RedumpLib/RedumpInfo/Converters/PhysicalSystemConverter.cs index d844f6f..4cf58e1 100644 --- a/SabreTools.RedumpLib/RedumpInfo/Converters/SystemConverter.cs +++ b/SabreTools.RedumpLib/RedumpInfo/Converters/PhysicalSystemConverter.cs @@ -1,18 +1,19 @@ using System; using Newtonsoft.Json; using Newtonsoft.Json.Linq; +using SabreTools.RedumpLib.Data; using SabreTools.RedumpLib.RedumpInfo.Data; namespace SabreTools.RedumpLib.RedumpInfo.Converters { /// - /// Serialize RedumpSystem enum values + /// Serialize PhysicalSystem enum values /// - public class SystemConverter : JsonConverter + public class PhysicalSystemConverter : JsonConverter { public override bool CanRead { get { return true; } } - public override RedumpSystem? ReadJson(JsonReader reader, Type objectType, RedumpSystem? existingValue, bool hasExistingValue, JsonSerializer serializer) + public override PhysicalSystem? ReadJson(JsonReader reader, Type objectType, PhysicalSystem? existingValue, bool hasExistingValue, JsonSerializer serializer) { // If we have a value already, don't overwrite it if (hasExistingValue) @@ -23,10 +24,10 @@ namespace SabreTools.RedumpLib.RedumpInfo.Converters return null; // Try to parse the value - return value.ToRedumpSystem(); + return value.ToPhysicalSystem(); } - public override void WriteJson(JsonWriter writer, RedumpSystem? value, JsonSerializer serializer) + public override void WriteJson(JsonWriter writer, PhysicalSystem? value, JsonSerializer serializer) { JToken t = JToken.FromObject(value.ShortName() ?? string.Empty); t.WriteTo(writer); diff --git a/SabreTools.RedumpLib/RedumpInfo/Data/Enumerations.cs b/SabreTools.RedumpLib/RedumpInfo/Data/Enumerations.cs index a82cc96..6a50cff 100644 --- a/SabreTools.RedumpLib/RedumpInfo/Data/Enumerations.cs +++ b/SabreTools.RedumpLib/RedumpInfo/Data/Enumerations.cs @@ -157,628 +157,4 @@ namespace SabreTools.RedumpLib.RedumpInfo.Data [HumanReadable(LongName = "SBI", ShortName = "sbi")] Sbis, } - - /// - /// List of all known systems - /// - /// TODO: Remove marker items - /// TODO: Double check all flags once the site is live - /// TODO: Add MAXTEST as a debug-only system - /// TODO: Does "Banned" now only mean that things like keys can't be downloaded? - public enum RedumpSystem - { - // TODO: Somehow indicate that these are static paths - #region BIOS Sets - - [System(LongName = "Microsoft Xbox (BIOS)", ShortName = "xbox-bios", HasDat = true)] - MicrosoftXboxBIOS, - - [System(LongName = "Nintendo GameCube (BIOS)", ShortName = "gc-bios", HasDat = true)] - NintendoGameCubeBIOS, - - [System(LongName = "Sony PlayStation (BIOS)", ShortName = "psx-bios", HasDat = true)] - SonyPlayStationBIOS, - - [System(LongName = "Sony PlayStation 2 (BIOS)", ShortName = "ps2-bios", HasDat = true)] - SonyPlayStation2BIOS, - - #endregion - - #region Disc-Based Consoles - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Atari Jaguar CD Interactive Multimedia System", ShortName = "AJCD", HasCues = true, HasDat = true)] - AtariJaguarCDInteractiveMultimediaSystem, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Bandai Pippin", ShortName = "PIPPIN", HasCues = true, HasDat = true)] - BandaiPippin, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Bandai Playdia Quick Interactive System", ShortName = "QIS", HasCues = true, HasDat = true)] - BandaiPlaydiaQuickInteractiveSystem, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Commodore Amiga CD32", ShortName = "CD32", HasCues = true, HasDat = true)] - CommodoreAmigaCD32, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Commodore Amiga CDTV", ShortName = "CDTV", HasCues = true, HasDat = true)] - CommodoreAmigaCDTV, - - [System(Category = SystemCategory.DiscBasedConsole, Available = false, LongName = "Envizions EVO Smart Console")] - EnvizionsEVOSmartConsole, - - [System(Category = SystemCategory.DiscBasedConsole, Available = false, LongName = "Fujitsu FM Towns Marty")] - FujitsuFMTownsMarty, - - [System(Category = SystemCategory.DiscBasedConsole, Available = false, LongName = "Hasbro iON Educational Gaming System")] - HasbroiONEducationalGamingSystem, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Hasbro VideoNow", ShortName = "HVN", IsBanned = true, HasCues = true, HasDat = true)] - HasbroVideoNow, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Hasbro VideoNow Color", ShortName = "HVNC", IsBanned = true, HasCues = true, HasDat = true)] - HasbroVideoNowColor, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Hasbro VideoNow Jr.", ShortName = "HVNJR", IsBanned = true, HasCues = true, HasDat = true)] - HasbroVideoNowJr, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Hasbro VideoNow XP", ShortName = "HVNXP", IsBanned = true, HasCues = true, HasDat = true)] - HasbroVideoNowXP, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Mattel Fisher-Price iXL", ShortName = "IXL", HasCues = true, HasDat = true)] - MattelFisherPriceiXL, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Mattel HyperScan", ShortName = "HS", HasCues = true, HasDat = true)] - MattelHyperScan, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Memorex Visual Information System", ShortName = "VIS", HasCues = true, HasDat = true)] - MemorexVisualInformationSystem, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Microsoft Xbox", ShortName = "XBOX", HasCues = true, HasDat = true)] - MicrosoftXbox, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Microsoft Xbox 360", ShortName = "XBOX360", HasCues = true, HasDat = true)] - MicrosoftXbox360, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Microsoft Xbox One", ShortName = "XBOXONE", IsBanned = true, HasDat = true)] - MicrosoftXboxOne, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Microsoft Xbox Series X", ShortName = "XBOXSX", IsBanned = true, HasDat = true)] - MicrosoftXboxSeriesXS, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "NEC PC Engine CD & TurboGrafx CD", ShortName = "PCE", HasCues = true, HasDat = true)] - NECPCEngineCDTurboGrafxCD, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "NEC PC-FX & PC-FXGA", ShortName = "PC-FX", HasCues = true, HasDat = true)] - NECPCFXPCFXGA, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Nintendo GameCube", ShortName = "GC", HasDat = true)] - NintendoGameCube, - - [System(Category = SystemCategory.DiscBasedConsole, Available = false, LongName = "Nintendo-Sony Super NES CD-ROM System")] - NintendoSonySuperNESCDROMSystem, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Nintendo Wii", ShortName = "WII", HasDat = true)] - NintendoWii, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Nintendo Wii U", ShortName = "WIIU", IsBanned = true, HasDat = true, HasKeys = true)] - NintendoWiiU, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Panasonic 3DO Interactive Multiplayer", ShortName = "3DO", HasCues = true, HasDat = true)] - Panasonic3DOInteractiveMultiplayer, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Philips CD-i", ShortName = "CDI", HasCues = true, HasDat = true)] - PhilipsCDi, - - [System(Category = SystemCategory.DiscBasedConsole, Available = false, LongName = "Playmaji Polymega")] - PlaymajiPolymega, - - [System(Category = SystemCategory.DiscBasedConsole, Available = false, LongName = "Pioneer LaserActive")] - PioneerLaserActive, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Sega Dreamcast", ShortName = "DC", HasCues = true, HasDat = true)] - SegaDreamcast, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Sega Mega CD & Sega CD", ShortName = "MCD", HasCues = true, HasDat = true)] - SegaMegaCDSegaCD, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Sega Saturn", ShortName = "SS", HasCues = true, HasDat = true)] - SegaSaturn, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Neo Geo CD", ShortName = "NGCD", HasCues = true, HasDat = true)] - SNKNeoGeoCD, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Sony PlayStation", ShortName = "PSX", HasCues = true, HasDat = true, HasSbi = true)] - SonyPlayStation, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Sony PlayStation 2", ShortName = "PS2", HasCues = true, HasDat = true)] - SonyPlayStation2, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Sony PlayStation 3", ShortName = "PS3", HasCues = true, HasDat = true, HasKeys = true)] - SonyPlayStation3, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Sony PlayStation 4", ShortName = "PS4", IsBanned = true, HasDat = true)] - SonyPlayStation4, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Sony PlayStation 5", ShortName = "PS5", IsBanned = true, HasDat = true)] - SonyPlayStation5, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Sony PlayStation Portable", ShortName = "PSP", HasDat = true)] - SonyPlayStationPortable, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "VM Labs NUON", ShortName = "NUON", HasDat = true)] - VMLabsNUON, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "VTech V.Flash & V.Smile Pro", ShortName = "VFLASH", HasCues = true, HasDat = true)] - VTechVFlashVSmilePro, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "ZAPiT Games Game Wave Family Entertainment System", ShortName = "GAMEWAVE", HasDat = true)] - ZAPiTGamesGameWaveFamilyEntertainmentSystem, - - // End of console section delimiter - MarkerDiscBasedConsoleEnd, - - #endregion - - #region Cartridge-Based and Other Consoles - - /* - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Amstrad GX-4000")] - AmstradGX4000, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "APF Microcomputer System")] - APFMicrocomputerSystem, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Atari 2600 & VCS")] - Atari2600VCS, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Atari 5200")] - Atari5200, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Atari 7800")] - Atari7800, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Atari Jaguar")] - AtariJaguar, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Atari XEGS")] - AtariXEGS, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Audiosonic 1292 Advanced Programmable Video System")] - Audiosonic1292AdvancedProgrammableVideoSystem, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Bally Astrocade")] - BallyAstrocade, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Bit Corporation Dina")] - BitCorporationDina, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Casio Loopy")] - CasioLoopy, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Casio PV-1000")] - CasioPV1000, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Commodore 64 Games System")] - Commodore64GamesSystem, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Daewoo Electronics Zemmix")] - DaewooElectronicsZemmix, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Emerson Arcadia 2001")] - EmersonArcadia2001, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Epoch Cassette Vision")] - EpochCassetteVision, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Epoch Super Cassette Vision")] - EpochSuperCassetteVision, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Fairchild Channel F")] - FairchildChannelF, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Funtech Super A'Can")] - FuntechSuperACan, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "GCE Vectrex")] - GCEVectrex, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Heber BBC Bridge Companion")] - HeberBBCBridgeCompanion, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Interton VC-4000")] - IntertonVC4000, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "JungleTac Vii")] - JungleTacVii, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "LeapFrog ClickStart")] - LeapFrogClickStart, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "LJN VideoArt")] - LJNVideoArt, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Magnavox Odyssey 2")] - MagnavoxOdyssey2, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Mattel Intellivision")] - MattelIntellivision, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "NEC PC Engine & TurboGrafx-16")] - NECPCEngineTurboGrafx16, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Nichibutsu MyVision")] - NichibutsuMyVision, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Nintendo 64")] - Nintendo64, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Nintendo 64DD")] - Nintendo64DD, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Nintendo Famicom & Nintendo Entertainment System")] - NintendoFamicomNintendoEntertainmentSystem, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Nintendo Famicom Disk System")] - NintendoFamicomDiskSystem, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Nintendo Super Famicom & Super Nintendo Entertainment System")] - NintendoSuperFamicomSuperNintendoEntertainmentSystem, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Nintendo Switch")] - NintendoSwitch, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Philips Videopac+ & G7400")] - PhilipsVideopacPlusG7400, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "RCA Studio-II")] - RCAStudioII, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Sega 32X")] - Sega32X, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Sega Mark III & Master System")] - SegaMarkIIIMasterSystem, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Sega MegaDrive & Genesis")] - SegaMegaDriveGenesis, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Sega SG-1000")] - SegaSG1000, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "SNK NeoGeo")] - SNKNeoGeo, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "SSD COMPANY LIMITED XaviXPORT")] - SSDCOMPANYLIMITEDXaviXPORT, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "ViewMaster Interactive Vision")] - ViewMasterInteractiveVision, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "V.Tech CreatiVision")] - VTechCreatiVision, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "V.Tech V.Smile")] - VTechVSmile, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "V.Tech Socrates")] - VTechSocrates, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Worlds of Wonder ActionMax")] - WorldsOfWonderActionMax, - - // End of other console delimiter - MarkerOtherConsoleEnd, - */ - - #endregion - - #region Computers - - [System(Category = SystemCategory.Computer, LongName = "Acorn Archimedes", ShortName = "ARCH", HasCues = true, HasDat = true)] - AcornArchimedes, - - [System(Category = SystemCategory.Computer, LongName = "Apple Macintosh", ShortName = "MAC", HasCues = true, HasDat = true, HasSbi = true)] - AppleMacintosh, - - [System(Category = SystemCategory.Computer, LongName = "Commodore Amiga CD", ShortName = "ACD", HasCues = true, HasDat = true)] - CommodoreAmigaCD, - - [System(Category = SystemCategory.Computer, LongName = "Fujitsu FM Towns series", ShortName = "FMT", HasCues = true, HasDat = true)] - FujitsuFMTownsseries, - - [System(Category = SystemCategory.Computer, LongName = "IBM PC compatible", ShortName = "PC", HasCues = true, HasDat = true, HasSbi = true)] - IBMPCcompatible, - - [System(Category = SystemCategory.Computer, LongName = "NEC PC-88 series", ShortName = "PC-88", HasCues = true, HasDat = true)] - NECPC88series, - - [System(Category = SystemCategory.Computer, LongName = "NEC PC-98 series", ShortName = "PC-98", HasCues = true, HasDat = true)] - NECPC98series, - - [System(Category = SystemCategory.Computer, LongName = "Sharp X68000", ShortName = "X68K", HasCues = true, HasDat = true)] - SharpX68000, - - // End of computer section delimiter - MarkerComputerEnd, - - #endregion - - #region Arcade - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Amiga CUBO CD32")] - AmigaCUBOCD32, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "American Laser Games 3DO")] - AmericanLaserGames3DO, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Atari 3DO")] - Atari3DO, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Atronic")] - Atronic, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "AUSCOM System 1")] - AUSCOMSystem1, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Bally Game Magic")] - BallyGameMagic, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Capcom CP System III")] - CapcomCPSystemIII, - - [System(Category = SystemCategory.Arcade, LongName = "funworld Photo Play", ShortName = "FPP", HasCues = true, HasDat = true)] - funworldPhotoPlay, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "FuRyu & Omron Purikura")] - FuRyuOmronPurikura, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Global VR PC-based Systems")] - GlobalVRVarious, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Global VR Vortek")] - GlobalVRVortek, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Global VR Vortek V3")] - GlobalVRVortekV3, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "ICE PC-based Hardware")] - ICEPCHardware, - - [System(Category = SystemCategory.Arcade, LongName = "Incredible Technologies Eagle", ShortName = "ITE", HasCues = true, HasDat = true)] - IncredibleTechnologiesEagle, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Incredible Technologies PC-based Systems")] - IncredibleTechnologiesVarious, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "JVL iTouch")] - JVLiTouch, - - [System(Category = SystemCategory.Arcade, LongName = "Konami e-Amusement", ShortName = "KEA", HasCues = true, HasDat = true)] - KonamieAmusement, - - [System(Category = SystemCategory.Arcade, LongName = "Konami FireBeat", ShortName = "KFB", HasCues = true, HasDat = true)] - KonamiFireBeat, - - [System(Category = SystemCategory.Arcade, LongName = "Konami M2", ShortName = "KM2", IsBanned = true, HasCues = true, HasDat = true)] - KonamiM2, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Konami Python")] - KonamiPython, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Konami Python 2")] - KonamiPython2, - - [System(Category = SystemCategory.Arcade, LongName = "Konami System 573", ShortName = "KS573", HasCues = true, HasDat = true)] - KonamiSystem573, - - [System(Category = SystemCategory.Arcade, LongName = "Konami System GV", ShortName = "KSGV", HasCues = true, HasDat = true)] - KonamiSystemGV, - - [System(Category = SystemCategory.Arcade, LongName = "Konami Twinkle", ShortName = "kt")] - KonamiTwinkle, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Konami PC-based Systems")] - KonamiVarious, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Merit Industries Boardwalk")] - MeritIndustriesBoardwalk, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Merit Industries MegaTouch Force")] - MeritIndustriesMegaTouchForce, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Merit Industries MegaTouch ION")] - MeritIndustriesMegaTouchION, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Merit Industries MegaTouch Maxx")] - MeritIndustriesMegaTouchMaxx, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Merit Industries MegaTouch XL")] - MeritIndustriesMegaTouchXL, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Namco Purikura")] - NamcoPurikura, - - [System(Category = SystemCategory.Arcade, LongName = "Namco · Sega · Nintendo Triforce", ShortName = "TRF", HasCues = true, HasDat = true)] - NamcoSegaNintendoTriforce, - - [System(Category = SystemCategory.Arcade, LongName = "Namco System 12", ShortName = "ns12")] - NamcoSystem12, - - [System(Category = SystemCategory.Arcade, LongName = "Namco System 246 / System 256", ShortName = "NS246", HasCues = true, HasDat = true)] - NamcoSystem246256, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "New Jatre CD-i")] - NewJatreCDi, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Nichibutsu High Rate System")] - NichibutsuHighRateSystem, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Nichibutsu Super CD")] - NichibutsuSuperCD, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Nichibutsu X-Rate System")] - NichibutsuXRateSystem, - - [System(Category = SystemCategory.Arcade, LongName = "Panasonic M2", ShortName = "M2", IsBanned = true, HasCues = true, HasDat = true)] - PanasonicM2, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "PhotoPlay PC-based Systems")] - PhotoPlayVarious, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Raw Thrills PC-based Systems")] - RawThrillsVarious, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Sega ALLS")] - SegaALLS, - - [System(Category = SystemCategory.Arcade, LongName = "Sega Chihiro", ShortName = "CHIHIRO", HasCues = true, HasDat = true)] - SegaChihiro, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Sega Europa-R")] - SegaEuropaR, - - [System(Category = SystemCategory.Arcade, LongName = "Sega Lindbergh", ShortName = "LINDBERGH", HasDat = true)] - SegaLindbergh, - - [System(Category = SystemCategory.Arcade, LongName = "Sega Naomi", ShortName = "NAOMI", HasCues = true, HasDat = true)] - SegaNaomi, - - [System(Category = SystemCategory.Arcade, LongName = "Sega Naomi 2", ShortName = "NAOMI2", HasCues = true, HasDat = true)] - SegaNaomi2, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Sega NAOMI Satellite Terminal PC")] - SegaNaomiSatelliteTerminalPC, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Sega Nu")] - SegaNu, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Sega Nu 1.1")] - SegaNu11, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Sega Nu 2")] - SegaNu2, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Sega Nu SX")] - SegaNuSX, - - [System(Category = SystemCategory.Arcade, LongName = "Sega RingEdge", ShortName = "SRE", HasDat = true)] - SegaRingEdge, - - [System(Category = SystemCategory.Arcade, LongName = "Sega RingEdge 2", ShortName = "SRE2", HasDat = true)] - SegaRingEdge2, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Sega RingWide")] - SegaRingWide, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Sega System 32")] - SegaSystem32, - - [System(Category = SystemCategory.Arcade, LongName = "Sega Titan Video", ShortName = "stv")] - SegaTitanVideo, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Seibu CATS System")] - SeibuCATSSystem, - - [System(Category = SystemCategory.Arcade, LongName = "TAB-Austria Quizard", ShortName = "QUIZARD", HasCues = true, HasDat = true)] - TABAustriaQuizard, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Tsunami TsuMo Multi-Game Motion System")] - TsunamiTsuMoMultiGameMotionSystem, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "UltraCade PC-based Systems")] - UltraCade, - - // End of arcade section delimiter - MarkerArcadeEnd, - - #endregion - - #region Other - - [System(Category = SystemCategory.Other, LongName = "Audio CD", ShortName = "AUDIO-CD", IsBanned = true, HasCues = true, HasDat = true)] - AudioCD, - - [System(Category = SystemCategory.Other, LongName = "BD-Video", ShortName = "BD-VIDEO", IsBanned = true, HasDat = true)] - BDVideo, - - [System(Category = SystemCategory.Other, Available = false, LongName = "DVD-Audio")] - DVDAudio, - - [System(Category = SystemCategory.Other, LongName = "DVD-Video", ShortName = "DVD-VIDEO", IsBanned = true, HasDat = true)] - DVDVideo, - - [System(Category = SystemCategory.Other, LongName = "Enhanced CD", ShortName = "ENHANCED-CD", IsBanned = true)] - EnhancedCD, - - [System(Category = SystemCategory.Other, LongName = "HD DVD-Video", ShortName = "HDDVD-VIDEO", IsBanned = true, HasDat = true)] - HDDVDVideo, - - [System(Category = SystemCategory.Other, LongName = "Navisoft Naviken 2.1", ShortName = "NAVI21", IsBanned = true, HasCues = true, HasDat = true)] - NavisoftNaviken21, - - [System(Category = SystemCategory.Other, LongName = "Palm OS", ShortName = "PALM", HasCues = true, HasDat = true)] - PalmOS, - - [System(Category = SystemCategory.Other, LongName = "Photo CD", ShortName = "PHOTO-CD", HasCues = true, HasDat = true)] - PhotoCD, - - [System(Category = SystemCategory.Other, LongName = "PlayStation GameShark Updates", ShortName = "PSXGS", HasCues = true, HasDat = true)] - PlayStationGameSharkUpdates, - - [System(Category = SystemCategory.Other, LongName = "Pocket PC", ShortName = "PPC", HasCues = true, HasDat = true)] - PocketPC, - - [System(Category = SystemCategory.Other, Available = false, LongName = "Psion")] - Psion, - - [System(Category = SystemCategory.Other, Available = false, LongName = "Rainbow Disc")] - RainbowDisc, - - [System(Category = SystemCategory.Other, LongName = "Sega Prologue 21 Multimedia Karaoke System", ShortName = "SP21", HasCues = true, HasDat = true)] - SegaPrologue21MultimediaKaraokeSystem, - - [System(Category = SystemCategory.Other, Available = false, LongName = "Sharp Zaurus")] - SharpZaurus, - - [System(Category = SystemCategory.Other, Available = false, LongName = "Sony Electronic Book")] - SonyElectronicBook, - - [System(Category = SystemCategory.Other, Available = false, LongName = "Super Audio CD")] - SuperAudioCD, - - [System(Category = SystemCategory.Other, LongName = "Tao iKTV", ShortName = "IKTV")] - TaoiKTV, - - [System(Category = SystemCategory.Other, LongName = "Tomy Kiss-Site", ShortName = "KSITE", HasCues = true, HasDat = true)] - TomyKissSite, - - [System(Category = SystemCategory.Other, LongName = "Video CD", ShortName = "VCD", IsBanned = true, HasCues = true, HasDat = true)] - VideoCD, - - // End of other section delimiter - MarkerOtherEnd, - - #endregion - } - - /// - /// List of system categories - /// - public enum SystemCategory - { - NONE = 0, - - [HumanReadable(LongName = "Disc-Based Consoles")] - DiscBasedConsole, - - [HumanReadable(LongName = "Other Consoles")] - OtherConsole, - - [HumanReadable(LongName = "Computers")] - Computer, - - [HumanReadable(LongName = "Arcade")] - Arcade, - - [HumanReadable(LongName = "Other")] - Other, - }; } diff --git a/SabreTools.RedumpLib/RedumpInfo/Data/Extensions.cs b/SabreTools.RedumpLib/RedumpInfo/Data/Extensions.cs index ea591c6..e856b71 100644 --- a/SabreTools.RedumpLib/RedumpInfo/Data/Extensions.cs +++ b/SabreTools.RedumpLib/RedumpInfo/Data/Extensions.cs @@ -12,772 +12,6 @@ namespace SabreTools.RedumpLib.RedumpInfo.Data { #region Cross-Enumeration - /// - /// Get a list of valid MediaTypes for a given RedumpSystem - /// - /// RedumpSystem value to check - /// MediaTypes, if possible - public static List MediaTypes(this RedumpSystem? system) - { - var types = new List(); - -#pragma warning disable IDE0010 // Add missing cases - switch (system) - { - #region Consoles - - // https://en.wikipedia.org/wiki/Atari_Jaguar_CD - case RedumpSystem.AtariJaguarCDInteractiveMultimediaSystem: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Playdia - case RedumpSystem.BandaiPlaydiaQuickInteractiveSystem: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Apple_Bandai_Pippin - case RedumpSystem.BandaiPippin: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Amiga_CD32 - case RedumpSystem.CommodoreAmigaCD32: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Commodore_CDTV - case RedumpSystem.CommodoreAmigaCDTV: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/EVO_Smart_Console - case RedumpSystem.EnvizionsEVOSmartConsole: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // https://en.wikipedia.org/wiki/FM_Towns_Marty - case RedumpSystem.FujitsuFMTownsMarty: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.FloppyDisk); - break; - - // http://videogamekraken.com/ion-educational-gaming-system-by-hasbro - case RedumpSystem.HasbroiONEducationalGamingSystem: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/VideoNow - case RedumpSystem.HasbroVideoNow: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/VideoNow - case RedumpSystem.HasbroVideoNowColor: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/VideoNow - case RedumpSystem.HasbroVideoNowJr: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/VideoNow - case RedumpSystem.HasbroVideoNowXP: - types.Add(PhysicalMediaType.CDROM); - break; - - case RedumpSystem.MattelFisherPriceiXL: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/HyperScan - case RedumpSystem.MattelHyperScan: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Xbox_(console) - case RedumpSystem.MicrosoftXbox: - types.Add(PhysicalMediaType.DVD); - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Xbox_360 - case RedumpSystem.MicrosoftXbox360: - types.Add(PhysicalMediaType.DVD); - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Xbox_One - case RedumpSystem.MicrosoftXboxOne: - types.Add(PhysicalMediaType.BluRay); - break; - - // https://en.wikipedia.org/wiki/Xbox_Series_X_and_Series_S - case RedumpSystem.MicrosoftXboxSeriesXS: - types.Add(PhysicalMediaType.BluRay); - break; - - // https://en.wikipedia.org/wiki/TurboGrafx-16 - case RedumpSystem.NECPCEngineCDTurboGrafxCD: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/PC-FX - case RedumpSystem.NECPCFXPCFXGA: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/GameCube - case RedumpSystem.NintendoGameCube: - types.Add(PhysicalMediaType.DVD); // Only added here to help users; not strictly correct - types.Add(PhysicalMediaType.NintendoGameCubeGameDisc); - break; - - // https://en.wikipedia.org/wiki/Super_NES_CD-ROM - case RedumpSystem.NintendoSonySuperNESCDROMSystem: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Wii - case RedumpSystem.NintendoWii: - types.Add(PhysicalMediaType.DVD); // Only added here to help users; not strictly correct - types.Add(PhysicalMediaType.NintendoWiiOpticalDisc); - break; - - // https://en.wikipedia.org/wiki/Wii_U - case RedumpSystem.NintendoWiiU: - types.Add(PhysicalMediaType.NintendoWiiUOpticalDisc); - break; - - // https://en.wikipedia.org/wiki/3DO_Interactive_Multiplayer - case RedumpSystem.Panasonic3DOInteractiveMultiplayer: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Philips_CD-i - case RedumpSystem.PhilipsCDi: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Polymega - case RedumpSystem.PlaymajiPolymega: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // https://en.wikipedia.org/wiki/LaserActive - case RedumpSystem.PioneerLaserActive: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.LaserDisc); - break; - - // https://en.wikipedia.org/wiki/Sega_CD - case RedumpSystem.SegaMegaCDSegaCD: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Dreamcast - case RedumpSystem.SegaDreamcast: - types.Add(PhysicalMediaType.CDROM); // Low density partition, MIL-CD - types.Add(PhysicalMediaType.GDROM); // High density partition - break; - - // https://en.wikipedia.org/wiki/Sega_Saturn - case RedumpSystem.SegaSaturn: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Neo_Geo_CD - case RedumpSystem.SNKNeoGeoCD: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/PlayStation_(console) - case RedumpSystem.SonyPlayStation: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/PlayStation_2 - case RedumpSystem.SonyPlayStation2: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // https://en.wikipedia.org/wiki/PlayStation_3 - case RedumpSystem.SonyPlayStation3: - types.Add(PhysicalMediaType.BluRay); - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // https://en.wikipedia.org/wiki/PlayStation_4 - case RedumpSystem.SonyPlayStation4: - types.Add(PhysicalMediaType.BluRay); - break; - - // https://en.wikipedia.org/wiki/PlayStation_5 - case RedumpSystem.SonyPlayStation5: - types.Add(PhysicalMediaType.BluRay); - break; - - // https://en.wikipedia.org/wiki/PlayStation_Portable - case RedumpSystem.SonyPlayStationPortable: - types.Add(PhysicalMediaType.UMD); - types.Add(PhysicalMediaType.CDROM); // Development discs only - types.Add(PhysicalMediaType.DVD); // Development discs only - break; - - // https://en.wikipedia.org/wiki/Tandy_Video_Information_System - case RedumpSystem.MemorexVisualInformationSystem: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Nuon_(DVD_technology) - case RedumpSystem.VMLabsNUON: - types.Add(PhysicalMediaType.DVD); - break; - - // https://en.wikipedia.org/wiki/V.Flash - case RedumpSystem.VTechVFlashVSmilePro: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Game_Wave_Family_Entertainment_System - case RedumpSystem.ZAPiTGamesGameWaveFamilyEntertainmentSystem: - types.Add(PhysicalMediaType.CDROM); // Firmware discs only(?) - types.Add(PhysicalMediaType.DVD); - break; - - #endregion - - #region Computers - - // https://en.wikipedia.org/wiki/Acorn_Archimedes - case RedumpSystem.AcornArchimedes: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.FloppyDisk); - break; - - // https://en.wikipedia.org/wiki/Macintosh - case RedumpSystem.AppleMacintosh: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - types.Add(PhysicalMediaType.FloppyDisk); - types.Add(PhysicalMediaType.HardDisk); - break; - - // https://en.wikipedia.org/wiki/Amiga - case RedumpSystem.CommodoreAmigaCD: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.FloppyDisk); - break; - - // https://en.wikipedia.org/wiki/FM_Towns - case RedumpSystem.FujitsuFMTownsseries: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/IBM_PC_compatible - case RedumpSystem.IBMPCcompatible: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - types.Add(PhysicalMediaType.BluRay); - types.Add(PhysicalMediaType.FloppyDisk); - types.Add(PhysicalMediaType.HardDisk); - types.Add(PhysicalMediaType.DataCartridge); - break; - - // https://en.wikipedia.org/wiki/PC-8800_series - case RedumpSystem.NECPC88series: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.FloppyDisk); - break; - - // https://en.wikipedia.org/wiki/PC-9800_series - case RedumpSystem.NECPC98series: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - types.Add(PhysicalMediaType.FloppyDisk); - break; - - // https://en.wikipedia.org/wiki/X68000 - case RedumpSystem.SharpX68000: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.FloppyDisk); - break; - - #endregion - - #region Arcade - - // https://www.bigbookofamigahardware.com/bboah/product.aspx?id=36 - case RedumpSystem.AmigaCUBOCD32: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Orbatak - case RedumpSystem.AmericanLaserGames3DO: - types.Add(PhysicalMediaType.CDROM); - break; - - // http://system16.com/hardware.php?id=779 - case RedumpSystem.Atari3DO: - types.Add(PhysicalMediaType.CDROM); - break; - - // http://newlifegames.net/nlg/index.php?topic=22003.0 - // http://newlifegames.net/nlg/index.php?topic=5486.msg119440 - case RedumpSystem.Atronic: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // https://www.arcade-museum.com/members/member_detail.php?member_id=406530 - case RedumpSystem.AUSCOMSystem1: - types.Add(PhysicalMediaType.CDROM); - break; - - // http://newlifegames.net/nlg/index.php?topic=285.0 - case RedumpSystem.BallyGameMagic: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/CP_System_III - case RedumpSystem.CapcomCPSystemIII: - types.Add(PhysicalMediaType.CDROM); - break; - - // UNKNOWN - case RedumpSystem.funworldPhotoPlay: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/FuRyu - case RedumpSystem.FuRyuOmronPurikura: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // UNKNOWN - case RedumpSystem.GlobalVRVarious: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://service.globalvr.com/troubleshooting/vortek.html - case RedumpSystem.GlobalVRVortek: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://service.globalvr.com/downloads/v3/040-1001-01c-V3-System-Manual.pdf - case RedumpSystem.GlobalVRVortekV3: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://www.icegame.com/games - case RedumpSystem.ICEPCHardware: - types.Add(PhysicalMediaType.DVD); - break; - - // https://github.com/mamedev/mame/blob/master/src/mame/drivers/iteagle.cpp - case RedumpSystem.IncredibleTechnologiesEagle: - types.Add(PhysicalMediaType.CDROM); - break; - - // UNKNOWN - case RedumpSystem.IncredibleTechnologiesVarious: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // UNKNOWN - case RedumpSystem.JVLiTouch: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // https://en.wikipedia.org/wiki/E-Amusement - case RedumpSystem.KonamieAmusement: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // http://system16.com/hardware.php?id=828 - case RedumpSystem.KonamiFireBeat: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // http://system16.com/hardware.php?id=577 - case RedumpSystem.KonamiSystemGV: - types.Add(PhysicalMediaType.CDROM); - break; - - // http://system16.com/hardware.php?id=575 - case RedumpSystem.KonamiM2: - types.Add(PhysicalMediaType.CDROM); - break; - - // http://system16.com/hardware.php?id=586 - // http://system16.com/hardware.php?id=977 - case RedumpSystem.KonamiPython: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // http://system16.com/hardware.php?id=976 - // http://system16.com/hardware.php?id=831 - case RedumpSystem.KonamiPython2: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // http://system16.com/hardware.php?id=582 - // http://system16.com/hardware.php?id=822 - // http://system16.com/hardware.php?id=823 - case RedumpSystem.KonamiSystem573: - types.Add(PhysicalMediaType.CDROM); - break; - - // http://system16.com/hardware.php?id=827 - case RedumpSystem.KonamiTwinkle: - types.Add(PhysicalMediaType.CDROM); - break; - - // UNKNOWN - case RedumpSystem.KonamiVarious: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // http://www.meritgames.com/Support_Center/manuals/PM0591-01.pdf - case RedumpSystem.MeritIndustriesBoardwalk: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // http://www.meritgames.com/Support_Center/Force%20Elite/PM0380-09.pdf - // http://www.meritgames.com/Support_Center/Force%20Upright/PM0382-07%20FORCE%20Upright%20manual.pdf - // http://www.meritgames.com/Support_Center/Force%20Upright/PM0383-07%20FORCE%20Upright%20manual.pdf - case RedumpSystem.MeritIndustriesMegaTouchForce: - types.Add(PhysicalMediaType.CDROM); - break; - - // http://www.meritgames.com/Service%20Center/Ion%20Troubleshooting.pdf - case RedumpSystem.MeritIndustriesMegaTouchION: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // http://www.meritgames.com/Support_Center/EZ%20Maxx/Manuals/MAXX%20Elite%20with%20coin.pdf - // http://www.meritgames.com/Support_Center/EZ%20Maxx/Manuals/MAXX%20Elite.pdf - // http://www.meritgames.com/Support_Center/manuals/90003010%20Maxx%20TSM_Rev%20C.pdf - case RedumpSystem.MeritIndustriesMegaTouchMaxx: - types.Add(PhysicalMediaType.CDROM); - break; - - // http://www.meritgames.com/Support_Center/manuals/pm0076_OA_Megatouch%20XL%20Trouble%20Shooting%20Manual.pdf - // http://www.meritgames.com/Support_Center/MEGA%20XL/manuals/Megatouch_XL_pm0109-0D.pdf - // http://www.meritgames.com/Support_Center/MEGA%20XL/manuals/Megatouch_XL_Super_5000_manual.pdf - case RedumpSystem.MeritIndustriesMegaTouchXL: - types.Add(PhysicalMediaType.CDROM); - break; - - // UNKNOWN - case RedumpSystem.NamcoPurikura: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // http://system16.com/hardware.php?id=543 - // http://system16.com/hardware.php?id=546 - // http://system16.com/hardware.php?id=872 - case RedumpSystem.NamcoSystem246256: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // http://system16.com/hardware.php?id=545 - case RedumpSystem.NamcoSegaNintendoTriforce: - types.Add(PhysicalMediaType.CDROM); // Low density partition - types.Add(PhysicalMediaType.GDROM); // High density partition - break; - - // http://system16.com/hardware.php?id=535 - case RedumpSystem.NamcoSystem12: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://www.arcade-history.com/?n=the-yakyuuken-part-1&page=detail&id=33049 - case RedumpSystem.NewJatreCDi: - types.Add(PhysicalMediaType.CDROM); - break; - - // http://blog.system11.org/?p=2499 - case RedumpSystem.NichibutsuHighRateSystem: - types.Add(PhysicalMediaType.DVD); - break; - - // http://blog.system11.org/?p=2514 - case RedumpSystem.NichibutsuSuperCD: - types.Add(PhysicalMediaType.CDROM); - break; - - // http://collectedit.com/collectors/shou-time-213/arcade-pcbs-281/x-rate-dvd-series-17-newlywed-life-japan-by-nichibutsu-32245 - case RedumpSystem.NichibutsuXRateSystem: - types.Add(PhysicalMediaType.DVD); - break; - - // https://en.wikipedia.org/wiki/Panasonic_M2 - case RedumpSystem.PanasonicM2: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // https://github.com/mamedev/mame/blob/master/src/mame/drivers/photoply.cpp - case RedumpSystem.PhotoPlayVarious: - types.Add(PhysicalMediaType.CDROM); - break; - - // UNKNOWN - case RedumpSystem.RawThrillsVarious: - types.Add(PhysicalMediaType.DVD); - break; - - // UNKNOWN - case RedumpSystem.SegaALLS: - types.Add(PhysicalMediaType.DVD); - break; - - // http://system16.com/hardware.php?id=729 - case RedumpSystem.SegaChihiro: - types.Add(PhysicalMediaType.CDROM); // Low density partition - types.Add(PhysicalMediaType.GDROM); // High density partition - break; - - // http://system16.com/hardware.php?id=907 - case RedumpSystem.SegaEuropaR: - types.Add(PhysicalMediaType.DVD); - break; - - // http://system16.com/hardware.php?id=985 - // http://system16.com/hardware.php?id=731 - // http://system16.com/hardware.php?id=984 - // http://system16.com/hardware.php?id=986 - case RedumpSystem.SegaLindbergh: - types.Add(PhysicalMediaType.DVD); - break; - - // http://system16.com/hardware.php?id=721 - // http://system16.com/hardware.php?id=723 - // http://system16.com/hardware.php?id=906 - // http://system16.com/hardware.php?id=722 - case RedumpSystem.SegaNaomi: - types.Add(PhysicalMediaType.CDROM); // Low density partition - types.Add(PhysicalMediaType.GDROM); // High density partition - break; - - // http://system16.com/hardware.php?id=725 - // http://system16.com/hardware.php?id=726 - // http://system16.com/hardware.php?id=727 - case RedumpSystem.SegaNaomi2: - types.Add(PhysicalMediaType.CDROM); // Low density partition - types.Add(PhysicalMediaType.GDROM); // High density partition - break; - - // https://segaretro.org/Sega_NAOMI#NAOMI_Satellite_Terminal - case RedumpSystem.SegaNaomiSatelliteTerminalPC: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // https://en.wikipedia.org/wiki/List_of_Sega_arcade_system_boards#Sega_Nu - case RedumpSystem.SegaNu: - types.Add(PhysicalMediaType.DVD); - break; - - // https://en.wikipedia.org/wiki/List_of_Sega_arcade_system_boards#Sega_Nu - case RedumpSystem.SegaNu11: - types.Add(PhysicalMediaType.DVD); - break; - - // https://en.wikipedia.org/wiki/List_of_Sega_arcade_system_boards#Sega_Nu - case RedumpSystem.SegaNu2: - types.Add(PhysicalMediaType.DVD); - break; - - // https://segaretro.org/Nu_SX - case RedumpSystem.SegaNuSX: - types.Add(PhysicalMediaType.DVD); - break; - - // http://system16.com/hardware.php?id=910 - // https://en.wikipedia.org/wiki/List_of_Sega_arcade_system_boards#Sega_Ring_series - case RedumpSystem.SegaRingEdge: - types.Add(PhysicalMediaType.DVD); - break; - - // http://system16.com/hardware.php?id=982 - // https://en.wikipedia.org/wiki/List_of_Sega_arcade_system_boards#Sega_Ring_series - case RedumpSystem.SegaRingEdge2: - types.Add(PhysicalMediaType.DVD); - break; - - // http://system16.com/hardware.php?id=911 - // https://en.wikipedia.org/wiki/List_of_Sega_arcade_system_boards#Sega_Ring_series - case RedumpSystem.SegaRingWide: - types.Add(PhysicalMediaType.DVD); - break; - - // http://system16.com/hardware.php?id=711 - case RedumpSystem.SegaTitanVideo: - types.Add(PhysicalMediaType.CDROM); - break; - - // http://system16.com/hardware.php?id=709 - // http://system16.com/hardware.php?id=710 - case RedumpSystem.SegaSystem32: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://github.com/mamedev/mame/blob/master/src/mame/drivers/seibucats.cpp - case RedumpSystem.SeibuCATSSystem: - types.Add(PhysicalMediaType.DVD); - break; - - // https://www.tab.at/en/support/support/downloads - case RedumpSystem.TABAustriaQuizard: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://primetimeamusements.com/product/tsumo-multi-game-motion-system/ - // https://www.highwaygames.com/arcade-machines/tsumo-tsunami-motion-8117/ - case RedumpSystem.TsunamiTsuMoMultiGameMotionSystem: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/UltraCade_Technologies - case RedumpSystem.UltraCade: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - #endregion - - #region Others - - // https://en.wikipedia.org/wiki/Audio_CD - case RedumpSystem.AudioCD: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Blu-ray#Player_profiles - case RedumpSystem.BDVideo: - types.Add(PhysicalMediaType.BluRay); - break; - - // https://en.wikipedia.org/wiki/DVD-Audio - case RedumpSystem.DVDAudio: - types.Add(PhysicalMediaType.DVD); - break; - - // https://en.wikipedia.org/wiki/DVD-Video - case RedumpSystem.DVDVideo: - types.Add(PhysicalMediaType.DVD); - break; - - // https://en.wikipedia.org/wiki/Blue_Book_(CD_standard) - case RedumpSystem.EnhancedCD: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/HD_DVD - case RedumpSystem.HDDVDVideo: - types.Add(PhysicalMediaType.HDDVD); - break; - - // UNKNOWN - case RedumpSystem.NavisoftNaviken21: - types.Add(PhysicalMediaType.CDROM); - break; - - // UNKNOWN - case RedumpSystem.PalmOS: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Photo_CD - case RedumpSystem.PhotoCD: - types.Add(PhysicalMediaType.CDROM); - break; - - // UNKNOWN - case RedumpSystem.PlayStationGameSharkUpdates: - types.Add(PhysicalMediaType.CDROM); - break; - - // UNKNOWN - case RedumpSystem.PocketPC: - types.Add(PhysicalMediaType.CDROM); - break; - - // UNKNOWN - case RedumpSystem.Psion: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Doors_and_Windows_(EP) - case RedumpSystem.RainbowDisc: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://segaretro.org/Prologue_21 - case RedumpSystem.SegaPrologue21MultimediaKaraokeSystem: - types.Add(PhysicalMediaType.CDROM); - break; - - // UNKNOWN - case RedumpSystem.SharpZaurus: - types.Add(PhysicalMediaType.CDROM); - break; - - // UNKNOWN - case RedumpSystem.SonyElectronicBook: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Super_Audio_CD - case RedumpSystem.SuperAudioCD: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://www.cnet.com/products/tao-music-iktv-karaoke-station-karaoke-system-series/ - case RedumpSystem.TaoiKTV: - types.Add(PhysicalMediaType.CDROM); - break; - - // http://ultimateconsoledatabase.com/golden/kiss_site.htm - case RedumpSystem.TomyKissSite: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Video_CD - case RedumpSystem.VideoCD: - types.Add(PhysicalMediaType.CDROM); - break; - - #endregion - - default: - types.Add(PhysicalMediaType.NONE); - break; - } -#pragma warning restore IDE0010 // Add missing cases - - return types; - } - /// /// Convert master list of all media types to currently known Redump disc types /// @@ -1194,315 +428,6 @@ namespace SabreTools.RedumpLib.RedumpInfo.Data #endregion - #region System - - /// - /// Determine if a system is okay if it's not detected by Windows - /// - /// RedumpSystem value to check - /// True if Windows show see a disc when dumping, false otherwise - public static bool DetectedByWindows(this RedumpSystem? system) - { -#pragma warning disable IDE0072 // Add missing cases - return system switch - { - // BIOS Sets - RedumpSystem.MicrosoftXboxBIOS - or RedumpSystem.NintendoGameCubeBIOS - or RedumpSystem.SonyPlayStationBIOS - or RedumpSystem.SonyPlayStation2BIOS => false, - - // Disc-Based Consoles - RedumpSystem.AtariJaguarCDInteractiveMultimediaSystem - or RedumpSystem.BandaiPlaydiaQuickInteractiveSystem - or RedumpSystem.BandaiPippin - or RedumpSystem.HasbroVideoNow - or RedumpSystem.HasbroVideoNowColor - or RedumpSystem.HasbroVideoNowJr - or RedumpSystem.HasbroVideoNowXP - or RedumpSystem.NintendoGameCube - or RedumpSystem.NintendoWii - or RedumpSystem.NintendoWiiU - or RedumpSystem.Panasonic3DOInteractiveMultiplayer - or RedumpSystem.PhilipsCDi - or RedumpSystem.PioneerLaserActive - or RedumpSystem.MarkerDiscBasedConsoleEnd => false, - - // Computers - RedumpSystem.AppleMacintosh - or RedumpSystem.MarkerComputerEnd => false, - - // Arcade - RedumpSystem.AmericanLaserGames3DO - or RedumpSystem.Atari3DO - or RedumpSystem.NewJatreCDi - or RedumpSystem.PanasonicM2 - or RedumpSystem.MarkerArcadeEnd => false, - - // Other - RedumpSystem.PlayStationGameSharkUpdates - or RedumpSystem.SuperAudioCD - or RedumpSystem.MarkerOtherEnd => false, - - null => false, - _ => true, - }; -#pragma warning restore IDE0072 // Add missing cases - } - - /// - /// Determine if a system has reversed ringcodes - /// - /// RedumpSystem value to check - /// True if the system has reversed ringcodes, false otherwise - public static bool HasReversedRingcodes(this RedumpSystem? system) - { -#pragma warning disable IDE0072 // Add missing cases - return system switch - { - RedumpSystem.SonyPlayStation2 - or RedumpSystem.SonyPlayStation3 - or RedumpSystem.SonyPlayStation4 - or RedumpSystem.SonyPlayStation5 - or RedumpSystem.SonyPlayStationPortable => true, - _ => false, - }; -#pragma warning restore IDE0072 // Add missing cases - } - - /// - /// Determine if a system is considered audio-only - /// - /// RedumpSystem value to check - /// True if the system is audio-only, false otherwise - /// - /// Philips CD-i should NOT be in this list. It's being included until there's a - /// reasonable distinction between CD-i and CD-i ready on the database side. - /// - public static bool IsAudio(this RedumpSystem? system) - { -#pragma warning disable IDE0072 // Add missing cases - return system switch - { - RedumpSystem.AtariJaguarCDInteractiveMultimediaSystem - or RedumpSystem.AudioCD - or RedumpSystem.DVDAudio - or RedumpSystem.HasbroiONEducationalGamingSystem - or RedumpSystem.HasbroVideoNow - or RedumpSystem.HasbroVideoNowColor - or RedumpSystem.HasbroVideoNowJr - or RedumpSystem.HasbroVideoNowXP - or RedumpSystem.PhilipsCDi - or RedumpSystem.PlayStationGameSharkUpdates - or RedumpSystem.SuperAudioCD => true, - _ => false, - }; -#pragma warning restore IDE0072 // Add missing cases - } - - /// - /// Determine if a system is a marker value - /// - /// RedumpSystem value to check - /// True if the system is a marker value, false otherwise - public static bool IsMarker(this RedumpSystem system) - => ((RedumpSystem?)system).IsMarker(); - - /// - /// Determine if a system is a marker value - /// - /// RedumpSystem value to check - /// True if the system is a marker value, false otherwise - public static bool IsMarker(this RedumpSystem? system) - { -#pragma warning disable IDE0072 // Add missing cases - return system switch - { - RedumpSystem.MarkerArcadeEnd - or RedumpSystem.MarkerComputerEnd - or RedumpSystem.MarkerDiscBasedConsoleEnd - or RedumpSystem.MarkerOtherEnd => true, - _ => false, - }; -#pragma warning restore IDE0072 // Add missing cases - } - - /// - /// Determine if a system is considered XGD - /// - /// RedumpSystem value to check - /// True if the system is XGD, false otherwise - public static bool IsXGD(this RedumpSystem? system) - { -#pragma warning disable IDE0072 // Add missing cases - return system switch - { - RedumpSystem.MicrosoftXbox - or RedumpSystem.MicrosoftXbox360 - or RedumpSystem.MicrosoftXboxOne - or RedumpSystem.MicrosoftXboxSeriesXS => true, - _ => false, - }; -#pragma warning restore IDE0072 // Add missing cases - } - - /// - /// List all systems with their short usable names - /// - public static List ListSystems() - { - var systems = (RedumpSystem[])Enum.GetValues(typeof(RedumpSystem)); - var knownSystems = Array.FindAll(systems, s => !s.IsMarker() && s.GetCategory() != SystemCategory.NONE); - Array.Sort(knownSystems, (x, y) => (x.LongName() ?? string.Empty).CompareTo(y.LongName() ?? string.Empty)); - return [.. Array.ConvertAll(knownSystems, val => $"{val.ShortName()} - {val.LongName()}")]; - } - - /// - /// Get the Redump longnames for each known system - /// - /// - /// - public static string? LongName(this RedumpSystem system) - => AttributeHelper.GetHumanReadableAttribute(system)?.LongName; - - /// - /// Get the Redump longnames for each known system - /// - /// - /// - public static string? LongName(this RedumpSystem? system) - => AttributeHelper.GetHumanReadableAttribute(system)?.LongName; - - /// - /// Get the Redump shortnames for each known system - /// - /// - /// - public static string? ShortName(this RedumpSystem system) - => AttributeHelper.GetHumanReadableAttribute(system)?.ShortName; - - /// - /// Get the Redump shortnames for each known system - /// - /// - /// - public static string? ShortName(this RedumpSystem? system) - => AttributeHelper.GetHumanReadableAttribute(system)?.ShortName; - - /// - /// Determine the category of a system - /// - public static SystemCategory GetCategory(this RedumpSystem system) - => ((RedumpSystem?)system).GetCategory(); - - /// - /// Determine the category of a system - /// - public static SystemCategory GetCategory(this RedumpSystem? system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.Category ?? SystemCategory.NONE; - - /// - /// Determine if a system is available in Redump yet - /// - public static bool IsAvailable(this RedumpSystem system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.Available ?? false; - - /// - /// Determine if a system is available in Redump yet - /// - public static bool IsAvailable(this RedumpSystem? system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.Available ?? false; - - /// - /// Determine if a system is restricted to dumpers - /// - public static bool IsBanned(this RedumpSystem system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.IsBanned ?? false; - - /// - /// Determine if a system is restricted to dumpers - /// - public static bool IsBanned(this RedumpSystem? system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.IsBanned ?? false; - - /// - /// Determine if a system has a CUE pack - /// - public static bool HasCues(this RedumpSystem system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasCues ?? false; - - /// - /// Determine if a system has a CUE pack - /// - public static bool HasCues(this RedumpSystem? system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasCues ?? false; - - /// - /// Determine if a system has a DAT - /// - public static bool HasDat(this RedumpSystem system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasDat ?? false; - - /// - /// Determine if a system has a DAT - /// - public static bool HasDat(this RedumpSystem? system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasDat ?? false; - - /// - /// Determine if a system has a keys pack - /// - public static bool HasKeys(this RedumpSystem system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasKeys ?? false; - - /// - /// Determine if a system has a keys pack - /// - public static bool HasKeys(this RedumpSystem? system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasKeys ?? false; - - /// - /// Determine if a system has an SBI pack - /// - public static bool HasSbi(this RedumpSystem system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasSbi ?? false; - - /// - /// Determine if a system has an SBI pack - /// - public static bool HasSbi(this RedumpSystem? system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasSbi ?? false; - - /// - /// Get the RedumpSystem enum value for a given string - /// - /// String value to convert - /// RedumpSystem represented by the string, if possible - public static RedumpSystem? ToRedumpSystem(this string? system) - { - // No value means no match - if (system is null || system.Length == 0) - return null; - - system = system.ToLowerInvariant(); - var redumpSystems = (RedumpSystem[])Enum.GetValues(typeof(RedumpSystem)); - - // Check short names - int index = Array.FindIndex(redumpSystems, s => system == s.ShortName()?.ToLowerInvariant()); - if (index > -1) - return redumpSystems[index]; - - // Check long names - index = Array.FindIndex(redumpSystems, s => system == s.LongName()?.ToLowerInvariant() - || system == s.LongName()?.Replace(" ", string.Empty)?.ToLowerInvariant()); - if (index > -1) - return redumpSystems[index]; - - return null; - } - - #endregion - #region System Category /// diff --git a/SabreTools.RedumpLib/RedumpInfo/Discs.cs b/SabreTools.RedumpLib/RedumpInfo/Discs.cs index 90f7296..d30efdf 100644 --- a/SabreTools.RedumpLib/RedumpInfo/Discs.cs +++ b/SabreTools.RedumpLib/RedumpInfo/Discs.cs @@ -39,7 +39,7 @@ namespace SabreTools.RedumpLib.RedumpInfo RedumpOrg.Data.SortCategory? sort = null, RedumpOrg.Data.SortDirection? sortDir = null, DumpStatus? status = null, - RedumpSystem? system = null, + PhysicalSystem? system = null, int limit = -1, DiscSubpath[]? discSubpaths = null) { @@ -164,7 +164,7 @@ namespace SabreTools.RedumpLib.RedumpInfo RedumpOrg.Data.SortCategory? sort = null, RedumpOrg.Data.SortDirection? sortDir = null, DumpStatus? status = null, - RedumpSystem? system = null, + PhysicalSystem? system = null, int limit = -1) { // Keep getting discs pages until there are none left diff --git a/SabreTools.RedumpLib/RedumpInfo/Packs.cs b/SabreTools.RedumpLib/RedumpInfo/Packs.cs index 935b70c..5c41536 100644 --- a/SabreTools.RedumpLib/RedumpInfo/Packs.cs +++ b/SabreTools.RedumpLib/RedumpInfo/Packs.cs @@ -1,5 +1,6 @@ using System; using System.Threading.Tasks; +using SabreTools.RedumpLib.Data; using SabreTools.RedumpLib.RedumpInfo.Data; namespace SabreTools.RedumpLib.RedumpInfo @@ -17,7 +18,7 @@ namespace SabreTools.RedumpLib.RedumpInfo /// True to use named subfolders to store downloads, false to store directly in the output directory public static async Task DownloadAllPacks(this Client client, string? outDir, bool useSubfolders) { - var systems = (RedumpSystem[])Enum.GetValues(typeof(RedumpSystem)); + var systems = (PhysicalSystem[])Enum.GetValues(typeof(PhysicalSystem)); return await client.DownloadPacksForSystems(systems, outDir, useSubfolders); } @@ -25,18 +26,18 @@ namespace SabreTools.RedumpLib.RedumpInfo /// Download premade packs for an individual system /// /// RedumpClient for connectivity - /// RedumpSystem to get all possible packs for + /// PhysicalSystem to get all possible packs for /// Output directory to save data to /// True to use named subfolders to store downloads, false to store directly in the output directory public static async Task DownloadPacksForSystem(this Client client, - RedumpSystem? system, + PhysicalSystem? system, string? outDir, bool useSubfolders) { if (system is null) return false; - var systems = new RedumpSystem[] { system.Value }; + var systems = new PhysicalSystem[] { system.Value }; return await client.DownloadPacksForSystems(systems, outDir, useSubfolders); } @@ -48,7 +49,7 @@ namespace SabreTools.RedumpLib.RedumpInfo /// Output directory to save data to /// True to use named subfolders to store downloads, false to store directly in the output directory public static async Task DownloadPacksForSystems(this Client client, - RedumpSystem[] systems, + PhysicalSystem[] systems, string? outDir, bool useSubfolders) { diff --git a/SabreTools.RedumpLib/RedumpInfo/SystemAttribute.cs b/SabreTools.RedumpLib/RedumpInfo/SystemAttribute.cs deleted file mode 100644 index 26a0197..0000000 --- a/SabreTools.RedumpLib/RedumpInfo/SystemAttribute.cs +++ /dev/null @@ -1,41 +0,0 @@ -using SabreTools.RedumpLib.Attributes; -using SabreTools.RedumpLib.RedumpInfo.Data; - -namespace SabreTools.RedumpLib.RedumpInfo -{ - /// - /// Attribute specifc to Redump System values - /// - public class SystemAttribute : HumanReadableAttribute - { - /// - /// Category for the system - /// - public SystemCategory Category { get; set; } - - /// - /// System is restricted to dumpers - /// - public bool IsBanned { get; set; } = false; - - /// - /// System has a CUE pack - /// - public bool HasCues { get; set; } = false; - - /// - /// System has a DAT - /// - public bool HasDat { get; set; } = false; - - /// - /// System has a keys pack - /// - public bool HasKeys { get; set; } = false; - - /// - /// System has an SBI pack - /// - public bool HasSbi { get; set; } = false; - } -} diff --git a/SabreTools.RedumpLib/RedumpInfo/UrlBuilder.cs b/SabreTools.RedumpLib/RedumpInfo/UrlBuilder.cs index 312a0fe..94068b2 100644 --- a/SabreTools.RedumpLib/RedumpInfo/UrlBuilder.cs +++ b/SabreTools.RedumpLib/RedumpInfo/UrlBuilder.cs @@ -147,7 +147,7 @@ namespace SabreTools.RedumpLib.RedumpInfo RedumpOrg.Data.SortCategory? sort = null, RedumpOrg.Data.SortDirection? sortDir = null, DumpStatus? status = null, - RedumpSystem? system = null, + PhysicalSystem? system = null, int? page = null) { var sb = new StringBuilder(); @@ -242,7 +242,7 @@ namespace SabreTools.RedumpLib.RedumpInfo /// Pack type /// System for download /// Does not check for invalid systems - public static string BuildPackUrl(PackType packType, RedumpSystem system) + public static string BuildPackUrl(PackType packType, PhysicalSystem system) { var sb = new StringBuilder(); diff --git a/SabreTools.RedumpLib/RedumpOrg/Client.cs b/SabreTools.RedumpLib/RedumpOrg/Client.cs index d25550e..5ec581d 100644 --- a/SabreTools.RedumpLib/RedumpOrg/Client.cs +++ b/SabreTools.RedumpLib/RedumpOrg/Client.cs @@ -429,7 +429,7 @@ namespace SabreTools.RedumpLib.RedumpOrg SortCategory? sort = null, SortDirection? sortDir = null, DumpStatus? status = null, - RedumpSystem? system = null, + PhysicalSystem? system = null, int? tracks = null, bool comments = false, bool contents = false, @@ -569,7 +569,7 @@ namespace SabreTools.RedumpLib.RedumpOrg SortCategory? sort = null, SortDirection? sortDir = null, DumpStatus? status = null, - RedumpSystem? system = null, + PhysicalSystem? system = null, int? tracks = null, bool comments = false, bool contents = false, @@ -757,7 +757,7 @@ namespace SabreTools.RedumpLib.RedumpOrg /// System for filtering, null to retrieve for all systems at once /// String containing the page contents if successful, null on error /// may have to match the logged-in user - public async Task DownloadSingleList(bool have, string username, RedumpSystem? system) + public async Task DownloadSingleList(bool have, string username, PhysicalSystem? system) { string systemName = system.ShortName() ?? "all"; Console.WriteLine($"Processing {(have ? "have" : "miss")} list for {username} for {systemName}"); @@ -792,7 +792,7 @@ namespace SabreTools.RedumpLib.RedumpOrg /// Output directory to save data to /// True if all data was downloaded, false otherwise /// may have to match the logged-in user - public async Task DownloadSingleList(bool have, string username, RedumpSystem? system, string? outDir) + public async Task DownloadSingleList(bool have, string username, PhysicalSystem? system, string? outDir) { // If no output directory is defined, use the current directory instead if (string.IsNullOrEmpty(outDir)) @@ -835,7 +835,7 @@ namespace SabreTools.RedumpLib.RedumpOrg /// Pack type to use to determine the download URL /// System to download packs for /// Byte array containing the downloaded pack, null on error - public async Task DownloadSinglePack(PackType packType, RedumpSystem? system) + public async Task DownloadSinglePack(PackType packType, PhysicalSystem? system) { try { @@ -887,7 +887,7 @@ namespace SabreTools.RedumpLib.RedumpOrg /// Pack type to use to determine the download URL /// System to download packs for /// Output directory to save data to - public async Task DownloadSinglePack(PackType packType, RedumpSystem? system, string? outDir) + public async Task DownloadSinglePack(PackType packType, PhysicalSystem? system, string? outDir) { try { @@ -955,7 +955,7 @@ namespace SabreTools.RedumpLib.RedumpOrg /// System to download packs for /// Output directory to save data to /// Named subfolder for the pack, used optionally - public async Task DownloadSinglePack(PackType packType, RedumpSystem? system, string? outDir, string? subfolder) + public async Task DownloadSinglePack(PackType packType, PhysicalSystem? system, string? outDir, string? subfolder) { try { @@ -1563,7 +1563,7 @@ namespace SabreTools.RedumpLib.RedumpOrg /// /// Pack type to use to determine the download URL /// Systems to download packs for - public async Task> DownloadPacks(PackType packType, RedumpSystem[] systems) + public async Task> DownloadPacks(PackType packType, PhysicalSystem[] systems) { // Determine if the pack type is valid if (!Enum.IsDefined(typeof(PackType), packType)) @@ -1572,7 +1572,7 @@ namespace SabreTools.RedumpLib.RedumpOrg return []; } - var packsDictionary = new Dictionary(); + var packsDictionary = new Dictionary(); foreach (var system in systems) { string longName = system.LongName() ?? $"UNKNOWN_{system}"; @@ -1602,7 +1602,7 @@ namespace SabreTools.RedumpLib.RedumpOrg /// Pack type to use to determine the download URL /// Systems to download packs for /// Output directory to save data to - public async Task DownloadPacks(PackType packType, RedumpSystem[] systems, string? outDir) + public async Task DownloadPacks(PackType packType, PhysicalSystem[] systems, string? outDir) { // Determine if the pack type is valid if (!Enum.IsDefined(typeof(PackType), packType)) @@ -1638,7 +1638,7 @@ namespace SabreTools.RedumpLib.RedumpOrg /// Systems to download packs for /// Output directory to save data to /// Named subfolder for the pack, used optionally - public async Task DownloadPacks(PackType packType, RedumpSystem[] systems, string? outDir, string? subfolder) + public async Task DownloadPacks(PackType packType, PhysicalSystem[] systems, string? outDir, string? subfolder) { // Determine if the pack type is valid if (!Enum.IsDefined(typeof(PackType), packType)) @@ -1755,7 +1755,7 @@ namespace SabreTools.RedumpLib.RedumpOrg /// Pack type to use to determine the support status /// Systems to determine pack availability for /// True if the pack is available for a system, false otherwise - private static bool PackTypeToAvailable(PackType packType, RedumpSystem system) + private static bool PackTypeToAvailable(PackType packType, PhysicalSystem system) { return packType switch { diff --git a/SabreTools.RedumpLib/RedumpOrg/Converters/SystemConverter.cs b/SabreTools.RedumpLib/RedumpOrg/Converters/PhysicalSystemConverter.cs similarity index 53% rename from SabreTools.RedumpLib/RedumpOrg/Converters/SystemConverter.cs rename to SabreTools.RedumpLib/RedumpOrg/Converters/PhysicalSystemConverter.cs index a21698b..000e90b 100644 --- a/SabreTools.RedumpLib/RedumpOrg/Converters/SystemConverter.cs +++ b/SabreTools.RedumpLib/RedumpOrg/Converters/PhysicalSystemConverter.cs @@ -1,18 +1,19 @@ using System; using Newtonsoft.Json; using Newtonsoft.Json.Linq; +using SabreTools.RedumpLib.Data; using SabreTools.RedumpLib.RedumpOrg.Data; namespace SabreTools.RedumpLib.RedumpOrg.Converters { /// - /// Serialize RedumpSystem enum values + /// Serialize PhysicalSystem enum values /// - public class SystemConverter : JsonConverter + public class PhysicalSystemConverter : JsonConverter { public override bool CanRead { get { return true; } } - public override RedumpSystem? ReadJson(JsonReader reader, Type objectType, RedumpSystem? existingValue, bool hasExistingValue, JsonSerializer serializer) + public override PhysicalSystem? ReadJson(JsonReader reader, Type objectType, PhysicalSystem? existingValue, bool hasExistingValue, JsonSerializer serializer) { // If we have a value already, don't overwrite it if (hasExistingValue) @@ -23,12 +24,12 @@ namespace SabreTools.RedumpLib.RedumpOrg.Converters return null; // Try to parse the value - return value.ToRedumpSystem(); + return value.ToPhysicalSystem(); } - public override void WriteJson(JsonWriter writer, RedumpSystem? value, JsonSerializer serializer) + public override void WriteJson(JsonWriter writer, PhysicalSystem? value, JsonSerializer serializer) { - JToken t = JToken.FromObject(value.ShortName() ?? string.Empty); + JToken t = JToken.FromObject(value.ShortNameAlt() ?? string.Empty); t.WriteTo(writer); } } diff --git a/SabreTools.RedumpLib/RedumpOrg/Data/Enumerations.cs b/SabreTools.RedumpLib/RedumpOrg/Data/Enumerations.cs index 1def2a3..2e4c299 100644 --- a/SabreTools.RedumpLib/RedumpOrg/Data/Enumerations.cs +++ b/SabreTools.RedumpLib/RedumpOrg/Data/Enumerations.cs @@ -214,603 +214,6 @@ namespace SabreTools.RedumpLib.RedumpOrg.Data Sbis, } - /// - /// List of all known systems - /// - /// TODO: Remove marker items - public enum RedumpSystem - { - #region BIOS Sets - - [System(LongName = "Microsoft Xbox (BIOS)", ShortName = "xbox-bios", HasDat = true)] - MicrosoftXboxBIOS, - - [System(LongName = "Nintendo GameCube (BIOS)", ShortName = "gc-bios", HasDat = true)] - NintendoGameCubeBIOS, - - [System(LongName = "Sony PlayStation (BIOS)", ShortName = "psx-bios", HasDat = true)] - SonyPlayStationBIOS, - - [System(LongName = "Sony PlayStation 2 (BIOS)", ShortName = "ps2-bios", HasDat = true)] - SonyPlayStation2BIOS, - - #endregion - - #region Disc-Based Consoles - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Atari Jaguar CD Interactive Multimedia System", ShortName = "ajcd", HasCues = true, HasDat = true)] - AtariJaguarCDInteractiveMultimediaSystem, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Bandai Playdia Quick Interactive System", ShortName = "qis", HasCues = true, HasDat = true)] - BandaiPlaydiaQuickInteractiveSystem, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Bandai Pippin", ShortName = "pippin", HasCues = true, HasDat = true)] - BandaiPippin, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Commodore Amiga CD32", ShortName = "cd32", HasCues = true, HasDat = true)] - CommodoreAmigaCD32, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Commodore Amiga CDTV", ShortName = "cdtv", HasCues = true, HasDat = true)] - CommodoreAmigaCDTV, - - [System(Category = SystemCategory.DiscBasedConsole, Available = false, LongName = "Envizions EVO Smart Console")] - EnvizionsEVOSmartConsole, - - [System(Category = SystemCategory.DiscBasedConsole, Available = false, LongName = "Fujitsu FM Towns Marty")] - FujitsuFMTownsMarty, - - [System(Category = SystemCategory.DiscBasedConsole, Available = false, LongName = "Hasbro iON Educational Gaming System")] - HasbroiONEducationalGamingSystem, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Hasbro VideoNow", ShortName = "hvn", IsBanned = true, HasCues = true, HasDat = true)] - HasbroVideoNow, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Hasbro VideoNow Color", ShortName = "hvnc", IsBanned = true, HasCues = true, HasDat = true)] - HasbroVideoNowColor, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Hasbro VideoNow Jr.", ShortName = "hvnjr", IsBanned = true, HasCues = true, HasDat = true)] - HasbroVideoNowJr, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Hasbro VideoNow XP", ShortName = "hvnxp", IsBanned = true, HasCues = true, HasDat = true)] - HasbroVideoNowXP, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Mattel Fisher-Price iXL", ShortName = "ixl", HasCues = true, HasDat = true)] - MattelFisherPriceiXL, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Mattel HyperScan", ShortName = "hs", HasCues = true, HasDat = true)] - MattelHyperScan, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Memorex Visual Information System", ShortName = "vis", HasCues = true, HasDat = true)] - MemorexVisualInformationSystem, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Microsoft Xbox", ShortName = "xbox", HasCues = true, HasDat = true)] - MicrosoftXbox, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Microsoft Xbox 360", ShortName = "xbox360", HasCues = true, HasDat = true)] - MicrosoftXbox360, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Microsoft Xbox One", ShortName = "xboxone", IsBanned = true, HasDat = true)] - MicrosoftXboxOne, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Microsoft Xbox Series X", ShortName = "xboxsx", IsBanned = true, HasDat = true)] - MicrosoftXboxSeriesXS, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "NEC PC Engine CD & TurboGrafx CD", ShortName = "pce", HasCues = true, HasDat = true)] - NECPCEngineCDTurboGrafxCD, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "NEC PC-FX & PC-FXGA", ShortName = "pc-fx", HasCues = true, HasDat = true)] - NECPCFXPCFXGA, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Nintendo GameCube", ShortName = "gc", HasDat = true)] - NintendoGameCube, - - [System(Category = SystemCategory.DiscBasedConsole, Available = false, LongName = "Nintendo-Sony Super NES CD-ROM System")] - NintendoSonySuperNESCDROMSystem, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Nintendo Wii", ShortName = "wii", HasDat = true)] - NintendoWii, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Nintendo Wii U", ShortName = "wiiu", IsBanned = true, HasDat = true, HasKeys = true)] - NintendoWiiU, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Panasonic 3DO Interactive Multiplayer", ShortName = "3do", HasCues = true, HasDat = true)] - Panasonic3DOInteractiveMultiplayer, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Philips CD-i", ShortName = "cdi", HasCues = true, HasDat = true)] - PhilipsCDi, - - [System(Category = SystemCategory.DiscBasedConsole, Available = false, LongName = "Playmaji Polymega")] - PlaymajiPolymega, - - [System(Category = SystemCategory.DiscBasedConsole, Available = false, LongName = "Pioneer LaserActive")] - PioneerLaserActive, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Sega Dreamcast", ShortName = "dc", HasCues = true, HasDat = true, HasGdi = true)] - SegaDreamcast, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Sega Mega CD & Sega CD", ShortName = "mcd", HasCues = true, HasDat = true)] - SegaMegaCDSegaCD, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Sega Saturn", ShortName = "ss", HasCues = true, HasDat = true)] - SegaSaturn, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Neo Geo CD", ShortName = "ngcd", HasCues = true, HasDat = true)] - SNKNeoGeoCD, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Sony PlayStation", ShortName = "psx", HasCues = true, HasDat = true, HasLsd = true, HasSbi = true)] - SonyPlayStation, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Sony PlayStation 2", ShortName = "ps2", HasCues = true, HasDat = true)] - SonyPlayStation2, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Sony PlayStation 3", ShortName = "ps3", HasCues = true, HasDat = true, HasDkeys = true, HasKeys = true)] - SonyPlayStation3, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Sony PlayStation 4", ShortName = "ps4", IsBanned = true, HasDat = true)] - SonyPlayStation4, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Sony PlayStation 5", ShortName = "ps5", IsBanned = true, HasDat = true)] - SonyPlayStation5, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "Sony PlayStation Portable", ShortName = "psp", HasDat = true)] - SonyPlayStationPortable, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "VM Labs NUON", ShortName = "nuon", HasDat = true)] - VMLabsNUON, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "VTech V.Flash & V.Smile Pro", ShortName = "vflash", HasCues = true, HasDat = true)] - VTechVFlashVSmilePro, - - [System(Category = SystemCategory.DiscBasedConsole, LongName = "ZAPiT Games Game Wave Family Entertainment System", ShortName = "gamewave", HasDat = true)] - ZAPiTGamesGameWaveFamilyEntertainmentSystem, - - // End of console section delimiter - MarkerDiscBasedConsoleEnd, - - #endregion - - #region Cartridge-Based and Other Consoles - - /* - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Amstrad GX-4000")] - AmstradGX4000, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "APF Microcomputer System")] - APFMicrocomputerSystem, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Atari 2600 & VCS")] - Atari2600VCS, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Atari 5200")] - Atari5200, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Atari 7800")] - Atari7800, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Atari Jaguar")] - AtariJaguar, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Atari XEGS")] - AtariXEGS, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Audiosonic 1292 Advanced Programmable Video System")] - Audiosonic1292AdvancedProgrammableVideoSystem, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Bally Astrocade")] - BallyAstrocade, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Bit Corporation Dina")] - BitCorporationDina, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Casio Loopy")] - CasioLoopy, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Casio PV-1000")] - CasioPV1000, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Commodore 64 Games System")] - Commodore64GamesSystem, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Daewoo Electronics Zemmix")] - DaewooElectronicsZemmix, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Emerson Arcadia 2001")] - EmersonArcadia2001, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Epoch Cassette Vision")] - EpochCassetteVision, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Epoch Super Cassette Vision")] - EpochSuperCassetteVision, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Fairchild Channel F")] - FairchildChannelF, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Funtech Super A'Can")] - FuntechSuperACan, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "GCE Vectrex")] - GCEVectrex, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Heber BBC Bridge Companion")] - HeberBBCBridgeCompanion, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Interton VC-4000")] - IntertonVC4000, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "JungleTac Vii")] - JungleTacVii, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "LeapFrog ClickStart")] - LeapFrogClickStart, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "LJN VideoArt")] - LJNVideoArt, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Magnavox Odyssey 2")] - MagnavoxOdyssey2, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Mattel Intellivision")] - MattelIntellivision, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "NEC PC Engine & TurboGrafx-16")] - NECPCEngineTurboGrafx16, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Nichibutsu MyVision")] - NichibutsuMyVision, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Nintendo 64")] - Nintendo64, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Nintendo 64DD")] - Nintendo64DD, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Nintendo Famicom & Nintendo Entertainment System")] - NintendoFamicomNintendoEntertainmentSystem, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Nintendo Famicom Disk System")] - NintendoFamicomDiskSystem, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Nintendo Super Famicom & Super Nintendo Entertainment System")] - NintendoSuperFamicomSuperNintendoEntertainmentSystem, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Nintendo Switch")] - NintendoSwitch, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Philips Videopac+ & G7400")] - PhilipsVideopacPlusG7400, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "RCA Studio-II")] - RCAStudioII, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Sega 32X")] - Sega32X, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Sega Mark III & Master System")] - SegaMarkIIIMasterSystem, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Sega MegaDrive & Genesis")] - SegaMegaDriveGenesis, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Sega SG-1000")] - SegaSG1000, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "SNK NeoGeo")] - SNKNeoGeo, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "SSD COMPANY LIMITED XaviXPORT")] - SSDCOMPANYLIMITEDXaviXPORT, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "ViewMaster Interactive Vision")] - ViewMasterInteractiveVision, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "V.Tech CreatiVision")] - VTechCreatiVision, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "V.Tech V.Smile")] - VTechVSmile, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "V.Tech Socrates")] - VTechSocrates, - - [System(Category = SystemCategory.OtherConsole, Available = false, LongName = "Worlds of Wonder ActionMax")] - WorldsOfWonderActionMax, - - // End of other console delimiter - MarkerOtherConsoleEnd, - */ - - #endregion - - #region Computers - - [System(Category = SystemCategory.Computer, LongName = "Acorn Archimedes", ShortName = "arch", HasCues = true, HasDat = true)] - AcornArchimedes, - - [System(Category = SystemCategory.Computer, LongName = "Apple Macintosh", ShortName = "mac", HasCues = true, HasDat = true, HasLsd = true, HasSbi = true)] - AppleMacintosh, - - [System(Category = SystemCategory.Computer, LongName = "Commodore Amiga CD", ShortName = "acd", HasCues = true, HasDat = true)] - CommodoreAmigaCD, - - [System(Category = SystemCategory.Computer, LongName = "Fujitsu FM Towns series", ShortName = "fmt", HasCues = true, HasDat = true)] - FujitsuFMTownsseries, - - [System(Category = SystemCategory.Computer, LongName = "IBM PC compatible", ShortName = "pc", HasCues = true, HasDat = true, HasLsd = true, HasSbi = true)] - IBMPCcompatible, - - [System(Category = SystemCategory.Computer, LongName = "NEC PC-88 series", ShortName = "pc-88", HasCues = true, HasDat = true)] - NECPC88series, - - [System(Category = SystemCategory.Computer, LongName = "NEC PC-98 series", ShortName = "pc-98", HasCues = true, HasDat = true)] - NECPC98series, - - [System(Category = SystemCategory.Computer, LongName = "Sharp X68000", ShortName = "x68k", HasCues = true, HasDat = true)] - SharpX68000, - - // End of computer section delimiter - MarkerComputerEnd, - - #endregion - - #region Arcade - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Amiga CUBO CD32")] - AmigaCUBOCD32, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "American Laser Games 3DO")] - AmericanLaserGames3DO, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Atari 3DO")] - Atari3DO, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Atronic")] - Atronic, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "AUSCOM System 1")] - AUSCOMSystem1, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Bally Game Magic")] - BallyGameMagic, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Capcom CP System III")] - CapcomCPSystemIII, - - [System(Category = SystemCategory.Arcade, LongName = "funworld Photo Play", ShortName = "fpp", HasCues = true, HasDat = true)] - funworldPhotoPlay, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "FuRyu & Omron Purikura")] - FuRyuOmronPurikura, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Global VR PC-based Systems")] - GlobalVRVarious, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Global VR Vortek")] - GlobalVRVortek, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Global VR Vortek V3")] - GlobalVRVortekV3, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "ICE PC-based Hardware")] - ICEPCHardware, - - [System(Category = SystemCategory.Arcade, LongName = "Incredible Technologies Eagle", ShortName = "ite", HasCues = true, HasDat = true)] - IncredibleTechnologiesEagle, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Incredible Technologies PC-based Systems")] - IncredibleTechnologiesVarious, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "JVL iTouch")] - JVLiTouch, - - [System(Category = SystemCategory.Arcade, LongName = "Konami e-Amusement", ShortName = "kea", HasCues = true, HasDat = true)] - KonamieAmusement, - - [System(Category = SystemCategory.Arcade, LongName = "Konami FireBeat", ShortName = "kfb", HasCues = true, HasDat = true)] - KonamiFireBeat, - - [System(Category = SystemCategory.Arcade, LongName = "Konami M2", ShortName = "km2", IsBanned = true, HasCues = true, HasDat = true)] - KonamiM2, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Konami Python")] - KonamiPython, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Konami Python 2")] - KonamiPython2, - - [System(Category = SystemCategory.Arcade, LongName = "Konami System 573", ShortName = "ks573", HasCues = true, HasDat = true)] - KonamiSystem573, - - [System(Category = SystemCategory.Arcade, LongName = "Konami System GV", ShortName = "ksgv", HasCues = true, HasDat = true)] - KonamiSystemGV, - - [System(Category = SystemCategory.Arcade, LongName = "Konami Twinkle", ShortName = "kt")] - KonamiTwinkle, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Konami PC-based Systems")] - KonamiVarious, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Merit Industries Boardwalk")] - MeritIndustriesBoardwalk, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Merit Industries MegaTouch Force")] - MeritIndustriesMegaTouchForce, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Merit Industries MegaTouch ION")] - MeritIndustriesMegaTouchION, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Merit Industries MegaTouch Maxx")] - MeritIndustriesMegaTouchMaxx, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Merit Industries MegaTouch XL")] - MeritIndustriesMegaTouchXL, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Namco Purikura")] - NamcoPurikura, - - [System(Category = SystemCategory.Arcade, LongName = "Namco · Sega · Nintendo Triforce", ShortName = "trf", HasCues = true, HasDat = true, HasGdi = true)] - NamcoSegaNintendoTriforce, - - [System(Category = SystemCategory.Arcade, LongName = "Namco System 12", ShortName = "ns12")] - NamcoSystem12, - - [System(Category = SystemCategory.Arcade, LongName = "Namco System 246 / System 256", ShortName = "ns246", HasCues = true, HasDat = true)] - NamcoSystem246256, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "New Jatre CD-i")] - NewJatreCDi, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Nichibutsu High Rate System")] - NichibutsuHighRateSystem, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Nichibutsu Super CD")] - NichibutsuSuperCD, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Nichibutsu X-Rate System")] - NichibutsuXRateSystem, - - [System(Category = SystemCategory.Arcade, LongName = "Panasonic M2", ShortName = "m2", IsBanned = true, HasCues = true, HasDat = true)] - PanasonicM2, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "PhotoPlay PC-based Systems")] - PhotoPlayVarious, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Raw Thrills PC-based Systems")] - RawThrillsVarious, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Sega ALLS")] - SegaALLS, - - [System(Category = SystemCategory.Arcade, LongName = "Sega Chihiro", ShortName = "chihiro", HasCues = true, HasDat = true, HasGdi = true)] - SegaChihiro, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Sega Europa-R")] - SegaEuropaR, - - [System(Category = SystemCategory.Arcade, LongName = "Sega Lindbergh", ShortName = "lindbergh", HasDat = true)] - SegaLindbergh, - - [System(Category = SystemCategory.Arcade, LongName = "Sega Naomi", ShortName = "naomi", HasCues = true, HasDat = true, HasGdi = true)] - SegaNaomi, - - [System(Category = SystemCategory.Arcade, LongName = "Sega Naomi 2", ShortName = "naomi2", HasCues = true, HasDat = true, HasGdi = true)] - SegaNaomi2, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Sega NAOMI Satellite Terminal PC")] - SegaNaomiSatelliteTerminalPC, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Sega Nu")] - SegaNu, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Sega Nu 1.1")] - SegaNu11, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Sega Nu 2")] - SegaNu2, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Sega Nu SX")] - SegaNuSX, - - [System(Category = SystemCategory.Arcade, LongName = "Sega RingEdge", ShortName = "sre", HasDat = true)] - SegaRingEdge, - - [System(Category = SystemCategory.Arcade, LongName = "Sega RingEdge 2", ShortName = "sre2", HasDat = true)] - SegaRingEdge2, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Sega RingWide")] - SegaRingWide, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Sega System 32")] - SegaSystem32, - - [System(Category = SystemCategory.Arcade, LongName = "Sega Titan Video", ShortName = "stv")] - SegaTitanVideo, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Seibu CATS System")] - SeibuCATSSystem, - - [System(Category = SystemCategory.Arcade, LongName = "TAB-Austria Quizard", ShortName = "quizard", HasCues = true, HasDat = true)] - TABAustriaQuizard, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "Tsunami TsuMo Multi-Game Motion System")] - TsunamiTsuMoMultiGameMotionSystem, - - [System(Category = SystemCategory.Arcade, Available = false, LongName = "UltraCade PC-based Systems")] - UltraCade, - - // End of arcade section delimiter - MarkerArcadeEnd, - - #endregion - - #region Other - - [System(Category = SystemCategory.Other, LongName = "Audio CD", ShortName = "audio-cd", IsBanned = true, HasCues = true, HasDat = true)] - AudioCD, - - [System(Category = SystemCategory.Other, LongName = "BD-Video", ShortName = "bd-video", IsBanned = true, HasDat = true)] - BDVideo, - - [System(Category = SystemCategory.Other, Available = false, LongName = "DVD-Audio")] - DVDAudio, - - [System(Category = SystemCategory.Other, LongName = "DVD-Video", ShortName = "dvd-video", IsBanned = true, HasDat = true)] - DVDVideo, - - [System(Category = SystemCategory.Other, LongName = "Enhanced CD", ShortName = "enhanced-cd", IsBanned = true)] - EnhancedCD, - - [System(Category = SystemCategory.Other, LongName = "HD DVD-Video", ShortName = "hddvd-video", IsBanned = true, HasDat = true)] - HDDVDVideo, - - [System(Category = SystemCategory.Other, LongName = "Navisoft Naviken 2.1", ShortName = "navi21", IsBanned = true, HasCues = true, HasDat = true)] - NavisoftNaviken21, - - [System(Category = SystemCategory.Other, LongName = "Palm OS", ShortName = "palm", HasCues = true, HasDat = true)] - PalmOS, - - [System(Category = SystemCategory.Other, LongName = "Photo CD", ShortName = "photo-cd", HasCues = true, HasDat = true)] - PhotoCD, - - [System(Category = SystemCategory.Other, LongName = "PlayStation GameShark Updates", ShortName = "psxgs", HasCues = true, HasDat = true)] - PlayStationGameSharkUpdates, - - [System(Category = SystemCategory.Other, LongName = "Pocket PC", ShortName = "ppc", HasCues = true, HasDat = true)] - PocketPC, - - [System(Category = SystemCategory.Other, Available = false, LongName = "Psion")] - Psion, - - [System(Category = SystemCategory.Other, Available = false, LongName = "Rainbow Disc")] - RainbowDisc, - - [System(Category = SystemCategory.Other, LongName = "Sega Prologue 21 Multimedia Karaoke System", ShortName = "sp21", HasCues = true, HasDat = true)] - SegaPrologue21MultimediaKaraokeSystem, - - [System(Category = SystemCategory.Other, Available = false, LongName = "Sharp Zaurus")] - SharpZaurus, - - [System(Category = SystemCategory.Other, Available = false, LongName = "Sony Electronic Book")] - SonyElectronicBook, - - [System(Category = SystemCategory.Other, Available = false, LongName = "Super Audio CD")] - SuperAudioCD, - - [System(Category = SystemCategory.Other, LongName = "Tao iKTV", ShortName = "iktv")] - TaoiKTV, - - [System(Category = SystemCategory.Other, LongName = "Tomy Kiss-Site", ShortName = "ksite", HasCues = true, HasDat = true)] - TomyKissSite, - - [System(Category = SystemCategory.Other, LongName = "Video CD", ShortName = "vcd", IsBanned = true, HasCues = true, HasDat = true)] - VideoCD, - - // End of other section delimiter - MarkerOtherEnd, - - #endregion - } - /// /// List of all Redump site codes /// @@ -1152,29 +555,6 @@ namespace SabreTools.RedumpLib.RedumpOrg.Data Descending, } - /// - /// List of system categories - /// - public enum SystemCategory - { - NONE = 0, - - [HumanReadable(LongName = "Disc-Based Consoles")] - DiscBasedConsole, - - [HumanReadable(LongName = "Other Consoles")] - OtherConsole, - - [HumanReadable(LongName = "Computers")] - Computer, - - [HumanReadable(LongName = "Arcade")] - Arcade, - - [HumanReadable(LongName = "Other")] - Other, - }; - /// /// Generic yes/no values /// diff --git a/SabreTools.RedumpLib/RedumpOrg/Data/Extensions.cs b/SabreTools.RedumpLib/RedumpOrg/Data/Extensions.cs index 61ecb73..2f14a03 100644 --- a/SabreTools.RedumpLib/RedumpOrg/Data/Extensions.cs +++ b/SabreTools.RedumpLib/RedumpOrg/Data/Extensions.cs @@ -14,770 +14,6 @@ namespace SabreTools.RedumpLib.RedumpOrg.Data { #region Cross-Enumeration - /// - /// Get a list of valid MediaTypes for a given RedumpSystem - /// - /// RedumpSystem value to check - /// MediaTypes, if possible - public static List MediaTypes(this RedumpSystem? system) - { - var types = new List(); - - switch (system) - { - #region Consoles - - // https://en.wikipedia.org/wiki/Atari_Jaguar_CD - case RedumpSystem.AtariJaguarCDInteractiveMultimediaSystem: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Playdia - case RedumpSystem.BandaiPlaydiaQuickInteractiveSystem: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Apple_Bandai_Pippin - case RedumpSystem.BandaiPippin: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Amiga_CD32 - case RedumpSystem.CommodoreAmigaCD32: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Commodore_CDTV - case RedumpSystem.CommodoreAmigaCDTV: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/EVO_Smart_Console - case RedumpSystem.EnvizionsEVOSmartConsole: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // https://en.wikipedia.org/wiki/FM_Towns_Marty - case RedumpSystem.FujitsuFMTownsMarty: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.FloppyDisk); - break; - - // http://videogamekraken.com/ion-educational-gaming-system-by-hasbro - case RedumpSystem.HasbroiONEducationalGamingSystem: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/VideoNow - case RedumpSystem.HasbroVideoNow: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/VideoNow - case RedumpSystem.HasbroVideoNowColor: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/VideoNow - case RedumpSystem.HasbroVideoNowJr: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/VideoNow - case RedumpSystem.HasbroVideoNowXP: - types.Add(PhysicalMediaType.CDROM); - break; - - case RedumpSystem.MattelFisherPriceiXL: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/HyperScan - case RedumpSystem.MattelHyperScan: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Xbox_(console) - case RedumpSystem.MicrosoftXbox: - types.Add(PhysicalMediaType.DVD); - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Xbox_360 - case RedumpSystem.MicrosoftXbox360: - types.Add(PhysicalMediaType.DVD); - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Xbox_One - case RedumpSystem.MicrosoftXboxOne: - types.Add(PhysicalMediaType.BluRay); - break; - - // https://en.wikipedia.org/wiki/Xbox_Series_X_and_Series_S - case RedumpSystem.MicrosoftXboxSeriesXS: - types.Add(PhysicalMediaType.BluRay); - break; - - // https://en.wikipedia.org/wiki/TurboGrafx-16 - case RedumpSystem.NECPCEngineCDTurboGrafxCD: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/PC-FX - case RedumpSystem.NECPCFXPCFXGA: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/GameCube - case RedumpSystem.NintendoGameCube: - types.Add(PhysicalMediaType.DVD); // Only added here to help users; not strictly correct - types.Add(PhysicalMediaType.NintendoGameCubeGameDisc); - break; - - // https://en.wikipedia.org/wiki/Super_NES_CD-ROM - case RedumpSystem.NintendoSonySuperNESCDROMSystem: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Wii - case RedumpSystem.NintendoWii: - types.Add(PhysicalMediaType.DVD); // Only added here to help users; not strictly correct - types.Add(PhysicalMediaType.NintendoWiiOpticalDisc); - break; - - // https://en.wikipedia.org/wiki/Wii_U - case RedumpSystem.NintendoWiiU: - types.Add(PhysicalMediaType.NintendoWiiUOpticalDisc); - break; - - // https://en.wikipedia.org/wiki/3DO_Interactive_Multiplayer - case RedumpSystem.Panasonic3DOInteractiveMultiplayer: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Philips_CD-i - case RedumpSystem.PhilipsCDi: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Polymega - case RedumpSystem.PlaymajiPolymega: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // https://en.wikipedia.org/wiki/LaserActive - case RedumpSystem.PioneerLaserActive: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.LaserDisc); - break; - - // https://en.wikipedia.org/wiki/Sega_CD - case RedumpSystem.SegaMegaCDSegaCD: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Dreamcast - case RedumpSystem.SegaDreamcast: - types.Add(PhysicalMediaType.CDROM); // Low density partition, MIL-CD - types.Add(PhysicalMediaType.GDROM); // High density partition - break; - - // https://en.wikipedia.org/wiki/Sega_Saturn - case RedumpSystem.SegaSaturn: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Neo_Geo_CD - case RedumpSystem.SNKNeoGeoCD: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/PlayStation_(console) - case RedumpSystem.SonyPlayStation: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/PlayStation_2 - case RedumpSystem.SonyPlayStation2: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // https://en.wikipedia.org/wiki/PlayStation_3 - case RedumpSystem.SonyPlayStation3: - types.Add(PhysicalMediaType.BluRay); - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // https://en.wikipedia.org/wiki/PlayStation_4 - case RedumpSystem.SonyPlayStation4: - types.Add(PhysicalMediaType.BluRay); - break; - - // https://en.wikipedia.org/wiki/PlayStation_5 - case RedumpSystem.SonyPlayStation5: - types.Add(PhysicalMediaType.BluRay); - break; - - // https://en.wikipedia.org/wiki/PlayStation_Portable - case RedumpSystem.SonyPlayStationPortable: - types.Add(PhysicalMediaType.UMD); - types.Add(PhysicalMediaType.CDROM); // Development discs only - types.Add(PhysicalMediaType.DVD); // Development discs only - break; - - // https://en.wikipedia.org/wiki/Tandy_Video_Information_System - case RedumpSystem.MemorexVisualInformationSystem: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Nuon_(DVD_technology) - case RedumpSystem.VMLabsNUON: - types.Add(PhysicalMediaType.DVD); - break; - - // https://en.wikipedia.org/wiki/V.Flash - case RedumpSystem.VTechVFlashVSmilePro: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Game_Wave_Family_Entertainment_System - case RedumpSystem.ZAPiTGamesGameWaveFamilyEntertainmentSystem: - types.Add(PhysicalMediaType.CDROM); // Firmware discs only(?) - types.Add(PhysicalMediaType.DVD); - break; - - #endregion - - #region Computers - - // https://en.wikipedia.org/wiki/Acorn_Archimedes - case RedumpSystem.AcornArchimedes: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.FloppyDisk); - break; - - // https://en.wikipedia.org/wiki/Macintosh - case RedumpSystem.AppleMacintosh: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - types.Add(PhysicalMediaType.FloppyDisk); - types.Add(PhysicalMediaType.HardDisk); - break; - - // https://en.wikipedia.org/wiki/Amiga - case RedumpSystem.CommodoreAmigaCD: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.FloppyDisk); - break; - - // https://en.wikipedia.org/wiki/FM_Towns - case RedumpSystem.FujitsuFMTownsseries: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/IBM_PC_compatible - case RedumpSystem.IBMPCcompatible: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - types.Add(PhysicalMediaType.BluRay); - types.Add(PhysicalMediaType.FloppyDisk); - types.Add(PhysicalMediaType.HardDisk); - types.Add(PhysicalMediaType.DataCartridge); - break; - - // https://en.wikipedia.org/wiki/PC-8800_series - case RedumpSystem.NECPC88series: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.FloppyDisk); - break; - - // https://en.wikipedia.org/wiki/PC-9800_series - case RedumpSystem.NECPC98series: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - types.Add(PhysicalMediaType.FloppyDisk); - break; - - // https://en.wikipedia.org/wiki/X68000 - case RedumpSystem.SharpX68000: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.FloppyDisk); - break; - - #endregion - - #region Arcade - - // https://www.bigbookofamigahardware.com/bboah/product.aspx?id=36 - case RedumpSystem.AmigaCUBOCD32: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Orbatak - case RedumpSystem.AmericanLaserGames3DO: - types.Add(PhysicalMediaType.CDROM); - break; - - // http://system16.com/hardware.php?id=779 - case RedumpSystem.Atari3DO: - types.Add(PhysicalMediaType.CDROM); - break; - - // http://newlifegames.net/nlg/index.php?topic=22003.0 - // http://newlifegames.net/nlg/index.php?topic=5486.msg119440 - case RedumpSystem.Atronic: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // https://www.arcade-museum.com/members/member_detail.php?member_id=406530 - case RedumpSystem.AUSCOMSystem1: - types.Add(PhysicalMediaType.CDROM); - break; - - // http://newlifegames.net/nlg/index.php?topic=285.0 - case RedumpSystem.BallyGameMagic: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/CP_System_III - case RedumpSystem.CapcomCPSystemIII: - types.Add(PhysicalMediaType.CDROM); - break; - - // UNKNOWN - case RedumpSystem.funworldPhotoPlay: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/FuRyu - case RedumpSystem.FuRyuOmronPurikura: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // UNKNOWN - case RedumpSystem.GlobalVRVarious: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://service.globalvr.com/troubleshooting/vortek.html - case RedumpSystem.GlobalVRVortek: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://service.globalvr.com/downloads/v3/040-1001-01c-V3-System-Manual.pdf - case RedumpSystem.GlobalVRVortekV3: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://www.icegame.com/games - case RedumpSystem.ICEPCHardware: - types.Add(PhysicalMediaType.DVD); - break; - - // https://github.com/mamedev/mame/blob/master/src/mame/drivers/iteagle.cpp - case RedumpSystem.IncredibleTechnologiesEagle: - types.Add(PhysicalMediaType.CDROM); - break; - - // UNKNOWN - case RedumpSystem.IncredibleTechnologiesVarious: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // UNKNOWN - case RedumpSystem.JVLiTouch: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // https://en.wikipedia.org/wiki/E-Amusement - case RedumpSystem.KonamieAmusement: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // http://system16.com/hardware.php?id=828 - case RedumpSystem.KonamiFireBeat: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // http://system16.com/hardware.php?id=577 - case RedumpSystem.KonamiSystemGV: - types.Add(PhysicalMediaType.CDROM); - break; - - // http://system16.com/hardware.php?id=575 - case RedumpSystem.KonamiM2: - types.Add(PhysicalMediaType.CDROM); - break; - - // http://system16.com/hardware.php?id=586 - // http://system16.com/hardware.php?id=977 - case RedumpSystem.KonamiPython: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // http://system16.com/hardware.php?id=976 - // http://system16.com/hardware.php?id=831 - case RedumpSystem.KonamiPython2: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // http://system16.com/hardware.php?id=582 - // http://system16.com/hardware.php?id=822 - // http://system16.com/hardware.php?id=823 - case RedumpSystem.KonamiSystem573: - types.Add(PhysicalMediaType.CDROM); - break; - - // http://system16.com/hardware.php?id=827 - case RedumpSystem.KonamiTwinkle: - types.Add(PhysicalMediaType.CDROM); - break; - - // UNKNOWN - case RedumpSystem.KonamiVarious: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // http://www.meritgames.com/Support_Center/manuals/PM0591-01.pdf - case RedumpSystem.MeritIndustriesBoardwalk: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // http://www.meritgames.com/Support_Center/Force%20Elite/PM0380-09.pdf - // http://www.meritgames.com/Support_Center/Force%20Upright/PM0382-07%20FORCE%20Upright%20manual.pdf - // http://www.meritgames.com/Support_Center/Force%20Upright/PM0383-07%20FORCE%20Upright%20manual.pdf - case RedumpSystem.MeritIndustriesMegaTouchForce: - types.Add(PhysicalMediaType.CDROM); - break; - - // http://www.meritgames.com/Service%20Center/Ion%20Troubleshooting.pdf - case RedumpSystem.MeritIndustriesMegaTouchION: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // http://www.meritgames.com/Support_Center/EZ%20Maxx/Manuals/MAXX%20Elite%20with%20coin.pdf - // http://www.meritgames.com/Support_Center/EZ%20Maxx/Manuals/MAXX%20Elite.pdf - // http://www.meritgames.com/Support_Center/manuals/90003010%20Maxx%20TSM_Rev%20C.pdf - case RedumpSystem.MeritIndustriesMegaTouchMaxx: - types.Add(PhysicalMediaType.CDROM); - break; - - // http://www.meritgames.com/Support_Center/manuals/pm0076_OA_Megatouch%20XL%20Trouble%20Shooting%20Manual.pdf - // http://www.meritgames.com/Support_Center/MEGA%20XL/manuals/Megatouch_XL_pm0109-0D.pdf - // http://www.meritgames.com/Support_Center/MEGA%20XL/manuals/Megatouch_XL_Super_5000_manual.pdf - case RedumpSystem.MeritIndustriesMegaTouchXL: - types.Add(PhysicalMediaType.CDROM); - break; - - // UNKNOWN - case RedumpSystem.NamcoPurikura: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // http://system16.com/hardware.php?id=543 - // http://system16.com/hardware.php?id=546 - // http://system16.com/hardware.php?id=872 - case RedumpSystem.NamcoSystem246256: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // http://system16.com/hardware.php?id=545 - case RedumpSystem.NamcoSegaNintendoTriforce: - types.Add(PhysicalMediaType.CDROM); // Low density partition - types.Add(PhysicalMediaType.GDROM); // High density partition - break; - - // http://system16.com/hardware.php?id=535 - case RedumpSystem.NamcoSystem12: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://www.arcade-history.com/?n=the-yakyuuken-part-1&page=detail&id=33049 - case RedumpSystem.NewJatreCDi: - types.Add(PhysicalMediaType.CDROM); - break; - - // http://blog.system11.org/?p=2499 - case RedumpSystem.NichibutsuHighRateSystem: - types.Add(PhysicalMediaType.DVD); - break; - - // http://blog.system11.org/?p=2514 - case RedumpSystem.NichibutsuSuperCD: - types.Add(PhysicalMediaType.CDROM); - break; - - // http://collectedit.com/collectors/shou-time-213/arcade-pcbs-281/x-rate-dvd-series-17-newlywed-life-japan-by-nichibutsu-32245 - case RedumpSystem.NichibutsuXRateSystem: - types.Add(PhysicalMediaType.DVD); - break; - - // https://en.wikipedia.org/wiki/Panasonic_M2 - case RedumpSystem.PanasonicM2: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // https://github.com/mamedev/mame/blob/master/src/mame/drivers/photoply.cpp - case RedumpSystem.PhotoPlayVarious: - types.Add(PhysicalMediaType.CDROM); - break; - - // UNKNOWN - case RedumpSystem.RawThrillsVarious: - types.Add(PhysicalMediaType.DVD); - break; - - // UNKNOWN - case RedumpSystem.SegaALLS: - types.Add(PhysicalMediaType.DVD); - break; - - // http://system16.com/hardware.php?id=729 - case RedumpSystem.SegaChihiro: - types.Add(PhysicalMediaType.CDROM); // Low density partition - types.Add(PhysicalMediaType.GDROM); // High density partition - break; - - // http://system16.com/hardware.php?id=907 - case RedumpSystem.SegaEuropaR: - types.Add(PhysicalMediaType.DVD); - break; - - // http://system16.com/hardware.php?id=985 - // http://system16.com/hardware.php?id=731 - // http://system16.com/hardware.php?id=984 - // http://system16.com/hardware.php?id=986 - case RedumpSystem.SegaLindbergh: - types.Add(PhysicalMediaType.DVD); - break; - - // http://system16.com/hardware.php?id=721 - // http://system16.com/hardware.php?id=723 - // http://system16.com/hardware.php?id=906 - // http://system16.com/hardware.php?id=722 - case RedumpSystem.SegaNaomi: - types.Add(PhysicalMediaType.CDROM); // Low density partition - types.Add(PhysicalMediaType.GDROM); // High density partition - break; - - // http://system16.com/hardware.php?id=725 - // http://system16.com/hardware.php?id=726 - // http://system16.com/hardware.php?id=727 - case RedumpSystem.SegaNaomi2: - types.Add(PhysicalMediaType.CDROM); // Low density partition - types.Add(PhysicalMediaType.GDROM); // High density partition - break; - - // https://segaretro.org/Sega_NAOMI#NAOMI_Satellite_Terminal - case RedumpSystem.SegaNaomiSatelliteTerminalPC: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - // https://en.wikipedia.org/wiki/List_of_Sega_arcade_system_boards#Sega_Nu - case RedumpSystem.SegaNu: - types.Add(PhysicalMediaType.DVD); - break; - - // https://en.wikipedia.org/wiki/List_of_Sega_arcade_system_boards#Sega_Nu - case RedumpSystem.SegaNu11: - types.Add(PhysicalMediaType.DVD); - break; - - // https://en.wikipedia.org/wiki/List_of_Sega_arcade_system_boards#Sega_Nu - case RedumpSystem.SegaNu2: - types.Add(PhysicalMediaType.DVD); - break; - - // https://segaretro.org/Nu_SX - case RedumpSystem.SegaNuSX: - types.Add(PhysicalMediaType.DVD); - break; - - // http://system16.com/hardware.php?id=910 - // https://en.wikipedia.org/wiki/List_of_Sega_arcade_system_boards#Sega_Ring_series - case RedumpSystem.SegaRingEdge: - types.Add(PhysicalMediaType.DVD); - break; - - // http://system16.com/hardware.php?id=982 - // https://en.wikipedia.org/wiki/List_of_Sega_arcade_system_boards#Sega_Ring_series - case RedumpSystem.SegaRingEdge2: - types.Add(PhysicalMediaType.DVD); - break; - - // http://system16.com/hardware.php?id=911 - // https://en.wikipedia.org/wiki/List_of_Sega_arcade_system_boards#Sega_Ring_series - case RedumpSystem.SegaRingWide: - types.Add(PhysicalMediaType.DVD); - break; - - // http://system16.com/hardware.php?id=711 - case RedumpSystem.SegaTitanVideo: - types.Add(PhysicalMediaType.CDROM); - break; - - // http://system16.com/hardware.php?id=709 - // http://system16.com/hardware.php?id=710 - case RedumpSystem.SegaSystem32: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://github.com/mamedev/mame/blob/master/src/mame/drivers/seibucats.cpp - case RedumpSystem.SeibuCATSSystem: - types.Add(PhysicalMediaType.DVD); - break; - - // https://www.tab.at/en/support/support/downloads - case RedumpSystem.TABAustriaQuizard: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://primetimeamusements.com/product/tsumo-multi-game-motion-system/ - // https://www.highwaygames.com/arcade-machines/tsumo-tsunami-motion-8117/ - case RedumpSystem.TsunamiTsuMoMultiGameMotionSystem: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/UltraCade_Technologies - case RedumpSystem.UltraCade: - types.Add(PhysicalMediaType.CDROM); - types.Add(PhysicalMediaType.DVD); - break; - - #endregion - - #region Others - - // https://en.wikipedia.org/wiki/Audio_CD - case RedumpSystem.AudioCD: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Blu-ray#Player_profiles - case RedumpSystem.BDVideo: - types.Add(PhysicalMediaType.BluRay); - break; - - // https://en.wikipedia.org/wiki/DVD-Audio - case RedumpSystem.DVDAudio: - types.Add(PhysicalMediaType.DVD); - break; - - // https://en.wikipedia.org/wiki/DVD-Video - case RedumpSystem.DVDVideo: - types.Add(PhysicalMediaType.DVD); - break; - - // https://en.wikipedia.org/wiki/Blue_Book_(CD_standard) - case RedumpSystem.EnhancedCD: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/HD_DVD - case RedumpSystem.HDDVDVideo: - types.Add(PhysicalMediaType.HDDVD); - break; - - // UNKNOWN - case RedumpSystem.NavisoftNaviken21: - types.Add(PhysicalMediaType.CDROM); - break; - - // UNKNOWN - case RedumpSystem.PalmOS: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Photo_CD - case RedumpSystem.PhotoCD: - types.Add(PhysicalMediaType.CDROM); - break; - - // UNKNOWN - case RedumpSystem.PlayStationGameSharkUpdates: - types.Add(PhysicalMediaType.CDROM); - break; - - // UNKNOWN - case RedumpSystem.PocketPC: - types.Add(PhysicalMediaType.CDROM); - break; - - // UNKNOWN - case RedumpSystem.Psion: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Doors_and_Windows_(EP) - case RedumpSystem.RainbowDisc: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://segaretro.org/Prologue_21 - case RedumpSystem.SegaPrologue21MultimediaKaraokeSystem: - types.Add(PhysicalMediaType.CDROM); - break; - - // UNKNOWN - case RedumpSystem.SharpZaurus: - types.Add(PhysicalMediaType.CDROM); - break; - - // UNKNOWN - case RedumpSystem.SonyElectronicBook: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Super_Audio_CD - case RedumpSystem.SuperAudioCD: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://www.cnet.com/products/tao-music-iktv-karaoke-station-karaoke-system-series/ - case RedumpSystem.TaoiKTV: - types.Add(PhysicalMediaType.CDROM); - break; - - // http://ultimateconsoledatabase.com/golden/kiss_site.htm - case RedumpSystem.TomyKissSite: - types.Add(PhysicalMediaType.CDROM); - break; - - // https://en.wikipedia.org/wiki/Video_CD - case RedumpSystem.VideoCD: - types.Add(PhysicalMediaType.CDROM); - break; - - #endregion - - default: - types.Add(PhysicalMediaType.NONE); - break; - } - - return types; - } - /// /// Convert master list of all media types to currently known Redump disc types /// @@ -1565,341 +801,6 @@ namespace SabreTools.RedumpLib.RedumpOrg.Data #endregion - #region System - - /// - /// Determine if a system is okay if it's not detected by Windows - /// - /// RedumpSystem value to check - /// True if Windows show see a disc when dumping, false otherwise - public static bool DetectedByWindows(this RedumpSystem? system) - { - return system switch - { - // BIOS Sets - RedumpSystem.MicrosoftXboxBIOS - or RedumpSystem.NintendoGameCubeBIOS - or RedumpSystem.SonyPlayStationBIOS - or RedumpSystem.SonyPlayStation2BIOS => false, - - // Disc-Based Consoles - RedumpSystem.AtariJaguarCDInteractiveMultimediaSystem - or RedumpSystem.BandaiPlaydiaQuickInteractiveSystem - or RedumpSystem.BandaiPippin - or RedumpSystem.HasbroVideoNow - or RedumpSystem.HasbroVideoNowColor - or RedumpSystem.HasbroVideoNowJr - or RedumpSystem.HasbroVideoNowXP - or RedumpSystem.NintendoGameCube - or RedumpSystem.NintendoWii - or RedumpSystem.NintendoWiiU - or RedumpSystem.Panasonic3DOInteractiveMultiplayer - or RedumpSystem.PhilipsCDi - or RedumpSystem.PioneerLaserActive - or RedumpSystem.MarkerDiscBasedConsoleEnd => false, - - // Computers - RedumpSystem.AppleMacintosh - or RedumpSystem.MarkerComputerEnd => false, - - // Arcade - RedumpSystem.AmericanLaserGames3DO - or RedumpSystem.Atari3DO - or RedumpSystem.NewJatreCDi - or RedumpSystem.PanasonicM2 - or RedumpSystem.MarkerArcadeEnd => false, - - // Other - RedumpSystem.PlayStationGameSharkUpdates - or RedumpSystem.SuperAudioCD - or RedumpSystem.MarkerOtherEnd => false, - - null => false, - _ => true, - }; - } - - /// - /// Determine if a system has reversed ringcodes - /// - /// RedumpSystem value to check - /// True if the system has reversed ringcodes, false otherwise - public static bool HasReversedRingcodes(this RedumpSystem? system) - { - return system switch - { - RedumpSystem.SonyPlayStation2 - or RedumpSystem.SonyPlayStation3 - or RedumpSystem.SonyPlayStation4 - or RedumpSystem.SonyPlayStation5 - or RedumpSystem.SonyPlayStationPortable => true, - _ => false, - }; - } - - /// - /// Determine if a system is considered audio-only - /// - /// RedumpSystem value to check - /// True if the system is audio-only, false otherwise - /// - /// Philips CD-i should NOT be in this list. It's being included until there's a - /// reasonable distinction between CD-i and CD-i ready on the database side. - /// - public static bool IsAudio(this RedumpSystem? system) - { - return system switch - { - RedumpSystem.AtariJaguarCDInteractiveMultimediaSystem - or RedumpSystem.AudioCD - or RedumpSystem.DVDAudio - or RedumpSystem.HasbroiONEducationalGamingSystem - or RedumpSystem.HasbroVideoNow - or RedumpSystem.HasbroVideoNowColor - or RedumpSystem.HasbroVideoNowJr - or RedumpSystem.HasbroVideoNowXP - or RedumpSystem.PhilipsCDi - or RedumpSystem.PlayStationGameSharkUpdates - or RedumpSystem.SuperAudioCD => true, - _ => false, - }; - } - - /// - /// Determine if a system is a marker value - /// - /// RedumpSystem value to check - /// True if the system is a marker value, false otherwise - public static bool IsMarker(this RedumpSystem system) - => ((RedumpSystem?)system).IsMarker(); - - /// - /// Determine if a system is a marker value - /// - /// RedumpSystem value to check - /// True if the system is a marker value, false otherwise - public static bool IsMarker(this RedumpSystem? system) - { - return system switch - { - RedumpSystem.MarkerArcadeEnd - or RedumpSystem.MarkerComputerEnd - or RedumpSystem.MarkerDiscBasedConsoleEnd - or RedumpSystem.MarkerOtherEnd => true, - _ => false, - }; - } - - /// - /// Determine if a system is considered XGD - /// - /// RedumpSystem value to check - /// True if the system is XGD, false otherwise - public static bool IsXGD(this RedumpSystem? system) - { - return system switch - { - RedumpSystem.MicrosoftXbox - or RedumpSystem.MicrosoftXbox360 - or RedumpSystem.MicrosoftXboxOne - or RedumpSystem.MicrosoftXboxSeriesXS => true, - _ => false, - }; - } - - /// - /// List all systems with their short usable names - /// - public static List ListSystems() - { - var systems = (RedumpSystem[])Enum.GetValues(typeof(RedumpSystem)); - var knownSystems = Array.FindAll(systems, s => !s.IsMarker() && s.GetCategory() != SystemCategory.NONE); - Array.Sort(knownSystems, (x, y) => (x.LongName() ?? string.Empty).CompareTo(y.LongName() ?? string.Empty)); - return [.. Array.ConvertAll(knownSystems, val => $"{val.ShortName()} - {val.LongName()}")]; - } - - /// - /// Get the Redump longnames for each known system - /// - /// - /// - public static string? LongName(this RedumpSystem system) - => AttributeHelper.GetHumanReadableAttribute(system)?.LongName; - - /// - /// Get the Redump longnames for each known system - /// - /// - /// - public static string? LongName(this RedumpSystem? system) - => AttributeHelper.GetHumanReadableAttribute(system)?.LongName; - - /// - /// Get the Redump shortnames for each known system - /// - /// - /// - public static string? ShortName(this RedumpSystem system) - => AttributeHelper.GetHumanReadableAttribute(system)?.ShortName; - - /// - /// Get the Redump shortnames for each known system - /// - /// - /// - public static string? ShortName(this RedumpSystem? system) - => AttributeHelper.GetHumanReadableAttribute(system)?.ShortName; - - /// - /// Determine the category of a system - /// - public static SystemCategory GetCategory(this RedumpSystem system) - => ((RedumpSystem?)system).GetCategory(); - - /// - /// Determine the category of a system - /// - public static SystemCategory GetCategory(this RedumpSystem? system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.Category ?? SystemCategory.NONE; - - /// - /// Determine if a system is available in Redump yet - /// - public static bool IsAvailable(this RedumpSystem system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.Available ?? false; - - /// - /// Determine if a system is available in Redump yet - /// - public static bool IsAvailable(this RedumpSystem? system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.Available ?? false; - - /// - /// Determine if a system is restricted to dumpers - /// - public static bool IsBanned(this RedumpSystem system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.IsBanned ?? false; - - /// - /// Determine if a system is restricted to dumpers - /// - public static bool IsBanned(this RedumpSystem? system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.IsBanned ?? false; - - /// - /// Determine if a system has a CUE pack - /// - public static bool HasCues(this RedumpSystem system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasCues ?? false; - - /// - /// Determine if a system has a CUE pack - /// - public static bool HasCues(this RedumpSystem? system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasCues ?? false; - - /// - /// Determine if a system has a DAT - /// - public static bool HasDat(this RedumpSystem system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasDat ?? false; - - /// - /// Determine if a system has a DAT - /// - public static bool HasDat(this RedumpSystem? system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasDat ?? false; - - /// - /// Determine if a system has a decrypted keys pack - /// - public static bool HasDkeys(this RedumpSystem system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasDkeys ?? false; - - /// - /// Determine if a system has a decrypted keys pack - /// - public static bool HasDkeys(this RedumpSystem? system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasDkeys ?? false; - - /// - /// Determine if a system has a GDI pack - /// - public static bool HasGdi(this RedumpSystem system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasGdi ?? false; - - /// - /// Determine if a system has a GDI pack - /// - public static bool HasGdi(this RedumpSystem? system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasGdi ?? false; - - /// - /// Determine if a system has a keys pack - /// - public static bool HasKeys(this RedumpSystem system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasKeys ?? false; - - /// - /// Determine if a system has a keys pack - /// - public static bool HasKeys(this RedumpSystem? system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasKeys ?? false; - - /// - /// Determine if a system has an LSD pack - /// - public static bool HasLsd(this RedumpSystem system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasLsd ?? false; - - /// - /// Determine if a system has an LSD pack - /// - public static bool HasLsd(this RedumpSystem? system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasLsd ?? false; - - /// - /// Determine if a system has an SBI pack - /// - public static bool HasSbi(this RedumpSystem system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasSbi ?? false; - - /// - /// Determine if a system has an SBI pack - /// - public static bool HasSbi(this RedumpSystem? system) - => (AttributeHelper.GetHumanReadableAttribute(system) as SystemAttribute)?.HasSbi ?? false; - - /// - /// Get the RedumpSystem enum value for a given string - /// - /// String value to convert - /// RedumpSystem represented by the string, if possible - public static RedumpSystem? ToRedumpSystem(this string? system) - { - // No value means no match - if (system is null || system.Length == 0) - return null; - - system = system.ToLowerInvariant(); - var redumpSystems = (RedumpSystem[])Enum.GetValues(typeof(RedumpSystem)); - - // Check short names - int index = Array.FindIndex(redumpSystems, s => system == s.ShortName()?.ToLowerInvariant()); - if (index > -1) - return redumpSystems[index]; - - // Check long names - index = Array.FindIndex(redumpSystems, s => system == s.LongName()?.ToLowerInvariant() - || system == s.LongName()?.Replace(" ", string.Empty)?.ToLowerInvariant()); - if (index > -1) - return redumpSystems[index]; - - return null; - } - - #endregion - #region System Category /// diff --git a/SabreTools.RedumpLib/RedumpOrg/Discs.cs b/SabreTools.RedumpLib/RedumpOrg/Discs.cs index 0a0f8dd..b4aec88 100644 --- a/SabreTools.RedumpLib/RedumpOrg/Discs.cs +++ b/SabreTools.RedumpLib/RedumpOrg/Discs.cs @@ -65,7 +65,7 @@ namespace SabreTools.RedumpLib.RedumpOrg SortCategory? sort = null, SortDirection? sortDir = null, DumpStatus? status = null, - RedumpSystem? system = null, + PhysicalSystem? system = null, int? tracks = null, bool comments = false, bool contents = false, @@ -234,7 +234,7 @@ namespace SabreTools.RedumpLib.RedumpOrg SortCategory? sort = null, SortDirection? sortDir = null, DumpStatus? status = null, - RedumpSystem? system = null, + PhysicalSystem? system = null, int? tracks = null, bool comments = false, bool contents = false, diff --git a/SabreTools.RedumpLib/RedumpOrg/Formatter.cs b/SabreTools.RedumpLib/RedumpOrg/Formatter.cs index bb08d78..077d7af 100644 --- a/SabreTools.RedumpLib/RedumpOrg/Formatter.cs +++ b/SabreTools.RedumpLib/RedumpOrg/Formatter.cs @@ -411,10 +411,10 @@ namespace SabreTools.RedumpLib.RedumpOrg /// /// Format a EDCSection /// - internal static void FormatOutputData(StringBuilder output, EDCSection? section, RedumpSystem? system) + internal static void FormatOutputData(StringBuilder output, EDCSection? section, PhysicalSystem? system) { // Check the section can be added - if (system != RedumpSystem.SonyPlayStation) + if (system != PhysicalSystem.SonyPlayStation) return; output.AppendLine("EDC:"); @@ -456,7 +456,7 @@ namespace SabreTools.RedumpLib.RedumpOrg /// internal static void FormatOutputData(StringBuilder output, CopyProtectionSection? section, - RedumpSystem? system) + PhysicalSystem? system) { // Optional sections have to exist to format if (section is null) @@ -474,7 +474,7 @@ namespace SabreTools.RedumpLib.RedumpOrg output.AppendLine("Copy Protection:"); - if (system == RedumpSystem.SonyPlayStation) + if (system == PhysicalSystem.SonyPlayStation) { AddIfExists(output, Template.PlayStationAntiModchipField, section.AntiModchip.LongName(), 1); AddIfExists(output, Template.PlayStationLibCryptField, section.LibCrypt.LongName(), 1); @@ -508,7 +508,7 @@ namespace SabreTools.RedumpLib.RedumpOrg internal static void FormatOutputData(StringBuilder output, SizeAndChecksumsSection? section, PhysicalMediaType? mediaType, - RedumpSystem? system, + PhysicalSystem? system, bool enableRedumpCompatibility) { output.AppendLine("Size & Checksum:"); diff --git a/SabreTools.RedumpLib/RedumpOrg/Packs.cs b/SabreTools.RedumpLib/RedumpOrg/Packs.cs index b8c25f0..0611415 100644 --- a/SabreTools.RedumpLib/RedumpOrg/Packs.cs +++ b/SabreTools.RedumpLib/RedumpOrg/Packs.cs @@ -1,5 +1,6 @@ using System; using System.Threading.Tasks; +using SabreTools.RedumpLib.Data; using SabreTools.RedumpLib.RedumpOrg.Data; namespace SabreTools.RedumpLib.RedumpOrg @@ -17,7 +18,7 @@ namespace SabreTools.RedumpLib.RedumpOrg /// True to use named subfolders to store downloads, false to store directly in the output directory public static async Task DownloadAllPacks(this Client client, string? outDir, bool useSubfolders) { - var systems = (RedumpSystem[])Enum.GetValues(typeof(RedumpSystem)); + var systems = (PhysicalSystem[])Enum.GetValues(typeof(PhysicalSystem)); return await client.DownloadPacksForSystems(systems, outDir, useSubfolders); } @@ -25,18 +26,18 @@ namespace SabreTools.RedumpLib.RedumpOrg /// Download premade packs for an individual system /// /// RedumpClient for connectivity - /// RedumpSystem to get all possible packs for + /// PhysicalSystem to get all possible packs for /// Output directory to save data to /// True to use named subfolders to store downloads, false to store directly in the output directory public static async Task DownloadPacksForSystem(this Client client, - RedumpSystem? system, + PhysicalSystem? system, string? outDir, bool useSubfolders) { if (system is null) return false; - var systems = new RedumpSystem[] { system.Value }; + var systems = new PhysicalSystem[] { system.Value }; return await client.DownloadPacksForSystems(systems, outDir, useSubfolders); } @@ -48,7 +49,7 @@ namespace SabreTools.RedumpLib.RedumpOrg /// Output directory to save data to /// True to use named subfolders to store downloads, false to store directly in the output directory public static async Task DownloadPacksForSystems(this Client client, - RedumpSystem[] systems, + PhysicalSystem[] systems, string? outDir, bool useSubfolders) { diff --git a/SabreTools.RedumpLib/RedumpOrg/UrlBuilder.cs b/SabreTools.RedumpLib/RedumpOrg/UrlBuilder.cs index b3b1fa6..411ce0b 100644 --- a/SabreTools.RedumpLib/RedumpOrg/UrlBuilder.cs +++ b/SabreTools.RedumpLib/RedumpOrg/UrlBuilder.cs @@ -187,7 +187,7 @@ namespace SabreTools.RedumpLib.RedumpOrg SortCategory? sort = null, SortDirection? sortDir = null, DumpStatus? status = null, - RedumpSystem? system = null, + PhysicalSystem? system = null, int? tracks = null, bool comments = false, bool contents = false, @@ -389,7 +389,7 @@ namespace SabreTools.RedumpLib.RedumpOrg /// Does not check for invalid usernames public static string BuildListUrl(string dumper, bool? have = null, - RedumpSystem? system = null) + PhysicalSystem? system = null) { var sb = new StringBuilder(); @@ -445,7 +445,7 @@ namespace SabreTools.RedumpLib.RedumpOrg /// Pack type /// System for download /// Does not check for invalid systems - public static string BuildPackUrl(PackType packType, RedumpSystem system) + public static string BuildPackUrl(PackType packType, PhysicalSystem system) { var sb = new StringBuilder();