diff --git a/DICUI.Library/Data/Constants.cs b/DICUI.Library/Data/Constants.cs index 45224c41..ba30f7f3 100644 --- a/DICUI.Library/Data/Constants.cs +++ b/DICUI.Library/Data/Constants.cs @@ -59,6 +59,96 @@ public const string VideoNow = "/vn"; } + /// + /// Internal names of fields on the New Disc page + /// + public static class NewDiscPageStrings + { + // Common disc info + + public const string System = ""; // Undefined, use shortnames + public const string Media = ""; // Undefined, use shortnames + public const string Title = "d_title"; + public const string ForeignTitleNonLatin = "d_title_foreign"; + public const string DiscNumberLetter = "d_number"; + public const string DiscTitle = "d_label"; + public const string Category = "d_category"; // Category enum + public const string Region = "d_region"; // Single region only + public const string Languages = "d_languages[]"; // Multiple languages possible + public const string LanguageSelectionVia = "d_languages_selection[]"; // PS2; "Bios settings", "Language selector", "Options menu"; Muliple choices possible + public const string Serial = "d_serial"; + public const string Ring = "d_ring"; + public const string RingId = "d_ring_0_id"; // Hidden + public const string MasteringRingFirstLayerDataSide = "d_ring_0_ma1"; + public const string MasteringSIDCodeFirstLayerDataSide = "d_ring_0_ma1_sid"; + public const string ToolstampMasteringCodeFirstLayerDataSide = "d_ring_0_ts1"; + public const string MouldSIDCodeFirstLayerDataSide = "d_ring_0_mo1_sid"; + public const string AdditionalMouldFirstLayerDataSide = "dr_ring_0_mo1"; + public const string MasteringRingSecondLayerLabelSide = "d_ring_0_ma2"; + public const string MasteringSIDCodeSecondLayerLabelSide = "d_ring_0_ma2_sid"; + public const string ToolstampMasteringCodeSecondLayerLabelSide = "d_ring_0_ts2"; + public const string MouldSIDCodeSecondLayerLabelSide = "d_ring_0_mo2_sid"; + public const string AdditionalMouldSecondLayerLabelSide = "dr_ring_0_mo2"; + public const string RingOffsetsHidden = "d_ring_0_offsets"; // Hidden, value '1' + public const string RingZeroId = "d_ring_0_0_id"; // Hidden + public const string RingZeroDensity = "d_ring_0_0_density"; // Hidden + public const string RingWriteOffset = "d_ring_0_0_value"; + public const string RingCount = "d_ring_count"; // Hidden, value '1' + public const string Barcode = "d_barcode"; + public const string EXEDateBuildDate = "d_date"; // PSX, PS2, MCD, SS, DC, PC-98, ACD, CD32, CDTV, NGCD, QIS, FMT, HS, ITE, KEA, KFB, KS573, KSGV, KT, CHIHIRO, NAOMI, NAOMI2, STV, TRIFORCE, NAVI21 + public const string ErrorsCount = "d_errors"; + public const string Comments = "d_comments"; + public const string Contents = "d_contents"; + + // Version and editions + + public const string Version = "d_version"; + public const string VersionDatfile = "d_version_datfile"; + public const string CommonEditions = "d_editions[]"; // Multiple editions possible + public const string OtherEditions = "d_editions_text"; + + // EDC (PSX) + public const string EDC = "d_edc"; // 1 = No, 2 = Yes + + // Parent/Clone relationship + public const string ParentID = "d_parent_id"; + public const string RegionalParent = "d_is_regional_parent"; // Single checkbox + + // Extras + public const string PVD = "d_pvd"; // CD,DVD-based (ISO9660 FS only) + public const string DiscKey = "d_d1_key"; // PS3 BD-based, WIIU + public const string DiscID = "d_d2_key"; // PS3 BD-based + public const string PIC = "d_pic_data"; // BD-based + public const string Header = "d_header"; // MCD, SS, GD-based + public const string BCA = "d_bca"; // GC, WII + public const string SecuritySectorRanges = "d_ssranges"; // XBOX DVD-based with SS, XBOX360 DVD-based with SS + + // Copy protection + public const string AntiModchip = "d_protection_a"; // PSX; RedumpYesNo enum + public const string LibCrypt = "d_protection_1"; // PSX; RedumpYesNo enum + public const string LibCryptData = "d_libcrypt"; // PSX + public const string Protection = "d_protection"; // PC, MAC, DVD-VIDEO, BD-VIDEO, GAMEWAVE + public const string SecuROMData = "d_securom"; // PC + + // Dumpers and status (moderator only) + public const string Status = "d_status"; // DumpStatus enum + public const string Dumpers = "d_dumpers[]"; // Multiple dumpers possible (by dumper ID) + public const string OtherDumpers = "d_dumpers_text"; + + // Tracks and write offsets (CD,GD-based) + public const string ClrMameProData = "d_tracks"; + public const string Cuesheet = "d_cue"; + public const string CommonWriteOffsets = "d_offset[]"; // Multiple offsets possible + public const string OtherWriteOffsets = "d_offset_text"; + + // Size & checksums (DVD,BD,UMD-based) + public const string Layerbreak = "d_layerbreak"; // DVD-9, BD-50, UMD-DL only + public const string Size = "d_size"; + public const string CRC32 = "d_crc32"; + public const string MD5 = "d_md5"; + public const string SHA1 = "d_sha1"; + } + /// /// Template field values for submission info /// @@ -67,6 +157,7 @@ // Manual information public const string TitleField = "Title"; + public const string ForeignTitleField = "Foreign Title (Non-latin)"; public const string DiscNumberField = "Disc Number / Letter"; public const string DiscTitleField = "Disc Title"; public const string SystemField = "System"; @@ -74,6 +165,7 @@ public const string CategoryField = "Category"; public const string RegionField = "Region"; public const string LanguagesField = "Languages"; + public const string PlaystationLanguageSelectionViaField = "Language Selection Via"; public const string DiscSerialField = "Disc Serial"; public const string BarcodeField = "Barcode"; public const string ISBNField = "ISBN"; @@ -81,6 +173,9 @@ public const string ContentsField = "Contents"; public const string VersionField = "Version"; public const string EditionField = "Edition/Release"; + public const string PlayStation3WiiDiscKeyField = "Disc Key"; + public const string PlayStation3DiscIDField = "Disc ID"; + public const string GameCubeWiiBCAField = "BCA"; public const string CopyProtectionField = "Copy Protection"; public const string MasteringRingField = "Mastering Code (laser branded/etched)"; public const string MasteringSIDField = "Mastering SID Code"; @@ -97,13 +192,12 @@ public const string SubIntentionField = "SubIntention Data (SecuROM/LibCrypt)"; public const string WriteOffsetField = "Write Offset"; public const string LayerbreakField = "Layerbreak"; - public const string PlaystationEXEDateField = "EXE Date"; + public const string EXEDateBuildDate = "EXE/Build Date"; + public const string HeaderField = "Header"; + public const string PICField = "Permanent Information & Control (PIC)"; public const string PlayStationEDCField = "EDC"; public const string PlayStationAntiModchipField = "Anti-modchip"; public const string PlayStationLibCryptField = "LibCrypt"; - public const string PlayStation4PICField = "Permanent Information & Control (PIC)"; - public const string SegaHeaderField = "Header"; - public const string SegaBuildDateField = "Build Date"; public const string XBOXDMIHash = "DMI.bin Hashes"; public const string XBOXPFIHash = "PFI.bin Hashes"; public const string XBOXSSHash = "SS.bin Hashes"; diff --git a/DICUI.Library/Data/Enumerations.cs b/DICUI.Library/Data/Enumerations.cs index 42fec2ec..2eeba883 100644 --- a/DICUI.Library/Data/Enumerations.cs +++ b/DICUI.Library/Data/Enumerations.cs @@ -1,5 +1,23 @@ namespace DICUI.Data { + /// + /// Category for Redump + /// + public enum Category + { + Games = 1, + Demos = 2, + Video = 3, + Audio = 4, + Multimedia = 5, + Applications = 6, + Coverdiscs = 7, + Educational = 8, + BonusDiscs = 9, + Preproduction = 10, + AddOns = 11, + } + /// /// Supported DIC commands /// @@ -61,6 +79,16 @@ VideoNow, } + /// + /// Dump status for Redump + /// + public enum DumpStatus + { + PossibleBadDumpYellow = 3, + OriginalMediaBlue = 4, + TwoOrMoreDumpsGreen = 5, + } + /// /// Known systems /// @@ -251,6 +279,7 @@ DVDVideo, EnhancedCD, HDDVDVideo, + NavisoftNaviken21, PalmOS, PhilipsCDiDigitalVideo, PhotoCD, @@ -331,4 +360,13 @@ Cartridge, CED, } + + /// + /// Generic yes/no values for Redump + /// + public enum RedumpYesNo + { + No = 1, + Yes = 2, + } } diff --git a/DICUI.Library/Utilities/Converters.cs b/DICUI.Library/Utilities/Converters.cs index 30919084..b2dcd351 100644 --- a/DICUI.Library/Utilities/Converters.cs +++ b/DICUI.Library/Utilities/Converters.cs @@ -408,41 +408,41 @@ namespace DICUI.Utilities case MediaType.GDROM: return "gdrom"; case MediaType.HDDVD: - return "HD-DVD-ROM"; + return "hddvd"; case MediaType.HardDisk: - return "Hard Disk"; + return "hdd"; case MediaType.IomegaBernoulliDisk: - return "Iomega Bernoulli Disk"; + return "bernoulli"; case MediaType.IomegaJaz: - return "Iomega Jaz"; + return "jaz"; case MediaType.IomegaZip: - return "Iomega Zip"; + return "zip"; case MediaType.LaserDisc: - return "LD-ROM / LV-ROM"; + return "ldrom"; case MediaType.Nintendo64DD: - return "64DD Disk"; + return "64dd"; case MediaType.NintendoFamicomDiskSystem: - return "Famicom Disk System Disk"; + return "fds"; case MediaType.NintendoGameCubeGameDisc: - return "GameCube Game Disc"; + return "gc"; case MediaType.NintendoWiiOpticalDisc: - return "Wii Optical Disc"; + return "wii"; case MediaType.NintendoWiiUOpticalDisc: - return "Wii U Optical Disc"; + return "wiiu"; case MediaType.UMD: - return "UMD"; + return "umd"; #endregion // Unsorted Formats case MediaType.Cartridge: - return "Cartridge"; + return "cart"; case MediaType.CED: - return "CED"; + return "ced"; case MediaType.NONE: default: - return "Unknown"; + return "unknown"; } } @@ -851,6 +851,8 @@ namespace DICUI.Utilities return "Enhanced CD"; case KnownSystem.HDDVDVideo: return "HD-DVD-Video"; + case KnownSystem.NavisoftNaviken21: + return "Navisoft Naviken 2.1"; case KnownSystem.PalmOS: return "PalmOS"; case KnownSystem.PhilipsCDiDigitalVideo: @@ -1108,6 +1110,8 @@ namespace DICUI.Utilities return "enhanced cd"; case KnownSystem.HDDVDVideo: return "hddvd-video"; + case KnownSystem.NavisoftNaviken21: + return "naviken"; case KnownSystem.PalmOS: return "palmos"; case KnownSystem.PhilipsCDiDigitalVideo: @@ -1787,6 +1791,14 @@ namespace DICUI.Utilities case "hddvd-video": case "hd-dvd-video": return KnownSystem.HDDVDVideo; + case "naviken": + case "naviken21": + case "naviken 2.1": + case "navisoftnaviken": + case "navisoft naviken": + case "navisoftnaviken21": + case "navisoft naviken 2.1": + return KnownSystem.NavisoftNaviken21; case "palm": case "palmos": return KnownSystem.PalmOS; diff --git a/DICUI.Library/Utilities/DumpEnvironment.cs b/DICUI.Library/Utilities/DumpEnvironment.cs index 67dc04a5..a6fdf299 100644 --- a/DICUI.Library/Utilities/DumpEnvironment.cs +++ b/DICUI.Library/Utilities/DumpEnvironment.cs @@ -435,6 +435,7 @@ namespace DICUI.Utilities Dictionary mappings = new Dictionary { { Template.TitleField, Template.RequiredValue }, + { Template.ForeignTitleField, Template.OptionalValue }, { Template.DiscNumberField, Template.OptionalValue }, { Template.DiscTitleField, Template.OptionalValue }, { Template.SystemField, System.Name() }, @@ -475,6 +476,10 @@ namespace DICUI.Utilities mappings[Template.CuesheetField] = GetFullFile(combinedBase + ".cue") ?? ""; mappings[Template.WriteOffsetField] = GetWriteOffset(combinedBase + "_disc.txt") ?? ""; + // GD-ROM-specfic options + if (Type == MediaType.GDROM) + mappings[Template.HeaderField] = GetSegaHeader(combinedBase + "_mainInfo.txt") ?? ""; + // System-specific options switch (System) { @@ -497,38 +502,61 @@ namespace DICUI.Utilities } } + break; + case KnownSystem.BandaiPlaydiaQuickInteractiveSystem: + case KnownSystem.CommodoreAmiga: + case KnownSystem.CommodoreAmigaCD32: + case KnownSystem.CommodoreAmigaCDTV: + case KnownSystem.FujitsuFMTowns: + case KnownSystem.IncredibleTechnologiesEagle: + case KnownSystem.KonamieAmusement: + case KnownSystem.KonamiFirebeat: + case KnownSystem.KonamiGVSystem: + case KnownSystem.KonamiSystem573: + case KnownSystem.KonamiTwinkle: + case KnownSystem.MattelHyperscan: + case KnownSystem.NamcoSegaNintendoTriforce: + case KnownSystem.NavisoftNaviken21: + case KnownSystem.NECPC98: + case KnownSystem.SegaChihiro: + case KnownSystem.SegaDreamcast: + case KnownSystem.SegaNaomi: + case KnownSystem.SegaNaomi2: + case KnownSystem.SegaTitanVideo: + case KnownSystem.SNKNeoGeoCD: + mappings[Template.EXEDateBuildDate] = Template.RequiredValue; break; case KnownSystem.SegaCDMegaCD: - mappings[Template.SegaHeaderField] = GetSegaHeader(combinedBase + "_mainInfo.txt") ?? ""; + mappings[Template.HeaderField] = GetSegaHeader(combinedBase + "_mainInfo.txt") ?? ""; // Take only the last 16 lines for Sega CD - if (!string.IsNullOrEmpty(mappings[Template.SegaHeaderField])) - mappings[Template.SegaHeaderField] = string.Join("\n", mappings[Template.SegaHeaderField].Split('\n').Skip(16)); + if (!string.IsNullOrEmpty(mappings[Template.HeaderField])) + mappings[Template.HeaderField] = string.Join("\n", mappings[Template.HeaderField].Split('\n').Skip(16)); - if (GetSegaCDBuildInfo(mappings[Template.SegaHeaderField], out string scdSerial, out string fixedDate)) + if (GetSegaCDBuildInfo(mappings[Template.HeaderField], out string scdSerial, out string fixedDate)) { mappings[Template.DiscSerialField] = scdSerial ?? ""; - mappings[Template.SegaBuildDateField] = fixedDate ?? ""; + mappings[Template.EXEDateBuildDate] = fixedDate ?? ""; } break; case KnownSystem.SegaSaturn: - mappings[Template.SegaHeaderField] = GetSegaHeader(combinedBase + "_mainInfo.txt") ?? ""; + mappings[Template.HeaderField] = GetSegaHeader(combinedBase + "_mainInfo.txt") ?? ""; // Take only the first 16 lines for Saturn - if (!string.IsNullOrEmpty(mappings[Template.SegaHeaderField])) - mappings[Template.SegaHeaderField] = string.Join("\n", mappings[Template.SegaHeaderField].Split('\n').Take(16)); + if (!string.IsNullOrEmpty(mappings[Template.HeaderField])) + mappings[Template.HeaderField] = string.Join("\n", mappings[Template.HeaderField].Split('\n').Take(16)); - if (GetSaturnBuildInfo(mappings[Template.SegaHeaderField], out string saturnSerial, out string version, out string buildDate)) + if (GetSaturnBuildInfo(mappings[Template.HeaderField], out string saturnSerial, out string version, out string buildDate)) { mappings[Template.DiscSerialField] = saturnSerial ?? ""; mappings[Template.VersionField] = version ?? ""; - mappings[Template.SegaBuildDateField] = buildDate ?? ""; + mappings[Template.EXEDateBuildDate] = buildDate ?? ""; } break; case KnownSystem.SonyPlayStation: - mappings[Template.PlaystationEXEDateField] = GetPlayStationEXEDate(Drive.Letter) ?? ""; + mappings[Template.EXEDateBuildDate] = GetPlayStationEXEDate(Drive.Letter) ?? ""; mappings[Template.PlayStationEDCField] = GetMissingEDCCount(combinedBase + ".img_EdcEcc.txt") > 0 ? "No" : "Yes"; mappings[Template.PlayStationAntiModchipField] = GetAntiModchipDetected(combinedBase + "_disc.txt") ? "Yes" : "No"; mappings[Template.PlayStationLibCryptField] = "No"; @@ -544,7 +572,8 @@ namespace DICUI.Utilities break; case KnownSystem.SonyPlayStation2: - mappings[Template.PlaystationEXEDateField] = GetPlayStationEXEDate(Drive.Letter) ?? ""; + mappings[Template.PlaystationLanguageSelectionViaField] = "Bios settings, Language selector, Options menu"; + mappings[Template.EXEDateBuildDate] = GetPlayStationEXEDate(Drive.Letter) ?? ""; mappings[Template.VersionField] = GetPlayStation2Version(Drive.Letter) ?? ""; break; } @@ -601,6 +630,10 @@ namespace DICUI.Utilities mappings[Template.LayerbreakField] = layerbreak; } + // Bluray-specific options + if (Type == MediaType.BluRay) + mappings[Template.PICField] = GetPIC(Path.Combine(OutputDirectory, "PIC.bin")) ?? ""; + // System-specific options switch (System) { @@ -624,9 +657,17 @@ namespace DICUI.Utilities } break; + + case KnownSystem.BDVideo: + mappings[Template.CopyProtectionField] = Template.RequiredIfExistsValue; + break; case KnownSystem.DVDVideo: mappings[Template.CopyProtectionField] = GetDVDProtection(combinedBase + "_CSSKey.txt", combinedBase + "_disc.txt") ?? ""; break; + case KnownSystem.KonamieAmusement: + case KnownSystem.KonamiFirebeat: + mappings[Template.EXEDateBuildDate] = Template.RequiredValue; + break; case KnownSystem.MicrosoftXBOX: if (GetXBOXAuxInfo(combinedBase + "_disc.txt", out string dmihash, out string pfihash, out string sshash, out string ss, out string ssver)) { @@ -661,16 +702,31 @@ namespace DICUI.Utilities } break; case KnownSystem.SonyPlayStation2: - mappings[Template.PlaystationEXEDateField] = GetPlayStationEXEDate(Drive.Letter) ?? ""; + mappings[Template.EXEDateBuildDate] = GetPlayStationEXEDate(Drive.Letter) ?? ""; mappings[Template.VersionField] = GetPlayStation2Version(Drive.Letter) ?? ""; break; + case KnownSystem.SonyPlayStation3: + mappings[Template.PlayStation3WiiDiscKeyField] = Template.RequiredValue; + mappings[Template.PlayStation3DiscIDField] = Template.RequiredValue; + break; case KnownSystem.SonyPlayStation4: - mappings[Template.PlayStation4PICField] = GetPlayStation4PIC(Path.Combine(OutputDirectory, "PIC.bin")) ?? ""; mappings[Template.VersionField] = GetPlayStation4Version(Drive.Letter) ?? ""; break; + case KnownSystem.ZAPiTGamesGameWaveFamilyEntertainmentSystem: + mappings[Template.CopyProtectionField] = Template.RequiredIfExistsValue; + break; } break; + case MediaType.NintendoGameCubeGameDisc: + mappings[Template.GameCubeWiiBCAField] = Template.RequiredValue; + break; + + case MediaType.NintendoWiiOpticalDisc: + mappings[Template.PlayStation3WiiDiscKeyField] = Template.RequiredValue; + mappings[Template.GameCubeWiiBCAField] = Template.RequiredValue; + break; + case MediaType.UMD: mappings[Template.PVDField] = GetPVD(combinedBase + "_mainInfo.txt") ?? ""; mappings[Template.DATField] = Template.RequiredValue + " [Not automatically generated for UMD]"; @@ -679,7 +735,14 @@ namespace DICUI.Utilities mappings[Template.TitleField] = title ?? ""; mappings[Template.VersionField] = umdversion ?? ""; if (!String.IsNullOrWhiteSpace(umdlayer)) + { mappings[Template.LayerbreakField] = umdlayer ?? ""; + mappings[Template.MediaTypeField] += "-DL"; + } + else + { + mappings[Template.MediaTypeField] += "-SL"; + } } break; @@ -693,7 +756,6 @@ namespace DICUI.Utilities /// /// Information dictionary that should contain normalized values /// List of strings representing each line of an output file, null on error - /// TODO: Get full list of customizable stuff for other systems private List FormatOutputData(Dictionary info) { // Check to see if the inputs are valid @@ -708,6 +770,7 @@ namespace DICUI.Utilities List output = new List { Template.TitleField + ": " + info[Template.TitleField], + Template.ForeignTitleField + ": " + info[Template.ForeignTitleField], Template.DiscNumberField + ": " + info[Template.DiscNumberField], Template.DiscTitleField + ": " + info[Template.DiscTitleField], Template.SystemField + ": " + info[Template.SystemField], @@ -718,147 +781,122 @@ namespace DICUI.Utilities Template.DiscSerialField + ": " + info[Template.DiscSerialField] }; - switch (System) - { - case KnownSystem.SegaCDMegaCD: - case KnownSystem.SegaSaturn: - output.Add(Template.SegaBuildDateField + ": " + info[Template.SegaBuildDateField]); - break; - case KnownSystem.SonyPlayStation: - case KnownSystem.SonyPlayStation2: - output.Add(Template.PlaystationEXEDateField + ": " + info[Template.PlaystationEXEDateField]); - break; - } + // Known as EXE Date and Build Date depending on the form + if (info.ContainsKey(Template.EXEDateBuildDate)) + output.Add(Template.EXEDateBuildDate + ": " + info[Template.EXEDateBuildDate]); + output.Add("Ringcode Information:"); - switch (Type) + + // If we have a dual-layer disc + if (info.ContainsKey(Template.LayerbreakField)) { - case MediaType.CDROM: - case MediaType.GDROM: - case MediaType.DVD: - case MediaType.HDDVD: - case MediaType.BluRay: - // If we have a dual-layer disc - if (info.ContainsKey(Template.LayerbreakField)) - { - output.Add("\tOuter " + Template.MasteringRingField + ": " + info["Outer " + Template.MasteringRingField]); - output.Add("\tInner " + Template.MasteringRingField + ": " + info["Inner " + Template.MasteringRingField]); - output.Add("\tOuter " + Template.MasteringSIDField + ": " + info["Outer " + Template.MasteringSIDField]); - output.Add("\tInner " + Template.MasteringSIDField + ": " + info["Inner " + Template.MasteringSIDField]); - output.Add("\tData-Side " + Template.MouldSIDField + ": " + info["Data-Side " + Template.MouldSIDField]); - output.Add("\tLabel-Side " + Template.MouldSIDField + ": " + info["Label-Side " + Template.MouldSIDField]); - output.Add("\t" + Template.AdditionalMouldField + ": " + info[Template.AdditionalMouldField]); - output.Add("\tOuter " + Template.ToolstampField + ": " + info["Outer " + Template.ToolstampField]); - output.Add("\tInner " + Template.ToolstampField + ": " + info["Inner " + Template.ToolstampField]); - } - // If we have a single-layer disc - else - { - output.Add("\t" + Template.MasteringRingField + ": " + info[Template.MasteringRingField]); - output.Add("\t" + Template.MasteringSIDField + ": " + info[Template.MasteringSIDField]); - output.Add("\tData-Side " + Template.MouldSIDField + ": " + info["Data-Side " + Template.MouldSIDField]); - output.Add("\tLabel-Side " + Template.MouldSIDField + ": " + info["Label-Side " + Template.MouldSIDField]); - output.Add("\t" + Template.AdditionalMouldField + ": " + info[Template.AdditionalMouldField]); - output.Add("\t" + Template.ToolstampField + ": " + info[Template.ToolstampField]); - } - break; + output.Add("\tOuter " + Template.MasteringRingField + ": " + info["Outer " + Template.MasteringRingField]); + output.Add("\tInner " + Template.MasteringRingField + ": " + info["Inner " + Template.MasteringRingField]); + output.Add("\tOuter " + Template.MasteringSIDField + ": " + info["Outer " + Template.MasteringSIDField]); + output.Add("\tInner " + Template.MasteringSIDField + ": " + info["Inner " + Template.MasteringSIDField]); + output.Add("\tData-Side " + Template.MouldSIDField + ": " + info["Data-Side " + Template.MouldSIDField]); + output.Add("\tLabel-Side " + Template.MouldSIDField + ": " + info["Label-Side " + Template.MouldSIDField]); + output.Add("\t" + Template.AdditionalMouldField + ": " + info[Template.AdditionalMouldField]); + output.Add("\tOuter " + Template.ToolstampField + ": " + info["Outer " + Template.ToolstampField]); + output.Add("\tInner " + Template.ToolstampField + ": " + info["Inner " + Template.ToolstampField]); } + // If we have a single-layer disc + else + { + output.Add("\t" + Template.MasteringRingField + ": " + info[Template.MasteringRingField]); + output.Add("\t" + Template.MasteringSIDField + ": " + info[Template.MasteringSIDField]); + output.Add("\tData-Side " + Template.MouldSIDField + ": " + info["Data-Side " + Template.MouldSIDField]); + output.Add("\tLabel-Side " + Template.MouldSIDField + ": " + info["Label-Side " + Template.MouldSIDField]); + output.Add("\t" + Template.AdditionalMouldField + ": " + info[Template.AdditionalMouldField]); + output.Add("\t" + Template.ToolstampField + ": " + info[Template.ToolstampField]); + } + output.Add(Template.BarcodeField + ": " + info[Template.BarcodeField]); - switch (System) - { - case KnownSystem.AppleMacintosh: - case KnownSystem.EnhancedCD: - case KnownSystem.IBMPCCompatible: - case KnownSystem.RainbowDisc: - output.Add(Template.ISBNField + ": " + info[Template.ISBNField]); - break; - } - switch (Type) - { - case MediaType.CDROM: - case MediaType.GDROM: - output.Add(Template.ErrorCountField + ": " + info[Template.ErrorCountField]); - break; - } + if (info.ContainsKey(Template.ISBNField)) + output.Add(Template.ISBNField + ": " + info[Template.ISBNField]); + + if (info.ContainsKey(Template.ErrorCountField)) + output.Add(Template.ErrorCountField + ": " + info[Template.ErrorCountField]); + output.Add(Template.CommentsField + ": " + info[Template.CommentsField]); output.Add(Template.ContentsField + ": " + info[Template.ContentsField]); output.Add(Template.VersionField + ": " + info[Template.VersionField]); output.Add(Template.EditionField + ": " + info[Template.EditionField]); - switch (System) + + if (info.ContainsKey(Template.HeaderField)) { - case KnownSystem.SegaCDMegaCD: - case KnownSystem.SegaSaturn: - output.Add(Template.SegaHeaderField + ":"); output.Add(""); - output.AddRange(info[Template.SegaHeaderField].Split('\n')); output.Add(""); - break; - case KnownSystem.SonyPlayStation: - output.Add(Template.PlayStationEDCField + ": " + info[Template.PlayStationEDCField]); - output.Add(Template.PlayStationAntiModchipField + ": " + info[Template.PlayStationAntiModchipField]); - output.Add(Template.PlayStationLibCryptField + ": " + info[Template.PlayStationLibCryptField]); - break; + output.Add(Template.HeaderField + ":"); output.Add(""); + output.AddRange(info[Template.HeaderField].Split('\n')); output.Add(""); } - switch (Type) + + if (info.ContainsKey(Template.PlayStationEDCField)) { - case MediaType.DVD: - case MediaType.BluRay: - case MediaType.UMD: - // If we have a dual-layer disc - if (info.ContainsKey(Template.LayerbreakField)) - { - output.Add(Template.LayerbreakField + ": " + info[Template.LayerbreakField]); - } - break; + output.Add(Template.PlayStationEDCField + ": " + info[Template.PlayStationEDCField]); + output.Add(Template.PlayStationAntiModchipField + ": " + info[Template.PlayStationAntiModchipField]); + output.Add(Template.PlayStationLibCryptField + ": " + info[Template.PlayStationLibCryptField]); } + + if (info.ContainsKey(Template.LayerbreakField)) + output.Add(Template.LayerbreakField + ": " + info[Template.LayerbreakField]); + output.Add(Template.PVDField + ":"); output.Add(""); output.AddRange(info[Template.PVDField].Split('\n')); - switch (System) + + if (info.ContainsKey(Template.PlayStation3WiiDiscKeyField)) + output.Add(Template.PlayStation3WiiDiscKeyField + ": " + info[Template.PlayStation3WiiDiscKeyField]); + + if (info.ContainsKey(Template.PlayStation3DiscIDField)) + output.Add(Template.PlayStation3DiscIDField + ": " + info[Template.PlayStation3DiscIDField]); + + if (info.ContainsKey(Template.PICField)) { - case KnownSystem.AppleMacintosh: - case KnownSystem.EnhancedCD: - case KnownSystem.IBMPCCompatible: - case KnownSystem.RainbowDisc: - output.Add(Template.CopyProtectionField + ": " + info[Template.CopyProtectionField]); output.Add(""); - break; - case KnownSystem.DVDVideo: - output.Add(Template.CopyProtectionField + ":"); output.Add(""); - output.AddRange(info[Template.CopyProtectionField].Split('\n')); - break; - case KnownSystem.MicrosoftXBOX: - case KnownSystem.MicrosoftXBOX360: - if (Type == MediaType.DVD) - { - output.Add(Template.XBOXDMIHash + ": " + info[Template.XBOXDMIHash]); - output.Add(Template.XBOXPFIHash + ": " + info[Template.XBOXPFIHash]); - output.Add(Template.XBOXSSHash + ": " + info[Template.XBOXSSHash]); output.Add(""); - output.Add(Template.XBOXSSVersion + ": " + info[Template.XBOXSSVersion]); - output.Add(Template.XBOXSSRanges + ":"); output.Add(""); - output.AddRange(info[Template.XBOXSSRanges].Split('\n')); - } - break; - case KnownSystem.SonyPlayStation4: - output.Add(Template.PlayStation4PICField + ":"); output.Add(""); - output.AddRange(info[Template.PlayStation4PICField].Split('\n')); - break; + output.Add(Template.PICField + ":"); output.Add(""); + output.AddRange(info[Template.PICField].Split('\n')); } + + if (info.ContainsKey(Template.GameCubeWiiBCAField)) + { + output.Add(Template.GameCubeWiiBCAField + ":"); output.Add(""); + output.AddRange(info[Template.GameCubeWiiBCAField].Split('\n')); + } + + if (info.ContainsKey(Template.CopyProtectionField)) + { + output.Add(Template.CopyProtectionField + ":"); output.Add(""); + output.AddRange(info[Template.CopyProtectionField].Split('\n')); + } + + if (info.ContainsKey(Template.XBOXDMIHash)) + { + output.Add(Template.XBOXDMIHash + ": " + info[Template.XBOXDMIHash]); + output.Add(Template.XBOXPFIHash + ": " + info[Template.XBOXPFIHash]); + output.Add(Template.XBOXSSHash + ": " + info[Template.XBOXSSHash]); output.Add(""); + output.Add(Template.XBOXSSVersion + ": " + info[Template.XBOXSSVersion]); + output.Add(Template.XBOXSSRanges + ":"); output.Add(""); + output.AddRange(info[Template.XBOXSSRanges].Split('\n')); + } + if (info.ContainsKey(Template.SubIntentionField)) { output.Add(Template.SubIntentionField + ":"); output.Add(""); output.AddRange(info[Template.SubIntentionField].Split('\n')); output.Add(""); } + if (info.ContainsKey(Template.DATField)) { output.Add(Template.DATField + ":"); output.Add(""); output.AddRange(info[Template.DATField].Split('\n')); output.Add(""); } - switch (Type) + + if (info.ContainsKey(Template.CuesheetField)) { - case MediaType.CDROM: - case MediaType.GDROM: - output.Add(Template.CuesheetField + ":"); output.Add(""); - output.AddRange(info[Template.CuesheetField].Split('\n')); output.Add(""); - output.Add(Template.WriteOffsetField + ": " + info[Template.WriteOffsetField]); - break; + output.Add(Template.CuesheetField + ":"); output.Add(""); + output.AddRange(info[Template.CuesheetField].Split('\n')); output.Add(""); } + if (info.ContainsKey(Template.WriteOffsetField)) + output.Add(Template.WriteOffsetField + ": " + info[Template.WriteOffsetField]); + return output; } catch @@ -1344,7 +1382,7 @@ namespace DICUI.Utilities /// Path to the PIC.bin file associated with the dump /// PIC data as a hex string if possible, null on error /// https://stackoverflow.com/questions/9932096/add-separator-to-string-at-every-n-characters - private string GetPlayStation4PIC(string picPath) + private string GetPIC(string picPath) { // If the file doesn't exist, we can't get the info if (!File.Exists(picPath)) diff --git a/DICUI.Library/Utilities/Validators.cs b/DICUI.Library/Utilities/Validators.cs index 7b2efa16..4804d9f1 100644 --- a/DICUI.Library/Utilities/Validators.cs +++ b/DICUI.Library/Utilities/Validators.cs @@ -617,6 +617,11 @@ namespace DICUI.Utilities types.Add(MediaType.HDDVD); break; + // UNKNOWN + case KnownSystem.NavisoftNaviken21: + types.Add(MediaType.CDROM); + break; + // UNKNOWN case KnownSystem.PalmOS: types.Add(MediaType.CDROM);