diff --git a/SabreTools.Library/DatFiles/DatHeader.cs b/SabreTools.Library/DatFiles/DatHeader.cs
index 0f5b72ed..bbe7c5fd 100644
--- a/SabreTools.Library/DatFiles/DatHeader.cs
+++ b/SabreTools.Library/DatFiles/DatHeader.cs
@@ -239,8 +239,15 @@ namespace SabreTools.Library.DatFiles
///
/// OfflineList info list
///
+ [JsonProperty("infos")]
public List> Infos { get; set; }
+ ///
+ /// OfflineList can-open extensions
+ ///
+ [JsonProperty("canopen")]
+ public List CanOpen { get; set; }
+
///
/// Rom title
///
diff --git a/SabreTools.Library/DatFiles/Json.cs b/SabreTools.Library/DatFiles/Json.cs
index d99d7503..652a5787 100644
--- a/SabreTools.Library/DatFiles/Json.cs
+++ b/SabreTools.Library/DatFiles/Json.cs
@@ -311,6 +311,16 @@ namespace SabreTools.Library.DatFiles
break;
+ case "canopen":
+ Header.CanOpen = new List();
+ jtr.Read(); // Start Array
+ while (!sr.EndOfStream && jtr.TokenType != JsonToken.EndArray)
+ {
+ Header.CanOpen.Add(jtr.ReadAsString());
+ }
+
+ break;
+
case "romtitle":
content = jtr.ReadAsString();
Header.RomTitle = (Header.MameConfig == null ? content : Header.RomTitle);
@@ -1165,6 +1175,18 @@ namespace SabreTools.Library.DatFiles
jtw.WriteEndArray();
}
+ if (Header.CanOpen != null)
+ {
+ jtw.WritePropertyName("canopen");
+ jtw.WriteStartArray();
+ foreach (string extension in Header.CanOpen)
+ {
+ jtw.WriteValue(extension);
+ }
+
+ 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 fb753bea..0a45e939 100644
--- a/SabreTools.Library/DatFiles/OfflineList.cs
+++ b/SabreTools.Library/DatFiles/OfflineList.cs
@@ -162,7 +162,6 @@ namespace SabreTools.Library.DatFiles
reader.Skip();
break;
- // TODO: Use header values
case "canopen":
ReadCanOpen(reader.ReadSubtree());
@@ -170,7 +169,7 @@ namespace SabreTools.Library.DatFiles
reader.Skip();
break;
- // TODO: Use header values
+ // TODO: Use all header values
case "newdat":
ReadNewDat(reader.ReadSubtree());
@@ -241,7 +240,7 @@ namespace SabreTools.Library.DatFiles
private void ReadCanOpen(XmlReader reader)
{
// Prepare all internal variables
- List extensions = new List();
+ Header.CanOpen = new List();
// If there's no subtree to the configuration, skip it
if (reader == null)
@@ -264,7 +263,7 @@ namespace SabreTools.Library.DatFiles
switch (reader.Name.ToLowerInvariant())
{
case "extension":
- extensions.Add(reader.ReadElementContentAsString());
+ Header.CanOpen.Add(reader.ReadElementContentAsString());
break;
default:
@@ -783,9 +782,18 @@ namespace SabreTools.Library.DatFiles
xtw.WriteEndElement();
}
- xtw.WriteStartElement("canOpen");
- xtw.WriteElementString("extension", ".bin");
- xtw.WriteEndElement();
+ if (Header.CanOpen != null)
+ {
+ xtw.WriteStartElement("canOpen");
+
+ foreach (string extension in Header.CanOpen)
+ {
+ xtw.WriteElementString("extension", extension);
+ }
+
+ // End canOpen
+ xtw.WriteEndElement();
+ }
xtw.WriteStartElement("newDat");
xtw.WriteElementString("datVersionURL", Header.Url);
diff --git a/SabreTools.Library/DatFiles/SeparatedValue.cs b/SabreTools.Library/DatFiles/SeparatedValue.cs
index 57a4e01c..b4528601 100644
--- a/SabreTools.Library/DatFiles/SeparatedValue.cs
+++ b/SabreTools.Library/DatFiles/SeparatedValue.cs
@@ -222,7 +222,19 @@ 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.Infos":
+ // TODO: Figure out how Header.Infos could be read in
+ break;
+
+ case "DatFile.CanOpen":
+ Header.CanOpen = new List();
+ var extensions = value.Split(';');
+ foreach (var extension in extensions)
+ {
+ Header.CanOpen.Add(extension);
+ }
+
+ break;
case "DatFile.RomTitle":
Header.RomTitle = (Header.RomTitle == null ? value : Header.RomTitle);
@@ -814,6 +826,22 @@ namespace SabreTools.Library.DatFiles
case "screenshots-height":
return "DatFile.ScreenshotsHeight";
+ case "offlineinfos":
+ case "offline infos":
+ case "offline-infos":
+ case "olinfos":
+ case "ol infos":
+ case "ol-infos":
+ case "offlinelistinfos":
+ case "offlinelist infos":
+ case "offlinelist-infos":
+ return "DatFile.Infos";
+
+ case "canopen":
+ case "can open":
+ case "can-open":
+ return "DatFile.CanOpen";
+
case "romtitle":
case "rom title":
case "rom-title":