/// <summary> /// Adds standard ROM details /// </summary> /// <param name="builder">Data builder</param> /// <param name="rom">ROM image</param> /// <param name="data">ROM information</param> private void AddStandardData(RomExDataBuilder builder, byte[] rom, RomData data) { const string general = RomExDataBuilder.GeneralCat; builder.AddData(general, "Platform", data.Platform.ID.GetDescription()); builder.AddData(general, "ROM format", data.FormatName); if (data.ExternalHeader != null) { builder.AddData(general, "External Header", data.ExternalHeader.Value ? "Yes" : "No"); } builder.AddData(general, "File Size", data.FileSize.ToString() + " (" + data.FileSize.ToString("x") + ")"); builder.AddData(general, "ROM Size", data.RomSize.ToString() + " (" + data.RomSize.ToString("x") + ")"); // ROM hashes var crc32 = data.GetHash(HashFlags.RomHash | HashFlags.CRC32); var sha1 = data.GetHash(HashFlags.RomHash | HashFlags.SHA1); if (crc32 != null) { builder.AddData(general, RomHash.GetHashName(HashFlags.RomHash | HashFlags.CRC32), Hex.FormatHex(crc32.Value)); } if (sha1 != null) { builder.AddData(general, RomHash.GetHashName(HashFlags.RomHash | HashFlags.SHA1), Hex.FormatHex(sha1.Value)); } // File hashes as a last resort when ROM hashes aren't present if (crc32 == null) { crc32 = data.GetHash(HashFlags.FileHash | HashFlags.CRC32); if (crc32 != null) { builder.AddData(general, RomHash.GetHashName(HashFlags.FileHash | HashFlags.CRC32), Hex.FormatHex(crc32.Value)); } } if (sha1 == null) { sha1 = data.GetHash(HashFlags.FileHash | HashFlags.SHA1); if (sha1 != null) { builder.AddData(general, RomHash.GetHashName(HashFlags.FileHash | HashFlags.SHA1), Hex.FormatHex(sha1.Value)); } } for (int i = 0; i < data.DatabaseMatches.Count; i++) { var match = data.DatabaseMatches[i]; builder.AddData(general, match.Database.Name + " entry", match.Entry.name); } for (int i = 0; i < data.Hashes.Count; i++) { builder.AddData( RomExDataBuilder.HashesCat, RomHash.GetHashName(data.Hashes[i].Type), Hex.FormatHex(data.Hashes[i].Value)); } }
/// <summary> /// Attempts to find the specified hash and append it to the string builder for RHDN-specific output. /// </summary> /// <param name="hashtype">The hash type (i.e. CRC32/MD5/SHA1). File/ROM/PRG/CHR should NOT be specified.</param> /// <returns>True if ANYTHING was appended to the string builder.</returns> /// <param name="rom"></param> /// <param name="sb"></param> private static bool AddHashToSB(StringBuilder sb, RomData rom, HashFlags hashtype) { string hashname = RomHash.GetHashName(HashFlags.RomHash | hashtype); var hash = rom.GetHash(HashFlags.RomHash | hashtype); if (hash == null) { hashname = hashname = RomHash.GetHashName(HashFlags.FileHash | hashtype);; hash = rom.GetHash(HashFlags.FileHash | hashtype); } if (hash == null) { return(false); } sb.AppendLine(hashname + ": " + Hex.FormatHex(hash.Value)); return(true); }
/// <summary> /// Updates the ROM summary if a primary ROM is loaded /// </summary> private void UpdateRomSummary() { // Summary (only shown if a primary ROM is loaded) if (PrimaryRom != null) { StringBuilder summary = new StringBuilder(); // List DB Matches var EntryMatches = PrimaryRom.DatabaseMatches; string preferredDB = Program.Config.PreferredDatabaseName; bool preferredDbNotFound = true; for (int iMatch = 0; iMatch < EntryMatches.Count; iMatch++) { string dbName = EntryMatches[iMatch].Database.Name ?? "upenfeawnfwf;nfnfepfepoiefjifewjnfewnjfewpeafwiop"; bool isPreferredDb = dbName.Equals(preferredDB, StringComparison.InvariantCultureIgnoreCase); // First No-Intro match is considered canonical if (isPreferredDb & preferredDbNotFound) { //summary.AppendLine(preferredDB + " Name: " + EntryMatches[iMatch].Entry.name); summary.AppendLine("Database match: " + EntryMatches[iMatch].Entry.name); var platforms = String.Join(", ", EntryMatches[iMatch].Database.Platforms.ConvertAll <string>(plat => plat.ToString()).ToArray()); summary.AppendLine("Database: " + EntryMatches[iMatch].Database.Name + ": " + platforms + " (v. " + EntryMatches[iMatch].Database.Version + ")"); preferredDbNotFound = false; } else { if (isPreferredDb) { summary.AppendLine("Additional " + preferredDB + " Name: " + EntryMatches[iMatch].Entry.name); } else { summary.AppendLine(EntryMatches[iMatch].Database.Name + " Name: " + EntryMatches[iMatch].Entry.name); } } // DB Version summary.AppendLine(GetDbVersionString(EntryMatches[iMatch].Database)); } if (preferredDbNotFound) { summary.AppendLine("ROM not found in Database: " + preferredDB); } // Primary ROM hashes List <RomHash> hashes = new List <RomHash>(); var desiredHashes = Program.Config.RhdnPreferredHashes; for (int i = 0; i < desiredHashes.Count; i++) { var hash = PrimaryRom.GetHash(desiredHashes[i]); if (hash != null) { hashes.Add(hash); } } AddHashesToSB(summary, hashes, null); // Secondary ROM hashes if (SecondaryRom != null) { hashes.Clear(); for (int i = 0; i < desiredHashes.Count; i++) { var hash = SecondaryRom.GetHash(desiredHashes[i]); if (hash != null) { hashes.Add(hash); } } AddHashesToSB(summary, hashes, "Patched"); } txtRHDN.Text = summary.ToString(); } }