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;