using System.Collections.Generic; using System.Linq; using SabreTools.Core; using SabreTools.Core.Tools; namespace SabreTools.DatFiles { public partial class DatFile { #region To Metadata /// /// Convert metadata information /// public Models.Metadata.MetadataFile? ConvertMetadata() { // If we don't have items, we can't do anything if (this.Items == null || !this.Items.Any()) return null; // Create an object to hold the data var metadataFile = new Models.Metadata.MetadataFile(); // Convert and assign the header var header = ConvertHeader(); if (header != null) metadataFile[Models.Metadata.MetadataFile.HeaderKey] = header; // TODO: Implement machine creation return metadataFile; } /// /// Convert header information /// private Models.Metadata.Header? ConvertHeader() { // If the header is invalid, we can't do anything if (Header == null) return null; // Create an internal header var header = new Models.Metadata.Header(); if (Header.GetFieldValue(Models.Metadata.Header.AuthorKey) == null) header[Models.Metadata.Header.AuthorKey] = Header.GetFieldValue(Models.Metadata.Header.AuthorKey); if (Header.GetFieldValue(Models.Metadata.Header.BiosModeKey) == MergingFlag.None) header[Models.Metadata.Header.BiosModeKey] = Header.GetFieldValue(Models.Metadata.Header.BiosModeKey); if (Header.GetFieldValue(Models.Metadata.Header.BuildKey) == null) header[Models.Metadata.Header.BuildKey] = Header.GetFieldValue(Models.Metadata.Header.BuildKey); if (Header.GetFieldValue(Models.Metadata.Header.CategoryKey) == null) header[Models.Metadata.Header.CategoryKey] = Header.GetFieldValue(Models.Metadata.Header.CategoryKey); if (Header.GetFieldValue(Models.Metadata.Header.CommentKey) == null) header[Models.Metadata.Header.CommentKey] = Header.GetFieldValue(Models.Metadata.Header.CommentKey); if (Header.GetFieldValue(Models.Metadata.Header.DateKey) == null) header[Models.Metadata.Header.DateKey] = Header.GetFieldValue(Models.Metadata.Header.DateKey); if (Header.GetFieldValue(Models.Metadata.Header.DatVersionKey) == null) header[Models.Metadata.Header.DatVersionKey] = Header.GetFieldValue(Models.Metadata.Header.DatVersionKey); if (Header.GetFieldValue(Models.Metadata.Header.DebugKey) == null) header[Models.Metadata.Header.DebugKey] = Header.GetFieldValue(Models.Metadata.Header.DebugKey); if (Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) == null) header[Models.Metadata.Header.DescriptionKey] = Header.GetFieldValue(Models.Metadata.Header.DescriptionKey); if (Header.GetFieldValue(Models.Metadata.Header.EmailKey) == null) header[Models.Metadata.Header.EmailKey] = Header.GetFieldValue(Models.Metadata.Header.EmailKey); if (Header.GetFieldValue(Models.Metadata.Header.EmulatorVersionKey) == null) header[Models.Metadata.Header.EmulatorVersionKey] = Header.GetFieldValue(Models.Metadata.Header.EmulatorVersionKey); if (Header.GetFieldValue(Models.Metadata.Header.ForceMergingKey) == MergingFlag.None) header[Models.Metadata.Header.ForceMergingKey] = Header.GetFieldValue(Models.Metadata.Header.ForceMergingKey); if (Header.GetFieldValue(Models.Metadata.Header.ForceNodumpKey) == NodumpFlag.None) header[Models.Metadata.Header.ForceNodumpKey] = Header.GetFieldValue(Models.Metadata.Header.ForceNodumpKey); if (Header.GetFieldValue(Models.Metadata.Header.ForcePackingKey) == PackingFlag.None) header[Models.Metadata.Header.ForcePackingKey] = Header.GetFieldValue(Models.Metadata.Header.ForcePackingKey); if (Header.GetFieldValue(Models.Metadata.Header.HeaderKey) == null) header[Models.Metadata.Header.HeaderKey] = Header.GetFieldValue(Models.Metadata.Header.HeaderKey); if (Header.GetFieldValue(Models.Metadata.Header.HomepageKey) == null) header[Models.Metadata.Header.HomepageKey] = Header.GetFieldValue(Models.Metadata.Header.HomepageKey); if (Header.GetFieldValue(Models.Metadata.Header.IdKey) == null) header[Models.Metadata.Header.IdKey] = Header.GetFieldValue(Models.Metadata.Header.IdKey); if (Header.GetFieldValue(Models.Metadata.Header.ImFolderKey) == null) header[Models.Metadata.Header.ImFolderKey] = Header.GetFieldValue(Models.Metadata.Header.ImFolderKey); if (Header.GetFieldValue(Models.Metadata.Header.LockBiosModeKey) == null) header[Models.Metadata.Header.LockBiosModeKey] = Header.GetFieldValue(Models.Metadata.Header.LockBiosModeKey); if (Header.GetFieldValue(Models.Metadata.Header.LockRomModeKey) == null) header[Models.Metadata.Header.LockRomModeKey] = Header.GetFieldValue(Models.Metadata.Header.LockRomModeKey); if (Header.GetFieldValue(Models.Metadata.Header.LockSampleModeKey) == null) header[Models.Metadata.Header.LockSampleModeKey] = Header.GetFieldValue(Models.Metadata.Header.LockSampleModeKey); if (Header.GetFieldValue(Models.Metadata.Header.MameConfigKey) == null) header[Models.Metadata.Header.MameConfigKey] = Header.GetFieldValue(Models.Metadata.Header.NameKey); if (Header.GetFieldValue(Models.Metadata.Header.NameKey) == null) header[Models.Metadata.Header.NameKey] = Header.GetFieldValue(Models.Metadata.Header.MameConfigKey); if (Header.GetFieldValue(Models.Metadata.Header.PluginKey) == null) header[Models.Metadata.Header.PluginKey] = Header.GetFieldValue(Models.Metadata.Header.PluginKey); if (Header.GetFieldValue(Models.Metadata.Header.RefNameKey) == null) header[Models.Metadata.Header.RefNameKey] = Header.GetFieldValue(Models.Metadata.Header.RefNameKey); if (Header.GetFieldValue(Models.Metadata.Header.RomModeKey) == MergingFlag.None) header[Models.Metadata.Header.RomModeKey] = Header.GetFieldValue(Models.Metadata.Header.RomModeKey); if (Header.GetFieldValue(Models.Metadata.Header.RomTitleKey) == null) header[Models.Metadata.Header.RomTitleKey] = Header.GetFieldValue(Models.Metadata.Header.RomTitleKey); if (Header.GetFieldValue(Models.Metadata.Header.RootDirKey) == null) header[Models.Metadata.Header.RootDirKey] = Header.GetFieldValue(Models.Metadata.Header.RootDirKey); if (Header.GetFieldValue(Models.Metadata.Header.SampleModeKey) == MergingFlag.None) header[Models.Metadata.Header.SampleModeKey] = Header.GetFieldValue(Models.Metadata.Header.SampleModeKey); if (Header.GetFieldValue(Models.Metadata.Header.ScreenshotsHeightKey) == null) header[Models.Metadata.Header.ScreenshotsHeightKey] = Header.GetFieldValue(Models.Metadata.Header.ScreenshotsHeightKey); if (Header.GetFieldValue(Models.Metadata.Header.ScreenshotsWidthKey) == null) header[Models.Metadata.Header.ScreenshotsWidthKey] = Header.GetFieldValue(Models.Metadata.Header.ScreenshotsWidthKey); if (Header.GetFieldValue(Models.Metadata.Header.SystemKey) == null) header[Models.Metadata.Header.SystemKey] = Header.GetFieldValue(Models.Metadata.Header.SystemKey); if (Header.GetFieldValue(Models.Metadata.Header.TypeKey) == null) header[Models.Metadata.Header.TypeKey] = Header.GetFieldValue(Models.Metadata.Header.TypeKey); if (Header.GetFieldValue(Models.Metadata.Header.UrlKey) == null) header[Models.Metadata.Header.UrlKey] = Header.GetFieldValue(Models.Metadata.Header.UrlKey); if (Header.GetFieldValue(Models.Metadata.Header.VersionKey) == null) header[Models.Metadata.Header.VersionKey] = Header.GetFieldValue(Models.Metadata.Header.VersionKey); // Convert subheader values if (Header.CanOpenSpecified) header[Models.Metadata.Header.CanOpenKey] = Header.GetFieldValue(Models.Metadata.Header.CanOpenKey); // if (Header.ImagesSpecified) // // TODO: Add to internal model if (Header.InfosSpecified) { var infoItem = new Models.OfflineList.Infos(); var infos = Header.GetFieldValue(Models.Metadata.Header.InfosKey)!; foreach (var info in infos) { switch (info.Name) { case "title": infoItem.Title = new Models.OfflineList.Title { Visible = info.Visible.FromYesNo(), InNamingOption = info.InNamingOption.FromYesNo(), Default = info.Default.FromYesNo(), }; break; case "location": infoItem.Location = new Models.OfflineList.Location { Visible = info.Visible.FromYesNo(), InNamingOption = info.InNamingOption.FromYesNo(), Default = info.Default.FromYesNo(), }; break; case "publisher": infoItem.Publisher = new Models.OfflineList.Publisher { Visible = info.Visible.FromYesNo(), InNamingOption = info.InNamingOption.FromYesNo(), Default = info.Default.FromYesNo(), }; break; case "sourceRom": infoItem.SourceRom = new Models.OfflineList.SourceRom { Visible = info.Visible.FromYesNo(), InNamingOption = info.InNamingOption.FromYesNo(), Default = info.Default.FromYesNo(), }; break; case "saveType": infoItem.SaveType = new Models.OfflineList.SaveType { Visible = info.Visible.FromYesNo(), InNamingOption = info.InNamingOption.FromYesNo(), Default = info.Default.FromYesNo(), }; break; case "romSize": infoItem.RomSize = new Models.OfflineList.RomSize { Visible = info.Visible.FromYesNo(), InNamingOption = info.InNamingOption.FromYesNo(), Default = info.Default.FromYesNo(), }; break; case "releaseNumber": infoItem.ReleaseNumber = new Models.OfflineList.ReleaseNumber { Visible = info.Visible.FromYesNo(), InNamingOption = info.InNamingOption.FromYesNo(), Default = info.Default.FromYesNo(), }; break; case "languageNumber": infoItem.LanguageNumber = new Models.OfflineList.LanguageNumber { Visible = info.Visible.FromYesNo(), InNamingOption = info.InNamingOption.FromYesNo(), Default = info.Default.FromYesNo(), }; break; case "comment": infoItem.Comment = new Models.OfflineList.Comment { Visible = info.Visible.FromYesNo(), InNamingOption = info.InNamingOption.FromYesNo(), Default = info.Default.FromYesNo(), }; break; case "romCRC": infoItem.RomCRC = new Models.OfflineList.RomCRC { Visible = info.Visible.FromYesNo(), InNamingOption = info.InNamingOption.FromYesNo(), Default = info.Default.FromYesNo(), }; break; case "im1CRC": infoItem.Im1CRC = new Models.OfflineList.Im1CRC { Visible = info.Visible.FromYesNo(), InNamingOption = info.InNamingOption.FromYesNo(), Default = info.Default.FromYesNo(), }; break; case "im2CRC": infoItem.Im2CRC = new Models.OfflineList.Im2CRC { Visible = info.Visible.FromYesNo(), InNamingOption = info.InNamingOption.FromYesNo(), Default = info.Default.FromYesNo(), }; break; case "languages": infoItem.Languages = new Models.OfflineList.Languages { Visible = info.Visible.FromYesNo(), InNamingOption = info.InNamingOption.FromYesNo(), Default = info.Default.FromYesNo(), }; break; } } header[Models.Metadata.Header.InfosKey] = infoItem; } if (Header.NewDatSpecified) { var newDat = new Models.OfflineList.NewDat { DatVersionUrl = Header.GetFieldValue("DATVERSIONURL"), //DatUrl = Header.GetFieldValue("DATURL"), // TODO: Add to internal model ImUrl = Header.GetFieldValue("IMURL"), }; header[Models.Metadata.Header.NewDatKey] = newDat; } // if (Header.SearchSpecified) // // TODO: Add to internal model return header; } #endregion } }