diff --git a/SabreTools.Library/DatFiles/DatHeader.cs b/SabreTools.Library/DatFiles/DatHeader.cs index f5e8a45e..0f5b72ed 100644 --- a/SabreTools.Library/DatFiles/DatHeader.cs +++ b/SabreTools.Library/DatFiles/DatHeader.cs @@ -236,6 +236,11 @@ namespace SabreTools.Library.DatFiles [JsonProperty("screenshotsheight")] public string ScreenshotsHeight { get; set; } + /// + /// OfflineList info list + /// + public List> Infos { get; set; } + /// /// Rom title /// diff --git a/SabreTools.Library/DatFiles/Json.cs b/SabreTools.Library/DatFiles/Json.cs index 1e5676ae..d99d7503 100644 --- a/SabreTools.Library/DatFiles/Json.cs +++ b/SabreTools.Library/DatFiles/Json.cs @@ -253,6 +253,64 @@ namespace SabreTools.Library.DatFiles Header.ScreenshotsHeight = (Header.ScreenshotsHeight == null ? content : Header.ScreenshotsHeight); break; + case "infos": + Header.Infos = new List>(); + jtr.Read(); // Start Array + while (!sr.EndOfStream) + { + jtr.Read(); // Start object (or end array) + if (jtr.TokenType == JsonToken.EndArray) + break; + + // Get default values + string nameValue = string.Empty; + bool? visibleValue = null; + bool? inNamingOptionValue = null; + bool? defaultValue = null; + + jtr.Read(); + while (!sr.EndOfStream) + { + // If we hit the end of the machine, return + if (jtr.TokenType == JsonToken.EndObject) + return; + + // We don't care about anything except properties + if (jtr.TokenType != JsonToken.PropertyName) + { + jtr.Read(); + continue; + } + + switch (jtr.Value) + { + case "name": + nameValue = jtr.ReadAsString(); + break; + case "visible": + visibleValue = jtr.ReadAsString().AsYesNo(); + break; + case "inNamingOption": + inNamingOptionValue = jtr.ReadAsString().AsYesNo(); + break; + case "default": + defaultValue = jtr.ReadAsString().AsYesNo(); + break; + } + + jtr.Read(); // End object + } + + // Add the new info tuple + Header.Infos.Add(new Tuple( + nameValue, + visibleValue, + inNamingOptionValue, + defaultValue)); + } + + break; + case "romtitle": content = jtr.ReadAsString(); Header.RomTitle = (Header.MameConfig == null ? content : Header.RomTitle); @@ -1086,6 +1144,27 @@ namespace SabreTools.Library.DatFiles jtw.WriteValue(Header.ScreenshotsHeight); } + if (Header.Infos != null) + { + jtw.WritePropertyName("infos"); + jtw.WriteStartArray(); + foreach (var info in Header.Infos) + { + jtw.WriteStartObject(); + jtw.WritePropertyName("name"); + jtw.WriteValue(info.Item1); + jtw.WritePropertyName("visible"); + jtw.WriteValue(info.Item2.ToString()); + jtw.WritePropertyName("inNamingOption"); + jtw.WriteValue(info.Item3.ToString()); + jtw.WritePropertyName("default"); + jtw.WriteValue(info.Item4.ToString()); + jtw.WriteEndObject(); + } + + jtw.WriteEndArray(); + } + if (!string.IsNullOrWhiteSpace(Header.RomTitle)) { jtw.WritePropertyName("romtitle"); diff --git a/SabreTools.Library/DatFiles/OfflineList.cs b/SabreTools.Library/DatFiles/OfflineList.cs index c316a639..fb753bea 100644 --- a/SabreTools.Library/DatFiles/OfflineList.cs +++ b/SabreTools.Library/DatFiles/OfflineList.cs @@ -7,6 +7,7 @@ using System.Xml; using SabreTools.Library.Data; using SabreTools.Library.DatItems; using SabreTools.Library.IO; +using SabreTools.Library.Tools; namespace SabreTools.Library.DatFiles { @@ -154,7 +155,6 @@ namespace SabreTools.Library.DatFiles Header.ScreenshotsHeight = (Header.ScreenshotsHeight == null ? content : Header.ScreenshotsHeight); break; - // TODO: Use header values case "infos": ReadInfos(reader.ReadSubtree()); @@ -208,6 +208,9 @@ namespace SabreTools.Library.DatFiles if (reader == null) return; + // Setup the infos object + Header.Infos = new List>(); + // Otherwise, add what is possible reader.MoveToContent(); @@ -221,104 +224,13 @@ namespace SabreTools.Library.DatFiles continue; } - // Get all infos items - switch (reader.Name.ToLowerInvariant()) - { - case "title": - reader.GetAttribute("visible"); // (true|false) - reader.GetAttribute("inNamingOption"); // (true|false) - reader.GetAttribute("default"); // (true|false) - reader.Read(); - break; - - case "location": - reader.GetAttribute("visible"); // (true|false) - reader.GetAttribute("inNamingOption"); // (true|false) - reader.GetAttribute("default"); // (true|false) - reader.Read(); - break; - - case "publisher": - reader.GetAttribute("visible"); // (true|false) - reader.GetAttribute("inNamingOption"); // (true|false) - reader.GetAttribute("default"); // (true|false) - reader.Read(); - break; - - case "sourcerom": - reader.GetAttribute("visible"); // (true|false) - reader.GetAttribute("inNamingOption"); // (true|false) - reader.GetAttribute("default"); // (true|false) - reader.Read(); - break; - - case "savetype": - reader.GetAttribute("visible"); // (true|false) - reader.GetAttribute("inNamingOption"); // (true|false) - reader.GetAttribute("default"); // (true|false) - reader.Read(); - break; - - case "romsize": - reader.GetAttribute("visible"); // (true|false) - reader.GetAttribute("inNamingOption"); // (true|false) - reader.GetAttribute("default"); // (true|false) - reader.Read(); - break; - - case "releasenumber": - reader.GetAttribute("visible"); // (true|false) - reader.GetAttribute("inNamingOption"); // (true|false) - reader.GetAttribute("default"); // (true|false) - reader.Read(); - break; - - case "languagenumber": - reader.GetAttribute("visible"); // (true|false) - reader.GetAttribute("inNamingOption"); // (true|false) - reader.GetAttribute("default"); // (true|false) - reader.Read(); - break; - - case "comment": - reader.GetAttribute("visible"); // (true|false) - reader.GetAttribute("inNamingOption"); // (true|false) - reader.GetAttribute("default"); // (true|false) - reader.Read(); - break; - - case "romcrc": - reader.GetAttribute("visible"); // (true|false) - reader.GetAttribute("inNamingOption"); // (true|false) - reader.GetAttribute("default"); // (true|false) - reader.Read(); - break; - - case "im1crc": - reader.GetAttribute("visible"); // (true|false) - reader.GetAttribute("inNamingOption"); // (true|false) - reader.GetAttribute("default"); // (true|false) - reader.Read(); - break; - - case "im2crc": - reader.GetAttribute("visible"); // (true|false) - reader.GetAttribute("inNamingOption"); // (true|false) - reader.GetAttribute("default"); // (true|false) - reader.Read(); - break; - - case "languages": - reader.GetAttribute("visible"); // (true|false) - reader.GetAttribute("inNamingOption"); // (true|false) - reader.GetAttribute("default"); // (true|false) - reader.Read(); - break; - - default: - reader.Read(); - break; - } + // Add all tuples to the info list + Header.Infos.Add(new Tuple( + reader.Name.ToLowerInvariant(), + reader.GetAttribute("visible").AsYesNo(), + reader.GetAttribute("inNamingOption").AsYesNo(), + reader.GetAttribute("default").AsYesNo())); + reader.Read(); } } @@ -854,89 +766,23 @@ namespace SabreTools.Library.DatFiles xtw.WriteElementString("screenshotsWidth", Header.ScreenshotsWidth ?? string.Empty); xtw.WriteElementString("screenshotsHeight", Header.ScreenshotsHeight ?? string.Empty); - xtw.WriteStartElement("infos"); + if (Header.Infos != null) + { + xtw.WriteStartElement("infos"); - xtw.WriteStartElement("title"); - xtw.WriteAttributeString("visible", "false"); - xtw.WriteAttributeString("inNamingOption", "true"); - xtw.WriteAttributeString("default", "false"); - xtw.WriteEndElement(); - - xtw.WriteStartElement("location"); - xtw.WriteAttributeString("visible", "true"); - xtw.WriteAttributeString("inNamingOption", "true"); - xtw.WriteAttributeString("default", "true"); - xtw.WriteEndElement(); - - xtw.WriteStartElement("publisher"); - xtw.WriteAttributeString("visible", "true"); - xtw.WriteAttributeString("inNamingOption", "true"); - xtw.WriteAttributeString("default", "true"); - xtw.WriteEndElement(); - - xtw.WriteStartElement("sourceRom"); - xtw.WriteAttributeString("visible", "true"); - xtw.WriteAttributeString("inNamingOption", "true"); - xtw.WriteAttributeString("default", "true"); - xtw.WriteEndElement(); - - xtw.WriteStartElement("saveType"); - xtw.WriteAttributeString("visible", "true"); - xtw.WriteAttributeString("inNamingOption", "true"); - xtw.WriteAttributeString("default", "true"); - xtw.WriteEndElement(); - - xtw.WriteStartElement("romSize"); - xtw.WriteAttributeString("visible", "true"); - xtw.WriteAttributeString("inNamingOption", "true"); - xtw.WriteAttributeString("default", "true"); - xtw.WriteEndElement(); - - xtw.WriteStartElement("releaseNumber"); - xtw.WriteAttributeString("visible", "true"); - xtw.WriteAttributeString("inNamingOption", "true"); - xtw.WriteAttributeString("default", "false"); - xtw.WriteEndElement(); - - xtw.WriteStartElement("languageNumber"); - xtw.WriteAttributeString("visible", "true"); - xtw.WriteAttributeString("inNamingOption", "true"); - xtw.WriteAttributeString("default", "false"); - xtw.WriteEndElement(); - - xtw.WriteStartElement("comment"); - xtw.WriteAttributeString("visible", "true"); - xtw.WriteAttributeString("inNamingOption", "true"); - xtw.WriteAttributeString("default", "false"); - xtw.WriteEndElement(); - - xtw.WriteStartElement("romCRC"); - xtw.WriteAttributeString("visible", "true"); - xtw.WriteAttributeString("inNamingOption", "true"); - xtw.WriteAttributeString("default", "false"); - xtw.WriteEndElement(); - - xtw.WriteStartElement("im1CRC"); - xtw.WriteAttributeString("visible", "false"); - xtw.WriteAttributeString("inNamingOption", "false"); - xtw.WriteAttributeString("default", "false"); - xtw.WriteEndElement(); - - xtw.WriteStartElement("im2CRC"); - xtw.WriteAttributeString("visible", "false"); - xtw.WriteAttributeString("inNamingOption", "false"); - xtw.WriteAttributeString("default", "false"); - xtw.WriteEndElement(); - - xtw.WriteStartElement("languages"); - xtw.WriteAttributeString("visible", "true"); - xtw.WriteAttributeString("inNamingOption", "true"); - xtw.WriteAttributeString("default", "true"); - xtw.WriteEndElement(); - - // End infos - xtw.WriteEndElement(); + foreach (var info in Header.Infos) + { + xtw.WriteStartElement(info.Item1); + xtw.WriteAttributeString("visible", info.Item2.ToString()); + xtw.WriteAttributeString("inNamingOption", info.Item3.ToString()); + xtw.WriteAttributeString("default", info.Item4.ToString()); + xtw.WriteEndElement(); + } + // End infos + xtw.WriteEndElement(); + } + xtw.WriteStartElement("canOpen"); xtw.WriteElementString("extension", ".bin"); xtw.WriteEndElement(); diff --git a/SabreTools.Library/DatFiles/SeparatedValue.cs b/SabreTools.Library/DatFiles/SeparatedValue.cs index 69466cbc..57a4e01c 100644 --- a/SabreTools.Library/DatFiles/SeparatedValue.cs +++ b/SabreTools.Library/DatFiles/SeparatedValue.cs @@ -222,6 +222,8 @@ namespace SabreTools.Library.DatFiles Header.ScreenshotsHeight = (Header.ScreenshotsHeight == null ? value : Header.ScreenshotsHeight); break; + // TODO: Figure out how Header.Infos could be read in + case "DatFile.RomTitle": Header.RomTitle = (Header.RomTitle == null ? value : Header.RomTitle); break;