using System; using SabreTools.Core; using SabreTools.Models.RomCenter; namespace SabreTools.DatFiles.Formats { /// /// Represents parsing a RomCenter INI file /// internal partial class RomCenter : DatFile { /// public override void ParseFile(string filename, int indexId, bool keep, bool statsOnly = false, bool throwOnError = false) { try { // Deserialize the input file var metadataFile = new Serialization.Files.RomCenter().Deserialize(filename); var metadata = new Serialization.CrossModel.RomCenter().Serialize(metadataFile); // Convert the credits data to the internal format ConvertCredits(metadataFile?.Credits); // Convert the dat data to the internal format ConvertDat(metadataFile?.Dat); // Convert the emulator data to the internal format ConvertEmulator(metadataFile?.Emulator); // Convert to the internal format ConvertMetadata(metadata, filename, indexId, statsOnly); } catch (Exception ex) when (!throwOnError) { string message = $"'{filename}' - An error occurred during parsing"; logger.Error(ex, message); } } #region Converters /// /// Convert credits information /// /// Deserialized model to convert private void ConvertCredits(Models.RomCenter.Credits? credits) { // If the credits is missing, we can't do anything if (credits == null) return; if (Header.GetFieldValue(Models.Metadata.Header.AuthorKey) == null) Header.SetFieldValue(Models.Metadata.Header.AuthorKey, credits.Author); if (Header.GetFieldValue(Models.Metadata.Header.CommentKey) == null) Header.SetFieldValue(Models.Metadata.Header.CommentKey, credits.Comment); if (Header.GetFieldValue(Models.Metadata.Header.DateKey) == null) Header.SetFieldValue(Models.Metadata.Header.DateKey, credits.Date); if (Header.GetFieldValue(Models.Metadata.Header.EmailKey) == null) Header.SetFieldValue(Models.Metadata.Header.EmailKey, credits.Email); if (Header.GetFieldValue(Models.Metadata.Header.HomepageKey) == null) Header.SetFieldValue(Models.Metadata.Header.HomepageKey, credits.Homepage); if (Header.GetFieldValue(Models.Metadata.Header.UrlKey) == null) Header.SetFieldValue(Models.Metadata.Header.UrlKey, credits.Url); if (Header.GetFieldValue(Models.Metadata.Header.VersionKey) == null) Header.SetFieldValue(Models.Metadata.Header.VersionKey, credits.Version); } /// /// Convert dat information /// /// Deserialized model to convert private void ConvertDat(Models.RomCenter.Dat? dat) { // If the dat is missing, we can't do anything if (dat == null) return; if (Header.GetFieldValue(Models.Metadata.Header.DatVersionKey) == null) Header.SetFieldValue(Models.Metadata.Header.DatVersionKey, dat.Version); if (Header.GetFieldValue(Models.Metadata.Header.ForceMergingKey) == MergingFlag.None && dat.Split == "1") Header.SetFieldValue(Models.Metadata.Header.ForceMergingKey, MergingFlag.Split); if (Header.GetFieldValue(Models.Metadata.Header.ForceMergingKey) == MergingFlag.None && dat.Merge == "1") Header.SetFieldValue(Models.Metadata.Header.ForceMergingKey, MergingFlag.Merged); if (Header.GetFieldValue(Models.Metadata.Header.SystemKey) == null) Header.SetFieldValue(Models.Metadata.Header.SystemKey, dat.Plugin); } /// /// Convert emulator information /// /// Deserialized model to convert private void ConvertEmulator(Models.RomCenter.Emulator? emulator) { // If the emulator is missing, we can't do anything if (emulator == null) return; if (Header.GetFieldValue(Models.Metadata.Header.EmulatorVersionKey) == null) Header.SetFieldValue(Models.Metadata.Header.EmulatorVersionKey, emulator.Version); if (Header.GetFieldValue(Models.Metadata.Header.RefNameKey) == null) Header.SetFieldValue(Models.Metadata.Header.RefNameKey, emulator.RefName); } #endregion } }